요즘 Go 언어를 정말 재밌게 공부 중입니다.
다만 Go 언어만의 특색 때문에 제가 굉장히 혼란스러운 경우가 많았는데요,
이와 관련해서 책을 읽거나 인터넷 구글링을 통해서 많이 해소하는데,
이때 도움이 됐던 링크나, 글들을 모아봤습니다.
앞으로도 헷갈리는 점이 생기면 이 게시물에 추가로 내용이 작성될 예정입니다.
https://dave.cheney.net/2017/04/29/there-is-no-pass-by-reference-in-go
Go 공식 문서에도 Reference Type 이라는 표현을 굉장히 많이 사용합니다...만!
실제로는 C++ 에서 말하는 참조형 타입 같은 건 없습니다!
https://dave.cheney.net/2018/07/12/slices-from-the-ground-up
Slice 타입이 내부적으로는 구조체라는 점도 눈여겨 봅시다.
이 링크를 통해서 중점적으로 봐야될 부분은 Slice
가 자체적으로 구조체인 것과 달리
Map
은 생성된 Go 내부적으로 생성한 구조체를 가르키는 포인터라는 점입니다.
(아래 그림 참고)
why-slice-values-can-sometimes-go-stale-but-never-map-values#55521138
가끔 go 언어로 작성된 코드를 보면 이상하게 function 파라티터로
slice 포인터
타입은 자주 주는데, Map
이나 channel
타입은 그런 경우가 없습니다.
왜 그럴까요?
https://research.swtch.com/interfaces
function - Value receiver vs. pointer receiver - Stack Overflow