Menu
Coddy logo textTech

Go 치트시트

마지막 업데이트

Hello World 및 프로그램 구조

모든 Go 프로그램은 패키지 안에 있으며, 진입점은 package main의 func main입니다.

작업문법
패키지 선언package main
패키지 임포트import "fmt"
여러 패키지 임포트import (\n "fmt"\n "os"\n)
진입점func main() { ... }
한 줄 출력fmt.Println("Hello, World!")
서식 지정 출력fmt.Printf("%d items\n", n)
파일 실행go run main.go
바이너리 빌드go build

변수 및 타입

Go는 정적 타입이지만 :=로 타입을 추론할 수 있습니다.

작업문법
타입과 함께 선언var age int = 30
추론과 함께 선언var name = "Ada"
짧은 선언count := 0
한 번에 여러 개x, y := 1, 2
상수const Pi = 3.14
제로 값0, "", false, nil
기본 타입int, float64, string, bool, byte, rune
타입 변환f := float64(i)

제어 흐름

Go에는 반복 키워드가 for 하나뿐이며, 조건 주위에 괄호가 없습니다.

작업문법
if / elseif x > 0 { ... } else { ... }
초기화 문이 있는 ifif v, ok := m[k]; ok { ... }
for 반복문 (C 스타일)for i := 0; i < 10; i++ { ... }
while 스타일 반복문for x < 100 { ... }
무한 반복문for { ... }
슬라이스 range 순회for i, v := range items { ... }
switchswitch day { case 1: ...; default: ... }
표현식 없는 switchswitch { case x > 0: ... }
break / continuebreak, continue

함수

함수는 일급 값이며 여러 결과를 반환할 수 있습니다.

작업문법
기본 함수func add(a int, b int) int { return a + b }
공유 매개변수 타입func add(a, b int) int { ... }
여러 반환값func divmod(a, b int) (int, int) { return a / b, a % b }
명명된 반환값func split(sum int) (x, y int) { x = sum / 2; return }
가변 인자 함수func sum(nums ...int) int { ... }
익명 함수f := func() { ... }
클로저func counter() func() int { ... }
defer (반환 시 실행)defer file.Close()

슬라이스 및 배열

배열은 크기가 고정되어 있고, 슬라이스는 배열에 대한 동적 뷰입니다.

작업문법
고정 크기 배열var a [3]int
슬라이스 리터럴nums := []int{1, 2, 3}
슬라이스 만들기s := make([]int, 0, 10)
추가s = append(s, 4)
길이 / 용량len(s), cap(s)
슬라이스 자르기s[1:3]
복사copy(dst, src)
순회for i, v := range s { ... }

맵은 Go의 내장 해시 테이블입니다.

작업문법
맵 만들기m := make(map[string]int)
맵 리터럴m := map[string]int{"a": 1, "b": 2}
값 설정m["c"] = 3
값 가져오기v := m["a"]
존재 여부 확인v, ok := m["x"]
키 삭제delete(m, "a")
길이len(m)
순회for k, v := range m { ... }

구조체 및 메서드

구조체는 필드를 묶고, 메서드는 리시버를 통해 동작을 붙입니다.

작업문법
구조체 정의type Point struct { X, Y int }
인스턴스 생성p := Point{X: 1, Y: 2}
필드 접근p.X
구조체 포인터p := &Point{1, 2}
값 리시버 메서드func (p Point) Dist() float64 { ... }
포인터 리시버 메서드func (p *Point) Move(dx int) { p.X += dx }
임베디드 구조체type Circle struct { Point; R int }
구조체 태그Name string에 백틱으로 감싼 json:"name" 태그

인터페이스

인터페이스는 암묵적으로 충족됩니다 - 올바른 메서드를 가진 어떤 타입이든 자격이 됩니다.

작업문법
인터페이스 정의type Shape interface { Area() float64 }
구현 (암묵적)func (c Circle) Area() float64 { ... }
빈 인터페이스 (any)var x interface{} 또는 var x any
타입 단언s, ok := x.(string)
타입 스위치switch v := x.(type) { case int: ... }
Stringer 인터페이스func (p Point) String() string { ... }

