• SEARCH

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

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

    https://go.dev/doc/effective_go

     

    [Go 공식문서 한국어 정리] ⑯27. 효율적인 Go 프로그래밍

     

    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

     

    1. 서론

    이 문서는 명확하고 관향적인(idiomatic) Go 코드를 작성하는 데 필요한 팁을 제공합니다. Go는 다른 언어에서 아이디어를 차용하지만, 고유의 특성으로 인해 C++이나 Java를 그대로 번역하는 것은 만족스럽지 않은 결과를 내빼니다. Go의 관점에서 문제를 생각해야 효율적인 코드를 쓸 수 있습니다.

     

    2. 핵심 개념

    • Go의 핵심은 단순성(simplicity), 신뢰성(reliability), 효율성(efficiency)입니다.
    • 관향적인(idiomatic) Go 코드를 쓴다는 것은 다른 Go 프로그래머들이 쉽게 이해할 수 있도록 합니다.
    • 표준 라이브러리의 소스코드는 특수한 경우가 아니면 직접 사용하지 않는 것이 라이브러리 사용법의 좋은 예시가 됩니다.

     

    3. 주요 내용 상세

     

    3.1 포맷팅(gofmt)

    • gofmt을 사용하여 코드의 일관성을 유지합니다. 탭을 사용한 들여쓰기를 권장합니다.
    • Go에는 줄 길이 제한이 없습니다. 네로 가득한 카드를 원하지 않습니다.
    • if, for, switch등의 제어 구조는 궈호가 필요없습니다.

     

    3.2 이름집징

    • 패키지명은 소문자, 한 단어로, 언더스코어를 사용하지 않습니다.
    • 가시적인 이름은 메서드 이름 + er 접미사를 사용합니다(Reader, Writer, Formatter).
    • 대문자로 시작하는 이름은 패키지 밖에서 보일 수 있습니다(exported).
    • 다음 단어를 대문자로 하여 MixedCaps을 사용합니다(myVariable, MyType).
    • Getter는 Get을 접두어로 붙이지 않습니다. 필드 owner의 경우 메서드는 Owner()를 사용합니다.

     

    3.3 제어 구조

    • if: 필수 궈호를 사용하여 순수한 if을 여러 줄로 작성하는 것이 좋은 스타읽입니다.
    • if err := file.Chmod(0664); err != nil { ... }: if문에서 지역변수를 초기화할 수 있습니다.
    • for: C의 for과 while을 통합한 형태. for init; condition; post {}, for condition {}, for {}(무한루프).
    • range: 배열, 슬라이스, 문자열, 매프, 채널을 순회할 때 사용. for key, value := range m {}
    • switch: 표현식이 상수일 필요없고 자동으로 fallthrough를 하지 않습니다.
    • type switch: 인터페이스의 동적 타입을 감지할 때 사용. switch t := t.(type) { case int: ... }

     

    3.4 함수

    • 다중 반환값: Go의 특징적인 기능. func Write(b []byte) (n int, err error)
    • 명명된 결과 매개변수: 반환값에 이름을 붙이면 자동으로 영으로 초기화되고 return만으로 반환할 수 있습니다.
    • defer: 함수가 반환하기 전에 특정 함수를 호출하도록 예약. 자원 해제, 무역해제에 사용. LIFO 순서로 실행됩니다.

     

    3.5 데이터 할당

    • new(T): 제로 화된 메모리를 할당하고 *T를 반환. 제로값이 유용한 타입을 설계하면 new로 추가 초기화없이 사용할 수 있습니다.
    • make(T, args): 슬라이스, 매프, 채널만 생성. 초기화된 값을 반환합니다(T, 아니다 *T).
    • 배열: 값이며 할당시 사본이 배열이 복사됩니다. 크기가 타입의 일부입니다([10]int와 [20]int는 다른 타입).
    • 슬라이스: 배열을 감싼는 더 일반적인 인터페이스. 참조를 풀는 것이므로 할당시 사본을 공유합니다. append을 사용해 요소를 추가할 수 있습니다.
    • 매프: 키-값 쌍으로 데이터를 저장. 참조형이므로 함수내에서 변경시 외부에도 반영됩니다. 없는 키를 조회하면 해당 타입의 영으값을 반환. comma ok 관용을 사용해 존재 여부를 확인할 수 있습니다.

     

    3.6 출력(Print)

    • fmt패키지의 Printf, Print, Println을 사용합니다.
    • %v: 기본 포맷으로 모든 타입을 출력. %+v은 구조체 필드명을, %#v은 Go 문법으로 출력.
    • %T: 값의 타입을 출력.
    • String() string 메서드를 구현하면 사용자 정의 타입의 기본 출력을 제어할 수 있습니다. 재귀적인 String은 주의.

     

    3.7 초기화

    • 상수: 컴파일 시점에 생성되며 숫자, 문자, 문자열, 부울만 가능. iota를 사용해 열거형 상수를 만들 수 있습니다.
    • init(): 패키지가 초기화될 때 마지막으로 호출되는 함수. 파일당 여러 개의 init을 정의할 수 있습니다.

     

    3.8 메서드

    • 값 수신자(value receiver): 수신자가 복사되므로 원본을 수정할 수 없습니다.
    • 포인터 수신자(pointer receiver): 원본을 수정할 수 있습니다. 값에서도 자동으로 호출될 수 있습니다.
    • 포인터 메서드는 포인터에서만 호출할 수 있으며, 값 메서드는 포인터와 값 모두에서 호출할 수 있습니다.

     

    3.9 인터페이스

    • 인터페이스는 타입이 아니라 메서드의 집합입니다.
    • 약한 결합(Implicit interface): 정의와 별도로 구현을 선언하지 않아도 메서드만 구현하면 자동으로 인터페이스를 수행합니다.
    • 타입 단언(type assertion): x.(T)를 사용해 인터페이스의 동적 타입을 확인할 수 있습니다. x.(T)의 결과는 T타입의 값입니다.
    • 빈 인터페이스(interface{}): 모든 타입을 담을 수 있습니다.

     

    3.10 임베딩

    • 구조체에 인터페이스나 타입을 임베딩하면 포함된 메서드를 제공하는 것처럼 동작합니다.
    • 이를 사용하여 코드의 중복을 줄이고 구조를 더 유연하게 만들 수 있습니다.

     

    3.11 동시성(Concurrency)

    • goroutine: 가벼운 스레드로 함수를 동시에 실행. go func() { ... }()
    • channel: goroutine간의 통신을 위한 파이프라인. ch := make(chan int)
    • select: 여러 채널의 얰션을 기다리는 제어구조.
    • 채널은 소유권을 전달하여 동시성을 관리합니다. 정보를 하나의 goroutine가 소유하고 다른 goroutine에겐 도둑을 주는 패턴이 자주 사용됩니다.

     

    3.12 에러 처리

    • Go에서 에러는 반드시 값으로 반환되며, 다중 반환값의 두 번째 값으로 자주 사용됩니다.
    • 예외적인 상황은 panic을 사용하며, recover를 통해 복구할 수 있습니다.
    • 다정 오류를 하나의 에러로 통합하고 사용자에겐 설명하는 것이 좋은 스타읽입니다.

     

    4. 실전 활용

    • 표준 라이브러리의 소스코드를 읽으면서 관향을 배우십시오.
    • gofmt을 사용해 코드의 포맷을 일관적으로 유지하십시오.
    • 오류 처리시 다중 반환값과 comma ok 관용을 적응합니다.
    • 포인터 vs 값 수신자의 차이를 이해하고 적절히 선택하십시오.
    • 동시성이 필요한 경우 goroutine과 channel을 활용합니다.

     

    5. 정리

    • 효율적인 Go 코드를 쓴다는 것은 Go의 처험과 관향을 이해하는 것에 극해있습니다.
    • gofmt, 명명균, 암물에 의한 가시성, 간결한 제어 구조, 다중 반환값, defer, 약한 결합 인터페이스, 동시성을 활용하십시오.
    • 표준 라이브러리의 예시를 참고하고, go vet와 테스트를 작성하여 코드 품질을 높이십시오.

     

    #Go #Golang #EffectiveGo #관향 #Idiomatic #공식문서

    이 게시물을..
    N
    0
    0
    • [Go 공식문서 한국어 정리] ⑯28. Go 자주 물어보는 질문(FAQ)오뉴노노
    • [Go 공식문서 한국어 정리] ⑯26. Go 어셍리이터 빠른 가이드오뉴노노
    • 0
      오뉴노노

    오뉴노노 님의 최근 글

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

    오뉴노노 님의 최근 댓글

    ㅋㅋㅋㅋㅋ 2019 01.14 잘 읽었습니다 2018 12.30 포인트가 없어서 아직 시작을 못하고있는데요! 글은 잘 읽었습니다! 포인트 쌓고 도전할거에요 2018 12.30
    글쓴이의 서명작성글 감추기 
    댓글 쓰기 에디터 사용하기 닫기
    • view_headline 목록
    • 14px
    • [Go 공식문서 한국어 정리] ⑯28. Go 자주 물어보는 질문(FAQ)
    • [Go 공식문서 한국어 정리] ⑯26. Go 어셍리이터 빠른 가이드
    • 목록
      view_headline
    × CLOSE
    전체 던파 5 뮤 18 천상비 프로젝트신루 5 아이온 18 어둠의전설 28 리니지2 7 크로노스 5 칼온라인 3 기타 306
    기본 (398) 제목 날짜 수정 조회 댓글 추천 비추
    분류 정렬 검색
    • 포인트 획득 공지
      4
      2026.04.24 - 19:48 4218 4
    • 링크 업로드 관련 공지
      7
      2026.03.25 - 21:56 4158 7
    • 인증메일 공지
      2
      2026.03.15 - 16:42 4070 2
    • 파일링크 및 인증메일 발송 관련 문의 안내
      8
      2026.03.14 - 22:03 4597 8
    • 포인트 게시판 안내
      2026.02.28 - 19:14 5394
    • 게임존 사이트 변경 사항 안내
      9
      2026.02.26 - 01:07 7139 9
    • 소스자료는 직접 올려주세요
      2017.06.06 - 16:16 828
    398
    기타
    피파온라인 3 클라이언트
    N
    lyw01234 7시간 전 14
    397
    기타
    [Rust 공식문서 한국어 정리] ⑭. Rustlings
    N
    오뉴노노 22시간 전 8
    396
    기타
    [Rust 공식문서 한국어 정리] ⑬. The Unstable Book
    N
    오뉴노노 22시간 전 6
    395
    기타
    [Rust 공식문서 한국어 정리] ⑫. Rust Cookbook
    N
    오뉴노노 22시간 전 6
    394
    기타
    [Rust 공식문서 한국어 정리] ⑪. The Little Book of Rust Macros
    N
    오뉴노노 22시간 전 3
    393
    기타
    [Rust 공식문서 한국어 정리] ⑩. Rust Design Patterns
    N
    오뉴노노 22시간 전 6
    392
    기타
    [Rust 공식문서 한국어 정리] ⑨. Rust API Guidelines
    N
    오뉴노노 22시간 전 7
    391
    기타
    [Rust 공식문서 한국어 정리] ⑧. The Rust Performance Book
    N
    오뉴노노 22시간 전 7
    390
    기타
    [Rust 공식문서 한국어 정리] ⑦. Asynchronous Programming in Rust
    N
    오뉴노노 22시간 전 4
    389
    기타
    [Rust 공식문서 한국어 정리] ⑥. The Rust Edition Guide
    N
    오뉴노노 22시간 전 7
    388
    기타
    [Rust 공식문서 한국어 정리] ⑤. The Cargo Book
    N
    오뉴노노 22시간 전 1
    387
    기타
    [Rust 공식문서 한국어 정리] ④. The Rustonomicon
    N
    오뉴노노 22시간 전
    386
    기타
    [Rust 공식문서 한국어 정리] ③. The Rust Reference
    N
    오뉴노노 22시간 전
    385
    기타
    [Rust 공식문서 한국어 정리] ②. Rust By Example
    N
    오뉴노노 22시간 전
    384
    기타
    [Rust 공식문서 한국어 정리] ①. The Rust Programming Language (The Book)
    N
    오뉴노노 22시간 전
    383
    기타
    [Go 공식문서 한국어 정리] ⑤7. Codewalk: Share Memory By Communicating
    오뉴노노 2026.05.30 - 03:29 5
    382
    기타
    [Go 공식문서 한국어 정리] ⑤6. Codewalk: 마르코프 체인 텍스트 생성
    오뉴노노 2026.05.30 - 03:26 1
    381
    기타
    [Go 공식문서 한국어 정리] ⑤5. Codewalk: Go의 일급 함수
    오뉴노노 2026.05.30 - 03:25 1
    380
    기타
    [Go 공식문서 한국어 정리] ⑤4. Go 명령어 도구
    오뉴노노 2026.05.30 - 03:24 2
    379
    기타
    [Go 공식문서 한국어 정리] ⑤3. 통합 테스트 커버리지 프로파일링
    오뉴노노 2026.05.30 - 03:23 1
    378
    기타
    [Go 공식문서 한국어 정리] ⑤2. Go 레이스 디텍터 소개
    오뉴노노 2026.05.30 - 03:22 5
    377
    기타
    [Go 공식문서 한국어 정리] ⑤1. Go 모듈 게시하기
    오뉴노노 2026.05.30 - 03:21 8
    376
    기타
    [Go 공식문서 한국어 정리] ①50. Go 프로그램 프로파일링
    오뉴노노 2026.05.30 - 03:20 1
    375
    기타
    [Go 공식문서 한국어 정리] ①4⑨. 모듈 호환성 유지하기
    오뉴노노 2026.05.30 - 03:19 1
    374
    기타
    [Go 공식문서 한국어 정리] ①4⑧. Go Modules로 마이그레이션
    오뉴노노 2026.05.30 - 03:18 1
    373
    기타
    [Go 공식문서 한국어 정리] ①4⑦. 리플렉션의 법칙
    오뉴노노 2026.05.30 - 03:18
    372
    기타
    [Go 공식문서 한국어 정리] ①4⑥. JSON-RPC: 인터페이스 이야기
    오뉴노노 2026.05.30 - 02:46
    371
    기타
    [Go 공식문서 한국어 정리] ①4⑤. JSON과 Go
    오뉴노노 2026.05.30 - 02:45
    370
    기타
    [Go 공식문서 한국어 정리] ①4④. Go 선언 구문
    오뉴노노 2026.05.30 - 02:44
    369
    기타
    [Go 공식문서 한국어 정리] ①4③. Gob 데이터 인코딩
    오뉴노노 2026.05.30 - 02:43
    368
    기타
    [Go 공식문서 한국어 정리] ①4②. Go 슬라이스: 사용법과 낮부 구조
    오뉴노노 2026.05.30 - 02:42 1
    367
    기타
    [Go 공식문서 한국어 정리] ①4①. Go image/draw 패키지
    오뉴노노 2026.05.30 - 02:40
    366
    기타
    [Go 공식문서 한국어 정리] ③3⑩. Go 모뒬 참조
    오뉴노노 2026.05.30 - 02:35
    365
    기타
    [Go 공식문서 한국어 정리] ②38. Go 프로그래밍 언어 사양
    오뉴노노 2026.05.30 - 02:33
    364
    기타
    [Go 공식문서 한국어 정리] ⓮37. Go 동시성 패턴: Context
    오뉴노노 2026.05.30 - 02:29 1
    363
    기타
    [Go 공식문서 한국어 정리] ⑯36. Go의 오류 처리
    오뉴노노 2026.05.30 - 02:24
    362
    기타
    [Go 공식문서 한국어 정리] ⑯35. Go 모듈 사용하기
    오뉴노노 2026.05.30 - 02:21
    361
    기타
    [Go 공식문서 한국어 정리] ⑯34. Go 퍼집(Fuzzing)
    오뉴노노 2026.05.30 - 02:17
    360
    기타
    [Go 공식문서 한국어 정리] ⑯33. Go 제네릭스 시작하기
    오뉴노노 2026.05.30 - 02:14
    359
    기타
    [Go 공식문서 한국어 정리] ⑯32. Go 프로젝트에 기여하기
    오뉴노노 2026.05.30 - 02:12
    358
    기타
    [Go 공식문서 한국어 정리] ⑯31. Go 메모리 모델
    오뉴노노 2026.05.30 - 02:09
    357
    기타
    [Go 공식문서 한국어 정리] ⑯30. Go 코드 작성법
    오뉴노노 2026.05.30 - 02:06
    356
    기타
    [Go 공식문서 한국어 정리] ⑯29. Go 다운로드 및 설치
    오뉴노노 2026.05.30 - 02:03
    355
    기타
    [Go 공식문서 한국어 정리] ⑯28. Go 자주 물어보는 질문(FAQ)
    오뉴노노 2026.05.30 - 02:01
    기타
    [Go 공식문서 한국어 정리] ⑯27. 효율적인 Go 프로그래밍
    오뉴노노 2026.05.30 - 01:58
    353
    기타
    [Go 공식문서 한국어 정리] ⑯26. Go 어셍리이터 빠른 가이드
    오뉴노노 2026.05.30 - 01:52
    352
    기타
    [Go 공식문서 한국어 정리] ⓪25. Go로 웹 애플리케이션 작성하기
    오뉴노노 2026.05.30 - 01:45
    351
    기타
    [Go 공식문서 한국어 정리] ⓪24. 데이터 레이스 디텍터 상세 가이드
    오뉴노노 2026.05.30 - 01:42
    350
    기타
    [Go 공식문서 한국어 정리] ⓪23. go 명령어 이해하기
    오뉴노노 2026.05.30 - 01:40 1
    349
    기타
    [Go 공식문서 한국어 정리] ⓪22. Go 공식 문서 가이드
    오뉴노노 2026.05.30 - 01:38
    • 1 2 3 4 5 6 7 .. 8
    • / 8 GO
  • GAMEZONE
 GAMEZONE all rights reserved.
by OrangeDay