Go의 복합 리터럴
Jay Singh
2023년1월30일
Go에는 boolean, string, numeric(float32, float64, int, int8, int16, int32, complex) 등과 같이 미리 선언된 유형이라고도 하는 다양한 내장 식별자 유형이 있습니다.
미리 선언된 유형으로 구성된 복합 유형도 있습니다. 배열, 구조체, 슬라이스 및 맵의 값은 합성 리터럴을 사용하여 구성됩니다.
평가될 때마다 새로운 가치가 생성됩니다. 이것은 리터럴의 유형 다음에 중괄호로 묶인 항목 목록으로 구성됩니다.
복합 리터럴 인스턴스를 살펴보겠습니다.
Go에서 복합 리터럴 슬라이스
슬라이스는 동일한 데이터 유형의 항목을 보유한다는 점에서 배열과 유사하게 작동하는 복합 데이터 유형입니다. 어레이와 슬라이스의 중요한 차이점은 슬라이스는 크기를 동적으로 변경할 수 있지만 어레이는 변경할 수 없다는 것입니다.
package main
import "fmt"
func main() {
s1 := []int{1, 2, 3, 4}
fmt.Println(s1)
}
출력:
[1 2 3 4]
Go의 배열 복합 리터럴
한 맵이 다른 맵에 할당되면 두 맵은 모든(기본) 구성 요소를 공유합니다. 한 지도에 항목을 추가하거나 요소를 제거하면 다른 지도에 영향을 줍니다.
슬라이스가 다른 슬라이스에 할당되면 둘은 맵 할당과 마찬가지로 모든(기본) 구성 요소를 공유합니다. 상대 길이와 용량은 동일합니다.
한 슬라이스의 길이나 용량이 나중에 변경되면 변경 사항이 다른 슬라이스에 반영되지 않습니다. 모든 항목은 하나가 다른 어레이에 할당될 때 소스 어레이에서 대상 어레이로 복사됩니다.
두 배열은 요소를 공유하지 않습니다.
package main
import "fmt"
func main() {
m0 := map[int]int{0: 2, 1: 3, 2: 4}
m1 := m0
m1[0] = 4
fmt.Println(m0, m1)
s0 := []int{5, 6, 7}
s1 := s0
s1[0] = 4
fmt.Println(s0, s1)
a0 := [...]int{5, 6, 7}
a1 := a0
a1[0] = 4
fmt.Println(a0, a1)
}
출력:
map[0:4 1:3 2:4] map[0:4 1:3 2:4]
[4 6 7] [4 6 7]
[5 6 7] [4 6 7]