Go by Example: [18] Structs
Structs
Go
언어에서는 필드의 집합체인 구조체(struct
)를 지원합니다.
레코드 단위로 데이들을 한개의 단위로 다뤄서 처리할 경우 아주 유용한 자료 구조입니다.
package main
import "fmt"
type person struct { // [1]
name string
age int
}
func main() {
fmt.Println(person{"Bob", 20}) // [2]
fmt.Println(person{name: "Alice", age: 30}) // [3]
fmt.Println(person{name: "Fred"}) // [4]
fmt.Println(&person{name: "Ann", age: 40}) // [5]
s := person{name: "Sean", age: 50} // [6]
fmt.Println(s.name)
sp := &s // [7]
fmt.Println(sp.age)
sp.age = 51 // [8]
fmt.Println(sp.age)
}
person
이라는 이름의 구조체를 선언했습니다.- 선언한 구조체를 기반으로 실제 구조체를 정의(생성)합니다.
- 구조체를 정의(생성)할때 필드이름을 지정해서 초기화 할 수 있습니다.
- 구조체 정의에서 필드이름을 생략하면 생략된 필드는 초기값(0, nil, “”)으로 초기화 됩니다.
&
연산자를 이용하면, 구조체를 생성하고, 해당 구조체의 주소값(포인터)을 얻을 수 있습니다.- 점(
.
)연산자를 이용해서, 구조체내부의 필드에 접근할 수 있습니다. - 구조체 포인터에서도 역시 점(
.
)연산자로 내부 필드에 접근할 수 있습니다.
이 경우 자동적으로 포인터에 역참조해서 접근하게 됩니다. - 구조체는 언제든지 내부 필드의 값을 변경할 수 있습니다. (Mutable)
실행하면 다음과 같습니다.
$ go run structs.go
{Bob 20}
{Alice 30}
{Fred 0}
&{Ann 40}
Sean
50
51