• SEARCH

    통합검색
  • GAMEZONE
    • 커뮤니티
      • 공지사항
      • 유저게시판
        • 등업게시판
        • 출석체크
        • 정회원 무료자료실
      • 스크린샷
      • 인증자료실
    • 리니지
      • 게임공략 & 팁
      • 홍보게시판
      • 유틸자료실
      • 소스자료실
      • 자유게시판
      • 노하우 게시판
    • 메이플스토리
      • 게임공략 & 팁
      • 홍보게시판
      • 유틸자료실
      • 소스자료실
      • 자유게시판
      • 노하우 게시판
    • 바람의나라
      • 자유게시판
      • 홍보게시판
      • 자료게시판
        • 유틸자료실
        • 소스자료실
        • 클라이언트
        • 팩 자료실
      • 연구게시판
        • 개발내역
        • 질문과답변
        • 기타
      • 강의게시판
        • DR
        • CR
        • 구버전
        • 클라이언트 개조
        • 노하우 게시판
        • 게임공략 & 팁
    • 다크에덴
      • 게임공략 & 팁
      • 홍보게시판
      • 유틸자료실
      • 소스자료실
      • 자유게시판
      • 노하우 게시판
    • 믹스마스터
      • 게임공략 & 팁
      • 홍보게시판
      • 유틸자료실
      • 소스자료실
      • 자유게시판
      • 노하우 게시판
    • 라그나로크
      • 게임공략 & 팁
      • 홍보게시판
      • 유틸자료실
      • 소스자료실
      • 자유게시판
      • 노하우 게시판
    • 기타게임
      • 게임공략 & 팁
      • 홍보게시판
      • 유틸자료실
      • 소스자료실
      • 자유게시판
      • 노하우 게시판
    • 게임강의
    • 비베&포토샵
      • 자유게시판
      • 자료실
        • 일반자료실
        • 포인트 자료실
      • 노하우게시판
      • 포토샵게시판
    • 모바일
      • 게임공략
      • 포인트 자료실
      • 유틸자료실
      • 자유게시판
  • 기타게임 소스자료실
    • 기타게임 소스자료실 기타 ()
    • [Go 공식문서 한국어 정리] ⓪12. Go에서 JSON 다루기

      • 오뉴노노
      • 2026.05.30 - 01:19 0

    [Go 공식문서 한국어 정리] ⓪12. Go에서 JSON 다루기

    원문 제목: JSON and Go
    작성자: Andrew Gerrand

    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    📌 1. 서론 — 이 문서가 다루는 내용
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

    JSON(JavaScript Object Notation)은 간단한 데이터 교환 형식입니다.
    Go의 encoding/json 패키지를 사용하면 JSON 데이터를 쉽게 읽고 쓸 수 있습니다.
    이 문서는 Go에서 JSON을 생성하고 소비하는 방법을 상세히 다룹니다.

    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    📌 2. 핵심 개념
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

    ① Marshal — Go 구조체를 JSON으로 인코딩
    json.Marshal 함수는 Go 데이터 구조를 JSON 형식의 []byte로 변환합니다.
    구조체의 exported 필드(대문자 시작)만 인코딩됩니다.

    ② Unmarshal — JSON을 Go 구조체로 디코딩
    json.Unmarshal 함수는 JSON 데이터를 Go 값으로 변환합니다.
    JSON 키와 구조체 필드를 태그, 이름, 대소문자 구분 없이 매칭합니다.

    ③ interface{}를 활용한 동적 JSON 처리
    미리 구조를 모르는 JSON 데이터는 interface{}로 디코딩할 수 있습니다.
    기본적으로 map[string]interface{}와 []interface{}를 사용합니다.
    JSON boolean → bool, number → float64, string → string, null → nil

    ④ Decoder/Encoder — 스트리밍 처리
    json.NewDecoder와 json.NewEncoder는 io.Reader와 io.Writer를 감싸서
    JSON 스트림을 읽고 쓸 수 있게 합니다.
    HTTP 연결이나 WebSocket, 파일 처리에 유용합니다.

    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    📌 3. 주요 내용 상세
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

    json.Marshal은 유효한 JSON으로 표현 가능한 데이터 구조만 인코딩합니다.
    JSON 객체의 키는 문자열이어야 하므로 map[string]T 형태만 인코딩 가능합니다.
    채널, 복소수, 함수 타입은 인코딩할 수 없으며, 순환 구조는 무한 루프를 유발합니다.
    포인터는 값으로 인코딩되며 nil이면 null이 됩니다.

    Unmarshal은 대상 타입에 있는 필드만 디코딩합니다.
    b := []byte(`{"Name":"Bob","Food":"Pickle"}`)
    var m Message
    json.Unmarshal(b, &m)
    → Name 필드만 채워지고 Food는 무시됩니다.

    구조체 태그를 사용하면 JSON 키 이름을 지정할 수 있습니다.
    type Message struct {
    Name string `json:"name"`
    Body string `json:"body"`
    }

    동적 JSON 처리 예시:
    var f interface{}
    json.Unmarshal(b, &f)
    f는 map[string]interface{}가 되며,
    값에 대해 타입 어설션(type assertion)과 타입 스위치(type switch)로 접근할 수 있습니다.

    참조 타입 처리:
    Unmarshal은 포인터, 슬라이스, 맵을 자동으로 할당합니다.
    type Foo struct { Bar *Bar }
    JSON에 Bar 필드가 있으면 새 Bar를 할당하고 채웁니다.
    없으면 nil 포인터로 남깁니다.

    이를 활용하면 여러 메시지 타입을 하나의 구조체로 처리할 수 있습니다.
    type IncomingMessage struct {
    Cmd *Command
    Msg *Message
    }
    JSON에 Cmd나 Msg 중 하나만 있어도,
    해당 필드가 nil인지 확인하여 메시지 타입을 구분할 수 있습니다.

    Decoder는 io.Reader에서 JSON을 읽고, Encoder는 io.Writer에 JSON을 씁니다.
    이를 통해 HTTP Response Body에서 직접 JSON을 스트리밍 파싱할 수 있습니다.

    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    📌 4. 실전 활용 / 예시
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

    REST API 서버 개발 시 JSON 요청/응답 처리에 json 패키지가 필수입니다.
    struct 태그를 활용하면 JSON 필드명과 Go 필드명을 분리하여 관리할 수 있습니다.
    Decoder를 사용하면 대용량 JSON 데이터를 메모리에 모두 로드하지 않고 처리할 수 있습니다.

    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
    📌 5. 정리
    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

    Go의 encoding/json 패키지는 Marshal/Unmarshal 두 함수로 대부분의 JSON 작업을 처리합니다.
    구조체 태그로 필드 매핑을 제어하고, interface{}로 동적 JSON을 안전하게 다룰 수 있습니다.
    Decoder/Encoder는 대용량 데이터나 네트워크 스트림 처리에 최적화되어 있습니다.

    📎 출처 링크
    https://go.dev/blog/json

    #Go #Golang #JSON #encoding #공식문서

    이 게시물을..
    N
    0
    0
    • [Go 공식문서 한국어 정리] ⑤4. Go 명령어 도구오뉴노노
    • 0
      오뉴노노

    오뉴노노 님의 최근 글

    [Rust 공식문서 한국어 정리] ⑭. Rustlings 11 2026 05.30 [Rust 공식문서 한국어 정리] ⑬. The Unstable Book 11 2026 05.30 [Rust 공식문서 한국어 정리] ⑫. Rust Cookbook 9 2026 05.30 [Rust 공식문서 한국어 정리] ⑪. The Little Book of Rust Macros 4 2026 05.30 [Rust 공식문서 한국어 정리] ⑩. Rust Design Patterns 12 2026 05.30

    오뉴노노 님의 최근 댓글

    ㅋㅋㅋㅋㅋ 2019 01.14 잘 읽었습니다 2018 12.30 포인트가 없어서 아직 시작을 못하고있는데요! 글은 잘 읽었습니다! 포인트 쌓고 도전할거에요 2018 12.30
    글쓴이의 서명작성글 감추기 
    댓글 쓰기 에디터 사용하기 닫기
    • view_headline 목록
    • 14px
    • [Go 공식문서 한국어 정리] ⑤4. Go 명령어 도구
    • 목록
      view_headline
    × CLOSE
    전체 던파 5 뮤 18 천상비 프로젝트신루 5 아이온 18 어둠의전설 28 리니지2 7 크로노스 5 칼온라인 3 기타 306
    기본 (305) 제목 날짜 수정 조회 댓글 추천 비추
    기타 정렬 검색
    • 포인트 획득 공지
      4
      2026.04.24 - 19:48 4639 4
    • 링크 업로드 관련 공지
      8
      2026.03.25 - 21:56 4496 8
    • 인증메일 공지
      2
      2026.03.15 - 16:42 4390 2
    • 파일링크 및 인증메일 발송 관련 문의 안내
      8
      2026.03.14 - 22:03 4984 8
    • 포인트 게시판 안내
      2026.02.28 - 19:14 5771
    • 게임존 사이트 변경 사항 안내
      9
      2026.02.26 - 01:07 7589 9
    • 소스자료는 직접 올려주세요
      2017.06.06 - 16:16 849
    305
    기타
    피파온라인 3 클라이언트
    lyw01234 2026.05.30 - 23:17 40
    304
    기타
    [Rust 공식문서 한국어 정리] ⑭. Rustlings
    오뉴노노 2026.05.30 - 08:38 11
    303
    기타
    [Rust 공식문서 한국어 정리] ⑬. The Unstable Book
    오뉴노노 2026.05.30 - 08:38 11
    302
    기타
    [Rust 공식문서 한국어 정리] ⑫. Rust Cookbook
    오뉴노노 2026.05.30 - 08:37 9
    301
    기타
    [Rust 공식문서 한국어 정리] ⑪. The Little Book of Rust Macros
    오뉴노노 2026.05.30 - 08:36 4
    300
    기타
    [Rust 공식문서 한국어 정리] ⑩. Rust Design Patterns
    오뉴노노 2026.05.30 - 08:36 12
    299
    기타
    [Rust 공식문서 한국어 정리] ⑨. Rust API Guidelines
    오뉴노노 2026.05.30 - 08:35 12
    298
    기타
    [Rust 공식문서 한국어 정리] ⑧. The Rust Performance Book
    오뉴노노 2026.05.30 - 08:34 7
    297
    기타
    [Rust 공식문서 한국어 정리] ⑦. Asynchronous Programming in Rust
    오뉴노노 2026.05.30 - 08:34 6
    296
    기타
    [Rust 공식문서 한국어 정리] ⑥. The Rust Edition Guide
    오뉴노노 2026.05.30 - 08:33 9
    295
    기타
    [Rust 공식문서 한국어 정리] ⑤. The Cargo Book
    오뉴노노 2026.05.30 - 08:32 1
    294
    기타
    [Rust 공식문서 한국어 정리] ④. The Rustonomicon
    오뉴노노 2026.05.30 - 08:32
    293
    기타
    [Rust 공식문서 한국어 정리] ③. The Rust Reference
    오뉴노노 2026.05.30 - 08:31
    292
    기타
    [Rust 공식문서 한국어 정리] ②. Rust By Example
    오뉴노노 2026.05.30 - 08:31
    291
    기타
    [Rust 공식문서 한국어 정리] ①. The Rust Programming Language (The Book)
    오뉴노노 2026.05.30 - 08:30 2
    290
    기타
    [Go 공식문서 한국어 정리] ⑤7. Codewalk: Share Memory By Communicating
    오뉴노노 2026.05.30 - 03:29 7
    289
    기타
    [Go 공식문서 한국어 정리] ⑤6. Codewalk: 마르코프 체인 텍스트 생성
    오뉴노노 2026.05.30 - 03:26 2
    288
    기타
    [Go 공식문서 한국어 정리] ⑤5. Codewalk: Go의 일급 함수
    오뉴노노 2026.05.30 - 03:25 1
    287
    기타
    [Go 공식문서 한국어 정리] ⑤4. Go 명령어 도구
    오뉴노노 2026.05.30 - 03:24 2
    286
    기타
    [Go 공식문서 한국어 정리] ⑤3. 통합 테스트 커버리지 프로파일링
    오뉴노노 2026.05.30 - 03:23 1
    • 1 2 3 4 5 6 7 8 9 10 .. 16
    • / 16 GO
  • GAMEZONE
 GAMEZONE all rights reserved.
by OrangeDay