구조체는 필드들을 묶어놓은 것으로 다른 언어들의 구조체, 클래스, 레코드 등과 비슷한 역할을 합니다. 구조체를 이용하면 더 복잡한 자료형을 정의할 수 있습니다. 자료를 네트워크를 통하여 전송하거나 파일에 저장하고 불러오는 경우에는 직렬화 및 역직렬화 기법을 활용해야 합니다. JSON은 이런 직렬화 및 역직렬화 형식 중에 하나로, 복잡한 구조체를 어떻게 JSON 형태로 직렬화하고 역직렬화할 수 있는지도 확인해봅니다.

구조체란?

필드들의 모음 혹은 묶음을 구조체라고 합니다. 명명된 구성요소들을 필드라고 합니다. 배열이 서로 같은 자료형의 자료들을 묶어놓은 것이라면 구조체는 서로 다른 자료형의 자료들도 묶을 수 있습니다.

사용법

var task = struct {
        title string
        done bool
        due *time.Time
    }{"laundry", false, nil}

구조체는 위와 같이 선언과 동시에 값을 넣을 수 있습니다. task란 구조체는 title이란 이름의 string 타입, done 이름의 bool 타입, due 이름의 *time.Time 타입이 존재하고 title에는 "laundry" 값을, done 에는 false 값을 due 에는 nil 값을 선언했습니다.


아래에서 위 구조체를 분해해가면서 설명하겠습니다.

type Task struct {
        title string
        done bool
        due *time.Time
    }

자료형은 struct {...} 부분입니다. 위는 명명된 구조체로 Task란 구조체를 타입으로 선언했습니다.


아래와 같이 Task 변수를 선언할 수 있습니다.

var tempTask Task


마지막을 값을 담아서 정의해보겠습니다.

var tempTask = Task{"laundry", false, nil}


아래와 같이 원하는 필드만 값을 넣을 수 있습니다. 넣지 않은 필드들은 기본값으로 설정됩니다. 기본값은 정수는 0, bool은 false, 문자열은 빈 문자열 등입니다.

var tempTask = Task{title: "laundry"}
var tempTask = Task{title: "laundry", done: true}


만약 한 줄이 아닌 여러 줄로 표현하고 싶다면 아래와 같이 표현합니다. 주의할 점은 필드 마지막에 쉼표(,)를 붙여야 합니다. 쉼표가 없을 경우, 세미콜론(;)이 붙은 것으로 인식되어 오류가 발생합니다.

var tempTask = Task{
        title: "laundry", 
        done: true,
    }


'언어 > GO' 카테고리의 다른 글

[GO] JSON 사용하기  (0) 2017.02.16
[GO] const와 iota  (0) 2017.02.15
[GO] 구조체 (struct)  (0) 2017.02.15
[GO] 메서드(Method)  (0) 2017.02.15
[GO] 명명된 함수형 (Named Function)  (0) 2017.02.08
[GO] 명명된 자료형 (Named Type)  (0) 2017.02.08

+ Random Posts