고루틴 및 채널

고루틴은 경량 스레드이고, 채널은 그들 사이에서 값을 전달합니다.

작업문법
고루틴 시작go doWork()
채널 만들기ch := make(chan int)
버퍼 채널ch := make(chan int, 5)
채널로 보내기ch <- 42
채널에서 받기v := <-ch
채널 닫기close(ch)
채널 range 순회for v := range ch { ... }
채널에 대한 selectselect { case v := <-ch: ...; default: ... }
wait groupvar wg sync.WaitGroup; wg.Add(1); wg.Wait()
뮤텍스var mu sync.Mutex; mu.Lock(); mu.Unlock()

오류 처리

Go는 오류를 값으로 반환합니다 - 예외가 없습니다.

작업문법
오류 반환func read() (string, error) { return "", err }
오류 확인if err != nil { return err }
오류 생성errors.New("not found")
서식 지정 오류fmt.Errorf("bad id %d", id)
오류 래핑fmt.Errorf("load: %w", err)
언래핑 / 일치errors.Is(err, os.ErrNotExist)
타입으로 일치errors.As(err, &target)
panic / recoverdefer func() { recover() }()

가장 자주 쓰는 Go 문법을 한 페이지에 담았습니다. 이 Go 치트시트는 언어 핵심을 위한 빠른 참조 자료입니다 - 변수와 타입, 슬라이스와 맵, 구조체와 인터페이스, 그리고 Golang이 동시성에서 빛나게 해주는 고루틴과 채널을 다룹니다.

여기 나오는 모든 내용은 표준 Go이며 공식 툴체인으로 컴파일됩니다. 필요한 것을 복사하거나, Go 플레이그라운드에서 모든 코드를 바로 실행해 보세요 - 설치가 필요 없습니다.

Go 치트시트 자주 묻는 질문

이 Go 치트시트는 무료인가요?
네. 이 Go 치트시트는 완전히 무료이며 회원 가입이 필요 없습니다. 즐겨찾기에 추가해 두고 슬라이스 연산, 채널 패턴, 구조체 메서드를 찾아봐야 할 때마다 다시 방문하세요.
Go에서 :=와 var의 차이는 무엇인가요?
var x = 0은 변수를 선언하며 패키지 수준을 포함해 어디서나 동작합니다. x := 0은 짧은 변수 선언입니다: 선언과 대입을 함께 하고, 타입을 추론하며, 함수 안에서만 사용할 수 있습니다. 명시적 타입이나 패키지 수준 변수가 필요할 때는 var를, 간결한 지역 선언에는 :=를 사용하세요.
고루틴과 채널이란 무엇인가요?
고루틴은 Go 런타임이 관리하는 경량 스레드입니다 - go someFunc()라고 작성해 시작합니다. 채널은 고루틴이 안전하게 통신하게 해주는 타입이 있는 파이프입니다: 한 고루틴은 ch <- v로 보내고 다른 고루틴은 <-ch로 받습니다. 둘은 함께 Go의 핵심 동시성 모델을 이루며, "통신으로 메모리를 공유하라"는 말에 잘 담겨 있습니다.
Go를 온라인에서 연습할 수 있나요?
네. Go 플레이그라운드를 열어 이 치트시트의 어떤 코드든 브라우저에서 실행해 보세요 - Go 툴체인을 설치할 필요가 없습니다. 체계적으로 배우고 싶다면, Coddy의 무료 인터랙티브 Go 강좌가 변수와 슬라이스부터 고루틴과 채널까지 단계별로 안내합니다.
이 치트시트는 초보자에게 적합한가요?
네. 가장 흔한 주제(변수, 제어 흐름, 함수)부터 고급 주제(고루틴, 채널, 오류 처리)까지 순서대로 정리되어 있어, 첫날부터 상단 섹션을 사용하고 점차 나머지로 넓혀갈 수 있습니다.
Coddy programming languages illustration

Coddy로 Go 배우기

시작하기