행궁동 데이터 엔지니어

반응형

회사에서 Go 언어를 조금 사용하고 있는데, 정리하지 않으니 계속 찾게되어 기억하기 위해 적어봅니다.

 

Map to Json (정확히는 Json 형태의 String) 결과 예시

요약

  • json.Marshal() 함수Map 타입 데이터를 마셜링 후 String으로 변환
  • *Marshalling(마셜링): 데이터를 프로그램이 인식할 수 있는 형태로 변형하는 것

 

예제 코드

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

}

 

참고자료

  1. AGUIDEHUB, “how to convert map to string in golang”, https://aguidehub.com/blog/2022-09-07-golang-convert-map-to-string/
  2. 예제로 배우는 Go 프로그래밍, “GO 컬렉션 - Map”, http://golang.site/go/article/14-Go-컬렉션---Map
  3. 뽕뽑기님 블로그, “(Go) - Marshal, Unmarshal 함수”, https://codecollector.tistory.com/1513
  4. pyrasis.com, "가장 빨리 만나는 Go 언어 Unit 41. 출력 함수 사용하기”, https://pyrasis.com/book/GoForTheReallyImpatient/Unit41
반응형

이 글을 공유합시다

facebook twitter kakaoTalk kakaostory naver band