728x90 반응형 golang (go)9 golang sync.Map range (Iteration) golang 에서는 반복문을 이용하여 array, slice, map 을 손쉽게 iteration을 수행할 수 있도록 for range을 제공하고 있다.for fruitsName, price := range fruitsPrice { fmt.Println("과일 이름:", fruitsName, "-> 가격", price)} 하지만 Thread Safety 한 sync.Map 은 for range를 이용하여 Iteration을 수행할 수 없고, sync.Map 에 구현되어있는 Range를 구현하여 Iteration을 수행할 수 있다.func (m *Map) Range(f func(key, value any) bool) sync.Map 의 Range에서 제공하는 key, value 은 모두 any 타입 입니.. 2024. 10. 11. golang slice elements copy (copy(), append(), for ... range) golang에서 slice는 특정 배열의 위치를 가르키는 pointer를 가지는 reference 타입의 구조체이다. 그렇기 때문에 대입 연산자 ('=') 를 사용하여 Copy를 하면 값(Elements) 가 Copy가 되는 것이 아니라 reference type의 구조체가 Copy되는 것이다. 즉, 아래 그림과 같이 SliceA를 대입 연산자를 통해 SliceB에 복사한 경우 같은 배열을 가르키는 pointer를 가지는 reference type의 구조체가 만들어져, SliceA에서 배열의 값을 변경하는 경우 SliceB 도 같은 배열을 가르키고 있기 때문에 SliceB 가르키는 값 역시 변경되는 것이다. 이 경우 의도하였다면 큰 문제가 되지 않겠지만, 대부분 이런 경우는 논리적 오류를 일으킬 가.. 2024. 1. 14. golang map Go Map Introduction Golang 에서 map은 Hash table을 기반으로 구현되어있다. 이에 빠른 검색, 추가, 삭제를 특징으로 한다. Hash Table 기본적으로 Hash Collision이 없다는 전재하에 Olog1의 매우 빠른 검색 속도를 제공한다. Go에서 구현한 Map에 대한 설명, 그리고 Hash Table에 대한 상세한 설명은 아래 블로그를 추천하니 상세히 읽어보면 많은 도움이 될 것이다. Go Map Hash Table 구현 설명 - https://blog.frec.kr/golang/go-hashtable-0/ Hash Table 설명 - https://mangkyu.tistory.com/102 Go에서 제공하는 map은 Hash Table을 구현한 타입으로 소개하고 .. 2023. 12. 24. golang - const와 iota로 enum(열거)형 구현하기 우리는 다양한 서적, 베스트 케이스에서 특정 상황을 비교할 때 boolean, integer 과 같은 자료형다는 enum(열거)형을 사용하라는 것을 많이 들었을 거다. 그런데 golang에서는 enum 자료형이 존재하지 않는다. 그럼 어떻게 해야할까? 일반적으로 golang 에서는 enum을 구현하기 위해 아래와 같이 자료형을 정의하고 값을 상수(const)로 정의해서 사용한다. 예를 들어 우선 Status라는 상태를 나타내는 int 타입의 자료형을 정의한다. 그리고 Status에 해당하는 값들(WAITING, RUNNING, COMPLETE, FAILED)을 상수로 정의한다. type Status int const ( WAITING Status = iota//0 RUNNING Status = iota/.. 2023. 11. 18. golang byte slice (array) compare golang 에서는 byte로 이루어진 slice, array를 비교할 수 있는 다양한 메서드들을 지원한다. 또한 별도로 구현해서 사용하는 방법이 있다. 단, "==" 비교 연산자를 이용해서 []byte 배열(array or slice) 값들을 비교할 수는 없다. 아래와 같이 '==' 연산자를 사용한 경우 "잘못된 연산자(invalid operation)"를 사용했다는 compile error를 만나게 된다. Comparing byte slices using '==' comparator data1 := []byte("abcdefg1234567890!@#$%^&*()안녕하세요GHJKLZXCVB") data2 := []byte("abcdefg1234567890!@#$%^&*()안녕하세요GHJKLZXCVB").. 2023. 2. 7. golang type conversion [string(val)], type assertion [val.(string)] golang은 두가지 타입의 형 변환 방법이 있다. 하나는 변수의 타입을 변환해주기 위한, 즉 형 변환을 위한 type conversion 과 임의의 값을 가지는 interface를 다시 임의의 타입으로 변환하기 위한 type assertion (concrete) 이 존재한다. 두가지 방식의 사용법을 간단히 비교해보면 아래와 같다. // type conversion string(val) int64(n) float64(b) //type assertion val.(string) n.(int64) b.(float64) type conversion 은 우리가 흔히 알고 있는 형 변환(type casting) 연산자와 동일하다. 명시적으로 변수의 타입을 변경하는 것이다. 즉, type conversion은 일반적.. 2023. 2. 3. golang slice or array element(item) remove (delete) golang에의 List 타입으로는 가변 길이를 지원하는 slice가 존재한다. java의 경우 list 에서 index remove(), object remove()를 제공하지만 golang의 slice에서는 애석하게도 remove()를 직접 구현해주어야 한다. 가장 간단한 방법은 append()를 이용하는 방법이 있다. 아래와 같이 지우고자하는 index에 다음 index 부터의 값들을 append 해버리는 개념이다. ex01) slice element delete example using append() slice := []int{1, 2, 3, 4, 5, 6, 7} fmt.Println(slice)//for debug slice = append(slice[0:], slice[1:]...} fmt... 2023. 1. 16. golang random UUID golang 기본 함수에서는 UUID 관련 패키지를 제공하지 않습니다. 하지만 다행이도 google에서 golang용 uuid 패키지(https://github.com/google/uuid)를 github를 통해 제공하고 있네요. 이쯤이면 golang 기본 함수로 제공하면 되지 않을까? 하고 생각하지만... 뭐.. 제공해주는게 어디인가 싶습니다. 기본 사용법은 우선 아래와 같이 go get 명령어를 통해 패키지를 설치하고 github.com/google/uuid 패키지를 import 하여 사용하면 됩니다. 해당 package에 대한 상세 설명은 godoc(https://pkg.go.dev/github.com/google/uuid)을 참고하세요. uuid package install go get githu.. 2022. 12. 4. golang download & install (MAC) MAC 에서 golang(go)를 설치하는 방법은 Go 공식 홈페이지 (http://go.dev)에서 설치 파일을 다운로드 받아 설치하는 방법과 brew를 통해 설치하는 방법이 있다. 개인적으로 brew 이용 시 새로운 버전이 바로바로 업데이트 되지 않는 것 같아 파일을 다운로드 받아 설치하는 방법을 주로 사용한다. 1. Go 공식 홈페이지(https://go.dev/) 접속 golang 공식 홈페이지에 접속하면 아래와 같이 화면 중앙에 Download를 클릭하여 golang 설치파일 다운로드 페이지 (https://go.dev/dl/)로 이동한다. 2. golang (go) 설치 파일 선택 및 다운로드 (golang install file download) golang (go) 설치 파일을 다운로드하기.. 2022. 10. 10. 이전 1 다음 728x90 반응형