go 9

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

[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언어 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

Prometheus Go언어 Metric 생성

Prometheus Metric Type Counter 카운터 Counter는 개수를 측정하거나 증가하는 값을 측정할 때 사용합니다. 카운터는 0으로 초기화는 가능하지만 값을 감소할 수 없고 증가만 할 수 있습니다. 대표적으로 함수 호출 횟수 및 접속 요청 수, 실패 개수를 측정할 때 많이 사용할 수 있습니다. Gauge 게이지 Gauge는 현재의 값을 나타내는 데 사용합니다. 값이 증가할 수 있으며 감소할 수도 있습니다. 증가 감소 모두 가능하다 보니 여러 방면에서 사용할 수 있습니다. 대표적으로 현재 메모리 사용량, CPU 사용 시간, 저장된 데이터의 수, 스레드 개수 등 여러 방면에서 사용합니다. Summary 서머리 Summary는 _count, _sum을 제공하여 평균을 측정할 수 있으며, 슬라..

Go언어 2021.06.13