수색…
비고
한 가지주의해야 할 점은 string, ints, floats, bool 및 struct와 같이 0이 아닌 값이 아닌 유형은 nil로 설정할 수 없습니다.
기본 0 값
Go의 변수는 시작 값을 제공하는지 여부에 관계없이 항상 초기화됩니다. 사용자 정의 유형을 포함하여 각 유형은 값이 제공되지 않으면 설정되는 0 값을가집니다.
var myString string // "" - an empty string
var myInt int64 // 0 - applies to all types of int and uint
var myFloat float64 // 0.0 - applies to all types of float and complex
var myBool bool // false
var myPointer *string // nil
var myInter interface{} // nil
이는지도, 조각, 채널 및 함수 유형에도 적용됩니다. 이러한 유형은 nil로 초기화됩니다. 배열에서 각 요소는 해당 유형의 0 값으로 초기화됩니다.
더 복잡한 0 값
조각에서 0 값은 빈 조각입니다.
var myIntSlice []int // [] - an empty slice
make
를 사용하여 값이 채워진 슬라이스를 만들면 슬라이스에 생성 된 모든 값이 슬라이스 유형의 0 값으로 설정됩니다. 예를 들면 :
myIntSlice := make([]int, 5) // [0, 0, 0, 0, 0] - a slice with 5 zeroes
fmt.Println(myIntSlice[3])
// Prints 0
이 예에서, myIntSlice
A는 int
그 유형에 대한 제로 값을 모두 0이기 때문이다 5 개 원소가 포함되어 슬라이스 int
.
new
슬라이스를 만들 수도 있습니다. 슬라이스에 대한 포인터를 만듭니다.
myIntSlice := new([]int) // &[] - a pointer to an empty slice
*myIntSlice = make([]int, 5) // [0, 0, 0, 0, 0] - a slice with 5 zeroes
fmt.Println((*myIntSlice)[3])
// Prints 0
참고 : 슬라이스 포인터는 인덱싱을 지원하지 않으므로 myIntSlice[3]
사용하여 값에 액세스 할 수 없으므로 대신 (*myIntSlice)[3]
와 같이 수행해야합니다.
구조체 0 값
초기화하지 않고 구조체를 만들 때 구조체의 각 필드는 해당 0 값으로 초기화됩니다.
type ZeroStruct struct {
myString string
myInt int64
myBool bool
}
func main() {
var myZero = ZeroStruct{}
fmt.Printf("Zero values are: %q, %d, %t\n", myZero.myString, myZero.myInt, myZero.myBool)
// Prints "Zero values are: "", 0, false"
}
배열 제로 값
Go 블로그 당 :
배열은 명시 적으로 초기화 할 필요가 없습니다. 배열의 제로 값은 요소가 그 자체가 제로화 된 바로 사용할 수있는 배열입니다
예를 들어 myIntArray
는 0 인 int
값이 0으로 초기화됩니다.
var myIntArray [5]int // an array of five 0's: [0, 0, 0, 0, 0]