kind: capsule status: active visibility: private license: CC-BY-SA-4.0 summary: Go 두 가지 일상 이디엄 — map key 존재 체크 (comma-ok: val, ok := m[k]) + 효율적 문자열 조합 (strings.Builder, Go 1.10+). tags: - go - golang - map - strings - capsule
Go Map and String Essentials Capsule
Summary#
Go 에서 map 존재 체크는 val, ok := m[k] 두 값 반환 이디엄. 문자열 대량 조합은 strings.Builder (Go 1.10+) 로 O(n) 달성 — + 연산자 반복은 O(n²).
Claim#
1. Map key 존재 체크#
val, ok := myMap["foo"]
if ok {
// 키 존재 — val 는 값
}
val= 키에 해당하는 값 또는 zero value (int → 0, string → "", struct → {}, pointer → nil)ok= bool, 키 존재 여부- 단일 값 반환 (
val := myMap["foo"]) 은 존재/0값 구분 불가
One-liner (흔한 패턴)#
if val, ok := myMap["foo"]; ok {
// val, ok 의 스코프는 if 블록 내부로 제한됨
doSomething(val)
}
Go if 문의 "initialization statement" 기능. 세미콜론으로 조건과 분리.
존재만 체크 (값 불필요)#
if _, ok := myMap["foo"]; ok { … }
2. 문자열 효율적 조합 — strings.Builder#
import "strings"
var b strings.Builder
for i := 0; i < 1000; i++ {
b.WriteString("x")
}
result := b.String()
- 내부적으로
[]byte버퍼 + grow 전략 - O(n) — 반복할수록 차이 극명
b.Grow(n)으로 최종 크기 사전 할당 시 더 빠름
❌ 비효율 (O(n²))#
s := ""
for i := 0; i < 1000; i++ {
s += "x" // 매번 새 문자열 할당 + 복사
}
Go 1.10 이전 (bytes.Buffer)#
import "bytes"
var buffer bytes.Buffer
buffer.WriteString("hello")
buffer.WriteString(" world")
result := buffer.String()
strings.Builder 는 bytes.Buffer 와 유사하지만 문자열 전용으로 더 가벼움 (중간 복사 없음).
3. 짧은 조합은 그냥 +#
hello := "Hello, " + name + "!"
- n < 10 정도면
+가 가독성·성능 모두 적절 strings.Builder는 수백~수천 회 루프에서 효과
4. 기타 대안#
fmt.Sprintf— 포맷팅 필요 시 (성능 < Builder)strings.Join(slices, sep)— 이미 슬라이스 있을 때 최적
Scope#
strings.Builder: Go 1.10+ (2018).- comma-ok map: Go 초기부터. channel recv
v, ok := <-ch에도 동일 이디엄 적용.
Caveats#
strings.Builder는 복사 금지 — pointer 나 in-place 만. 복사하면 panic.- Zero value 와 "키 없음" 이 구분 불가 할 때 반드시 comma-ok.
map은 concurrent write 안전하지 않음 — 여러 goroutine 접근이면sync.Map또는sync.Mutex.
Source#
- Stack Overflow Q: How to check if a map contains a key in Go?
- Accepted Answer: https://stackoverflow.com/a/2050629 — by marketer
- License: CC BY-SA 4.0 (Stack Exchange user contributions)
- 조회일: 2026-04-19
Supplementary: - marketer — Efficient string concatenation in Go (동일 저자)
Sagwan Revalidation 2026-04-18T21:50:03Z#
- verdict:
ok - note: Go 1.10+ strings.Builder 권장, comma-ok 이디엄, O(n²) vs O(n) 설명 모두 현행 Go practice(최신 Go 1.22+)에서도 유효하며 오류 없음.