Golang 11

Go언어에서의 Generic 이해하기

Generic(제네릭)이란?Go 1.18부터 도입된 제네릭(Generic) 기능은 하나의 함수나 타입이 다양한 타입을 처리할 수 있도록 해주는 기능입니다.쉽게 말해, 함수나 구조체를 만들 때 타입을 고정하지 않고 나중에 사용할 때 타입을 지정할 수 있도록 하는 기능입니다.이전까지는 interface{}를 활용한 방법이 있었지만, 타입 안정성(type safety)이 부족하고 형변환(casting)이 필요했습니다.제네릭은 이러한 문제를 해결하고, 재사용 가능한 코드를 작성하는 데 큰 도움이 됩니다. Generic이 필요한 이유Go에서 Generic이 없던 시절에서는 다음과 같은 일이 자주 발생하였습니다.func PrintInts(list []int) { for _, v := range list { fmt..

Go언어 2025.03.27

Go언어의 benchmark와 test

benchmark와 testGolang에서 benchmark와 test는 코드의 정확성과 성능을 보장하는 핵심 요소입니다. 특히, 대규모 시스템이나 고성능이 중요한 애플리케이션을 개발하는데 매우 중요한 기능입니다. 이번 문서에서는 benchmark와 test에 대한 사용법을 알아보겠습니다.benchmark란Golang에서 benchmark란 특정 코드, 함수, 알고리즘 또는 시스템의 성능을 측정하여 실행 속도, 처리량, 리소스 사용량(CPU, 메모리 등)을 분석하는 과정입니다. 이를 통해 코드의 최적화 가능성을 평가하고 여러 구현 방식 간의 성능 차이를 비교하며 병목 현상을 식별하여 효율적인 개선 방향을 찾을 수 있습니다. 특히 Golang에서는 go test -bench 명령어를 활용하여 특정 함수의 ..

Go언어 2025.03.19

[addlicense] golang 프로젝트에 라이센스 추가하기

오픈소스 프로젝트와 라이센스오픈소스 프로젝트를 살펴보면, 각 코드 파일에 라이센스가 명시되어 있는 것을 볼 수 있습니다. 이 라이센스는 프로젝트에 사용된 코드의 사용 범위와 조건을 정의하여, 코드를 법적으로 보호하는 중요한 역할을 합니다. 라이센스를 각 코드 파일에 일일이 추가하는 작업은 번거로울 수 있습니다. 이러한 불편을 해소하기 위해 Google에서는 addlicense 도구를 제공하고 있으며, 이 도구를 사용하면 코드에 라이센스를 효율적으로 추가할 수 있습니다. 본 문서에서는 addlicense를 사용하여 Go 언어의 코드 파일에 라이센스를 추가하는 방법을 설명하겠습니다. 비록 예시는 Go 언어로 진행하지만, addlicense는 다양한 프로그래밍 언어에 적용 가능합니다. 이번 문서에서는 설치 방..

Go언어 2024.04.29

golang version upgrade (ubuntu)

ubuntu 환경에서 golang version upgrade를 하는 방법에 대하여 간단하게 정리하였습니다. 0. 작업 준비 # apt update를 진행합니다. sudo apt-get update # wget이 설치되었는지 확인합니다. # 다음과 같은 결과가 나오면 wget이 설치된 것 입니다. # /usr/bin/wget which wget # wget이 없다면 설치하여 줍니다. sudo apt-get install wget 1. 기존 golang 제거 sudo rm -rf /usr/local/go 2. go 공식 사이트에서 새로운 go 버전 다운로드 아래 사이트로 접속하여 새로운 go 버전의 링크를 가져옵니다. https://go.dev/dl/ All releases - The Go Programm..

Go언어 2023.07.09

[vscode] golang debug

요즘 code editor를 vscode로 변경하면서 debug환경에 대한 설정을 진행하였습니다. 이 글의 목적은 간단하게 go언어 디버깅 환경을 구축하며, vscode의 debug 단축키 및 사용법에 대한 내용을 정리하였습니다.Extension 설치환경 구성은 매우 간단합니다. vscode extension에서 "go"라고 검색하여 해당 extension을 설치합니다.launch.json 구성vscode에서 디버깅 환경을 구성하기 위해 launch.json 파일을 생성해야 됩니다. "ctrl + shift + d" 단축키를 통해 "Run and debug" 창을 띄울 수 있습니다. 해당 창에서 "create a launch.json file"을 클릭하여 launch.json 파일을 생성합니다. 파일을 ..

ETC 2023.07.07

go work 사용해보기

go work를 사용하기 위해 반듯이 go1.18 이상의 go가 설치되어 있어야 합니다. go의 workspace는 회사에서 다른 개발자들과 협업을 하게 되면 모듈의 의존성에 대한 문제가 종종 발생하게 됩니다. 이럴 때 이러한 문제를 해결할 수 있는 것이 바로 go의 workspace입니다. 간단한 예시를 들자면 example이라는 모듈을 현재 회사에서 사용하고 있는데 example이라는 모듈에 기능을 추가하거나 기능을 변경할 경우 협업하고 있는 다른 개발자들에게 영향을 미치게 해서는 안 되는 경우가 있습니다. 이런 경우 "go work"를 통하여 다른 개발자들에게 영향을 미치지 않고 example 모듈을 수정하고 수정된 모듈을 이용하여 프로젝트 개발을 진행할 수 있습니다. 해당 글은 아래 링크 go d..

Go언어 2023.07.06

Ubuntu(Linux)에서 Go 재설치

Go언어 처음 설치라면 2번부터 진행하시면 됩니다. 1. Go 제거하기 # go언어 제거 하기 sudo apt-get purge golang* sudo rm -rf /usr/local/go sudo rm -rf $(echo $GOPATH) # ~/bashrc 또는 ~/.profile에서 go 관련된 항목 제거(기존에 설정한 파일에서 작업) source ~/.profile source ~/.bashrc # 제거 확인 go version 2. apt-get 업데이트 하기 sudo apt-get update sudo apt-get -y upgrade 3. wget 설치 확인 및 wget 설치 # wget 설치 확인 & wget 없을 경우 wget 설치 which wget sudo apt-get install ..

Go언어 2022.10.30

Go언어 interface reflect

reflect 사용 이유 reflect는 여러 가지의 사용방법이 있겠지만 저는 종종 협업을 하면서 상대방이 보낸 데이터의 타입 및 종류에 대하여 구분이 필요한 경우 사용하였습니다. reflect를 이용하여 타입 가져오기 인터페이스 형식으로 데이터를 받아 받은 데이터의 타입을 구분할 수 있습니다. package main import ( "fmt" "reflect" ) func ShowType(i interface{}) { fmt.Println(reflect.ValueOf(i).Type()) } func main() { num := 100 ShowType(num) job := "student" ShowType(job) } /* 출력결과 int string */ 코드설명 reflect.ValueOf().Typ..

Go언어 2021.08.15

Go언어 Cron

Cron이란 우리는 살면서 종종 정해진 시간에 정해진 일이 자동으로 수행되었으면 하는 일들이 많이 있습니다. Go언어에서는 이러한 일을 cron이 해결해 줍니다. 먼저 프로젝트 디렉토리에서 다음 명령어로 모듈을 가져옵니다. > go get github.com/robfig/cron package main import ( "fmt" "github.com/robfig/cron" "time" ) const ( CronSpec = "30 * * * * *" ) var ( Data int ) func PrintData() { t := time.Now().Format(time.ANSIC) fmt.Println(t, " : ", Data) Data++ } func main() { c := cron.New() c.Add..

Go언어 2021.06.15

Prometheus Go언어 Metric label

Label이란 Label이란 메트릭에 Key-Value형식으로 Metric을 구분하는데 많이 사용된다. Kubernetes에서는 Pod, Node, Cluster, 또는 Application 등을 Metric에서 구분하는데 많이 사용된다. Go언어 Metric에 Label 등록하기 package main import ( "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promauto" "github.com/prometheus/client_golang/prometheus/promhttp" "net/http" "time" ) const ( LabelAppName = "applicati..

Go언어 2021.06.14