회사에서 Go 언어를 조금 사용하고 있는데, 정리하지 않으니 계속 찾게되어 기억하기 위해 적어봅니다.
package main
import (
"fmt"
"encoding/json"
"reflect"
)
func main() {
// Map 선언 및 초기화
var mapExample map[string]string
// 선언한 Map Type 확인
reflect.TypeOf(mapExample)
/* 잠시 알고 넘어가기
- 선언한 변수 mapExample은 nil 값을 가지기 때문에 바로 사용할 수 없다고 합니다.
- Nil Map에는 어떤 데이터도 추가할 수 없다. (http://golang.site/go/article/14-Go-%EC%BB%AC%EB%A0%89%EC%85%98---Map)
- mapExample["event"] = "new_order"
- Error: assignment to entry in nil map 발생
*/
// make() 함수로 초기화 후 map 사용하기
mapExample = make(map[string]string)
mapExample["event"] = "new_order"
mapExample["receiver"] = "main_server"
// Type 확인 및 데이터 출력
reflect.TypeOf(mapExample)
// map[string]string
fmt.Sprintf("Map: %v", mapExample) // %#v 값 출력
// map[event:new_order receiver:main_server]
fmt.Sprintf("Map: %#v", mapExample) // %v 타입과 값을 함께 출력
// Map: map[event:new_order receiver:main_server]
// 마셜링
marshalMap, err := json.Marshal(m)
fmt.Println(marshalMap)
// 출력 예시 [123 34 101 118 101 110 116 34 58 34 110 ...] <nil>
// 마셜링한 데이터 타입 확인
reflect.TypeOf(marshalMap)
// []unit8: unsigned integer 8 array, 부호가 없는 8비트(0~255) array
// 마셜링 데이터 string()함수로 변환
jsonString := string(marshalMap)
fmt.Println(string(jsonString))
// {"event":"new_order","receive":"customer"} <nil>
reflect.TypeOf(jsonString) // 데이터 타입 확인
// string
}