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)
}
  1. person이라는 이름의 구조체를 선언했습니다.
  2. 선언한 구조체를 기반으로 실제 구조체를 정의(생성)합니다.
  3. 구조체를 정의(생성)할때 필드이름을 지정해서 초기화 할 수 있습니다.
  4. 구조체 정의에서 필드이름을 생략하면 생략된 필드는 초기값(0, nil, “”)으로 초기화 됩니다.
  5. & 연산자를 이용하면, 구조체를 생성하고, 해당 구조체의 주소값(포인터)을 얻을 수 있습니다.
  6. 점(.)연산자를 이용해서, 구조체내부의 필드에 접근할 수 있습니다.
  7. 구조체 포인터에서도 역시 점(.)연산자로 내부 필드에 접근할 수 있습니다.
    이 경우 자동적으로 포인터에 역참조해서 접근하게 됩니다.
  8. 구조체는 언제든지 내부 필드의 값을 변경할 수 있습니다. (Mutable)

실행하면 다음과 같습니다.

$ go run structs.go
{Bob 20}
{Alice 30}
{Fred 0}
&{Ann 40}
Sean
50
51