[GO] Go map 내부 구조 뜯어보기 - Swiss Table, group, probing, growth
·
Language/Go
Go에서 map은 겉으로 보면 평범한 키-값 저장소다. 하지만 런타임 안쪽으로 들어가면 버전마다 꽤 다른 구현을 만난다. Java를 공부할 때 HashMap 내부가 linked list에서 red-black tree로 바뀌는 구조를 본 적이 있다. Go의 map도 같은 궁금증으로 들여다봤는데, 버전마다 설명이 달라서 직접 소스를 찾아보게 됐다. 이 글은 그 과정에서 정리한 내용이다. 예전 Go map 설명을 보면 hmap, bmap, tophash, overflow bucket, oldbuckets, evacuate 같은 단어가 자주 나온다. 그 설명이 틀린 것은 아니다. 다만 현재 Go 1.25 기준의 기본 구현을 설명하는 글로 읽으면 방향이 어긋난다. 현재 Go 런타임의 map은 Swiss Table..
[Go] Go에서 랜덤값 생성하기
·
Language/Go
목차Golang을 사용해서 숫자 맞추기 게임을 만들어보았다. 게임을 만들면서 rand 패키지를 사용하여 랜덤값을 생성하였는데, 이때 학습한 내용을 간단히 정리하고자 한다. rand.Intn(range)math 패키지의 rand.Intn(range) | 0 함수를 사용하면 랜덤 한 int를 생성할 수 있다. 이때 range의 범위는 half-open [0, range)이다.여기서 주의할 점은 rand 패키지를 통해 생성되는 랜던값은 완전한 랜덤이 아닌 유사 랜덤값이다.유사 랜덤이란 어떤 알고리즘에 의해서 마치 랜덤인 것처럼 보이는 값을 말한다. 이는 컴퓨터의 논리 회로와 산술 연산은 같은 입력에 대해서 같은 결괏값을 만들어내기 때문이다. 그렇기 때문에 단순히 rand.Intn(range) 함수만 사용하면..