Go에서 슬라이스 지우기
이 기사에서는 Go에서 슬라이스를 지우는 최적의 접근 방식에 대해 설명합니다. 처음에 제안된 솔루션은 슬라이스를 자체 버퍼의 빈 범위로 설정하여 슬라이스를 지우는 것이었습니다. 이 접근 방식은 논리적인 것처럼 보이지만 슬라이스와 관련된 기본 메모리를 해제하지는 않습니다.
권장되는 해결 방법은 단순히 슬라이스를 nil로 설정하는 것입니다. Go의 Nil 슬라이스는 잘 동작하는 특성을 나타내며 슬라이스를 nil에 할당하면 기본 메모리가 가비지 수집기에 해제됩니다. 이 접근 방식은 초기 제안의 제한을 초래하지 않고 효과적으로 슬라이스를 지웁니다.
이 방법의 효율성을 설명하려면 다음 코드 샘플을 고려하세요.
package main import ( "fmt" ) func dump(letters []string) { fmt.Println("letters = ", letters) fmt.Println(cap(letters)) fmt.Println(len(letters)) for i := range letters { fmt.Println(i, letters[i]) } } func main() { letters := []string{"a", "b", "c", "d"} dump(letters) // clear the slice letters = nil dump(letters) // add stuff back to it letters = append(letters, "e") dump(letters) }
출력:
letters = [a b c d] 4 4 0 a 1 b 2 c 3 d letters = [] 0 0 letters = [e] 1 1 0 e
설명된 것처럼 슬라이스를 nil로 설정하면 용량을 포함한 내용이 지워집니다. 이를 통해 이전 작업에서 남은 데이터 없이 슬라이스를 효율적으로 재사용할 수 있습니다.
위 내용은 Go에서 슬라이스를 효과적으로 지우고 기본 메모리를 해제하려면 어떻게 해야 할까요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!