Go · 개념 정리
Go append가 원본을 바꾸는 이유슬라이스 · map · string 내부 구조
Go에서 자주 만나는 버그는 들고 있다고 생각한 것과 실제로 들고 있는 것이 다를 때 생긴다. 슬라이스는 데이터가 아니라 창이고, map은 주소를 보장하지 않고, string은 문자 배열이 아니다. 세 자료구조의 레이아웃을 하나씩 열어 본다.
태그
Go에서 자주 만나는 버그는 들고 있다고 생각한 것과 실제로 들고 있는 것이 다를 때 생긴다. 슬라이스는 데이터가 아니라 창이고, map은 주소를 보장하지 않고, string은 문자 배열이 아니다. 세 자료구조의 레이아웃을 하나씩 열어 본다.
nil 포인터를 반환했는데 err != nil이 참이 되는 이유는 인터페이스 값이 타입과 데이터 두 칸으로 되어 있기 때문이다. 두 칸 구조에서 메서드셋, 인터페이스를 둘 위치, 동적 디스패치 비용까지 따라간다.
컴파일 언어와 정적 타입이 런타임에 어떤 이득으로 바뀌는지 Go를 기준으로 따라갔다. 메모리 레이아웃, 컴파일러 최적화, escape analysis, GC와 스케줄러까지 도구로 직접 확인한다.