_, ok 가 어떤 의미인지 알려면 `맵` 이라는 것을 이해해야 한다.
맵은
보통 배열이나 슬라이스로 할 수 없는 일이 있을 때 사용하는데...
맵
배열과 슬라이스의 한계는 인덱스로 양의 정수만 사용할 수 있다는 것이다.
맵은 값들끼리 서로 비교가 가능한 데이터 타입들을 키로 활용할 수 있는 데이터 구조라고 생각하면 된다.
맵을 사용할 때 지켜야 할 경험적인 규칙으로는..
🔹양의 정수가 아닌 인덱스가 필요하거나 양의 정수여도 연속되지 않고 범위가 넓은 인덱스를 사용할때 사용해야한다.
가 있고
맵은 또한 다음과 같은 특징이 있다.
- 주어진 키로 검색과 데이터 접근을 할 수 있고 어떤 경우에는 키의 조합으로도 데이터에 접근 가능함
- 맵의 모든 원소에 선형 시간으로 접근가능. 원소를 추가하고 검색하는 것도 빠르고 맵의 크기에 따라 원소 추가와 검색 성능이 좌우되지 않음
- 이해하기 쉬우므로 설계가 명확함
그럼 어떻게 만드느냐???!🤔
make()나 맵 리터럴을 사용해 새로운 맵 변수를 생성할 수 있다.
➡️ 문자열 키와 정수 값을 갖는 새로운 맵 만든다면 make(map[string]int) 만 적은 다음 원하는 변수에 대입하면 된다.
➡️ 반면 맵 리터럴을 이용한다면 아래 코드 처럼 작성해야한다.
m := map[string]int {
"key1": -3
"key2": 123
}
* 맵을 만들 때 데이터를 추가하고 싶다면 맵 리터럴을 사용하는 것이 좀 더 성능이 좋음
* 맵에서 원소들의 순서에는 어떠한 가정도 하면 안 됨. Go는 맵을 반복할 때 무작위 순서로 키를 반복하며, 언어에서 의도적으로 설계한 부분임
*맵의 길이 구하기
➡️ len() 함수
*맵의 특정 키와 값 쌍 지우기
➡️ delete(맵의 이름, 키의 이름) 함수
이제 여기 까지 왔다면 이 글의 제목을 이해할 수 있다.
v, ok := aMap[k]
이 구문이 반환하는 두 번째 값을 이용하면 aMap이라는 맵에 k라는 키가 존재하는지 확인할 수 있다.
⭐ok는 키가 맵에 존재하는지 여부를 나타내는 불리언 값
➡️ ok가 true라면 키k가 존재함.
➡️ true가 아니라면 v라는 맵의 값에 해당하는 데이터 타입의 제로 값이 된다.
맵에 존재하지 않는 키의 값을 얻으려고 한다면 Go는 제로 값만 반환할 것이다.
✔️_, ok := 요고는 go 채널이나 타입단언에서도 쓰인다.
✔️ ok 대신 다른 변수 써도 된다.
참고자료 : Go 마스터하기 (3/e)
'𝑖𝑡' 카테고리의 다른 글
go gin 미들웨어를 설계하면서 클로저(Closure) 패턴 이해하기 (1) | 2024.12.18 |
---|---|
go ORM ent 를 사용하여 maria db에 연결해보자 (0) | 2024.12.09 |
라우팅에 특화된 go프레임워크 - gollia/mux vs Gin framework (1) | 2024.12.05 |
Svelte 는 프레임워크가 없는 프레임워크다. (2) | 2024.11.28 |
go를 공부하며 gin frame work와 sveltestrap(svelte+bootstrap5) 로 웹 사이트 개발하기 (0) | 2024.11.27 |