Go Tooling — build·test·fmt·mod·vet을 언제 쓰나
Go 표준 배포판이 제공하는 go command와 gofmt를 build/test, formatting, module dependency, static analysis라는 역할로 나눠 정리한다. go build의 package/command 동작, go fmt와 gofmt 차이, go mod, go vet·staticcheck, cgo 배포 경계를 정확히 구분한다.
Go 표준 배포판이 제공하는 go command와 gofmt를 build/test, formatting, module dependency, static analysis라는 역할로 나눠 정리한다. go build의 package/command 동작, go fmt와 gofmt 차이, go mod, go vet·staticcheck, cgo 배포 경계를 정확히 구분한다.
문법을 넘어 실제로 뭔가 만들고 Go답게 쓰는 단계. net/http만으로 서버를 세우고, encoding/json과 struct tag로 매핑하고, 'accept interfaces, return structs' 같은 Effective Go 관용구를 익히고, 테이블 주도 테스트로 go test를 쓴다. struct tag를 먹게 하는 reflection의 정체까지.
goroutine을 단순한 경량 스레드로 등치하지 않고 Go 런타임이 스케줄링하는 경량 실행 단위로 설명한다. channel·select·context·WaitGroup·Mutex·race detector의 역할을 구분한다.
Go의 일반 실패는 error 값으로 흐르고, defer는 함수 종료 시 실행할 정리를 예약하며, panic/recover는 정상 error 흐름과 다른 stack-unwinding 경계를 만든다. RAII·예외와의 유사점은 발판으로만 쓰고 의미론을 구분한다.
Go의 핵심 자료구조. slice가 std::vector가 아니라 '배열의 뷰'라는 것(len/cap·append 공유 함정), map의 지정되지 않은 순회 순서와 comma-ok·nil map 함정, 그리고 string이 임의 바이트열이라 byte·rune·사용자 인식 문자를 구분해야 하는 이유까지 정리한다.
Go의 struct·method·interface를 클래스 상속의 대체물로 단순화하지 않고, 암묵적 interface 만족·embedding·method set을 각각 다른 규칙으로 정리한다.
C를 알면 Go 문법 절반은 익숙하다. 이 글은 암기가 아니라 C++과 다른 Go의 뼈대 규칙을 잡는다 — := 짧은 선언과 다중 반환값, for가 유일한 반복문, 명시적 변환만 허용, zero value와 nil, 그리고 헤더 없이 패키지 단위로 묶이고 대문자로 export를 결정하는 구조와 go mod까지. 안 쓴 변수·import가 컴파일 에러라는 Go의 태도도 함께.
C++ 배경에서 Go로 넘어올 때 패키지·타입, interface·composition, slice·map, error·defer, goroutine·channel·context, 표준 라이브러리·관용구를 핵심 줄기로 잡고 Tooling과 generics를 별도 축으로 배치한 학습 지도.
ifconfig·netstat·route는 이제 레거시입니다. iproute2(ip·ss)로 인터페이스·라우팅·소켓을 진단하고, /etc/hosts·resolv.conf와 dig·getent로 DNS를 파고드는 표준 흐름.
tmux 훅 안에서 #{window_id}는 이벤트 윈도우가 아니고, pane-exited는 kill-pane에 안 뜬다. 계측으로 두 함정을 잡은 기록.