windows powershell 에서 환경 변수를 설정해서 go 실행하는 방법 windows powershell에서는 linux에서 처럼 환경변수를 설정해서 하는 것이 같은 문법으로는 안된다.* linuxAPP_ENV=local go run main.go * powershell$env:APP_ENV="local"; go run main.go Dev/Go 2024.10.29
golang 숫자 표시 golang에서 숫자를 표시 할때"_" 를 통해서 쉼표(,)와 같은 구분 값을 넣을 수 있습니다. 꼭 3자리마다 _를 넣어야 하는 것은 아니며 단지 구분을 위해서 사용하는 코드입니다.fmt.Println(1_000_000_000, 100000000)fmt.Println(10_0_0_0_000, 10000000)1000000000 10000000010000000 10000000// 10_000_000_00// 10 000 000 00// 1000000000// 10_0_0_0_000// 10 0 0 0 000// 10000000 Dev/Go 2024.06.13
golang 문자열 포맷 스트링 tip golang에 포맷 문자열 생성시 C언어와 같이 %s %d 의 문자열 포맷을 설정 하는데 인자 순서와 일치 되어야 합니다. 아래의 코드 처럼 순서에 상관없이 인자를 출력 할 수 있는 방법이 있습니다. fmt.Printf("name : %[1]s, age : %[2]d, name : %[1]s\n", "haha", 10)name : haha, age : 10, name : haha Dev/Go 2024.06.13
golang Functional Options Pattern golang Functional Options Patternpackage servertype Server { host string port int timeout time.Duration maxConn int}func New(options ...func(*Server)) *Server { svr := &Server{} for _, o := range options { o(svr) } return svr}func (s *Server) Start() error { // todo}func WithHost(host string) func(*Server) { return func(s *Server) { s.host = host }}func WithPort(port int) func(*.. Dev/Go 2024.06.05
google Project IDX 이전에 신청해 놓은 google의 웹 개발 IDE의 사용이 허가 되었습니다. 우선 flutter의 에뮬레이터가 너무 궁금해서 프로젝트를 생성 했는데 실패....ㅠㅠ golang 프로젝트는 생성하는데 성공!!! 우선 IDE는 VS code 기반입니다.(이건 이전에 설명을 봐서 알고 있었습니다.) VS code도 Web 버전이 존재하는데 차이가 뭐가 있을까 했는데... 다른건 모르겠고 가장 큰 차이가 Extension이 거의 다 설치 되는 것!!! VS code Web은 Extension이 거의 설치 안되는데 IDX는 거의 설치가 가능!!! 써보니 그냥 VMWare 서버 한대를 나누어주는 구조이고 거기에 VS code를 프로파일별로 보여주는 듯 느낌은 너무 느리다. flutter의 에뮬은 web, andri.. Dev/Go 2024.04.02
golang sqlc query log print golang에서 sqlc를 사용하는데 쿼리를 log에 출력하는 옵션이 없어서 찾아 보니 driver의 hook을 설정해서 쿼리의 실행전과 실행 후에 쿼리를 찍는 소소가 있었다. 그런데 sqlc는 쿼리를 prepared 형식으로 던지기 때문에 parameter와 쿼리가 분리되어서 출력 되는 문제가 있었다. 그래서 gorm의 쿼리를 출력하는 소스를 찾아 보니 logger 폴더에 parameter를 찾아서 찍어 주는 소스가 존재 했다. 두개를 합치면 다음과 같은 소스로 원하는 쿼리를 출력해 볼 수 있다. 1. database driver hook https://github.com/qustavo/sqlhooks GitHub - qustavo/sqlhooks: Attach hooks to any database/.. Dev/Go 2024.03.08
go 1.22 for loop 변경 go 1.22 에서 for loop의 변경 점이 몇 가지 있습니다. for 사용시 for문에서 선언된 변수가 한번만 생성되어서 내부의 goroutine 사용시 마지막 변수가 나오는 문제점이 있었습니다. 이번 1.22에서는 매번 생성되므로 문제가 해결 됩니다. 샘플 코드 package main import ( "fmt" "sync" ) func main() { numbers := []any{1, 2, 3, 4, 5} var wg sync.WaitGroup for _, number := range numbers { wg.Add(1) go func() { defer wg.Done() fmt.Println(number) }() } // // 1.22 이전 버전은 아래의 코드르 형태임 // var number a.. Dev/Go 2024.02.23
dotnet으로 Golang gin 로컬 개발(localhost) 인증서 만들기 Go gin으로 개발중 https를 테스트하는데 인증서가 없어서 문제가 되었다. 로컬 개발이라 도메인도 없는 상황!!! dotnet에 개발 인증서를 만드는 기능이 포함되어 있다.(localhost) 아래의 명령어로 인증서(pem, key) 파일을 만들 수 있다. dotnet dev-certs https -ep ./certificate.crt --trust --format PEM --no-password Go gin TLS 서버 실행 srv.ListenAndServeTLS("./cert/certificate.crt", "./cert/certificate.key") 크롬에서 접속시 안전한 사이트로 표시됨. Dev/Go 2024.01.11
Golang cross-compile windows, mac(darwin), linux go에서 빌드를 하는 경우 바이너리 실행파일을 생성합니다. 그런데 바이너리 실행파일은 OS(windows, mac, linux)별 아키텍쳐(x86, x64, arm64)별로 다른 구조 및 라이브러리 참조가 다르기 때문에 빌드시에 어떤 타켓으로 빌드 할 지 결정이 필요합니다. go build 시에는 go env에 저장된 환경변수 파일에 따른 정보로 빌드가 됩니다. GOARCH='arm64' GOHOSTARCH='arm64' GOHOSTOS='darwin' GOOS='darwin' 1. Windows 바이너리 컴파일 # Windows x64 빌드 GOOS=windows GOARCH=amd64 go build # Windows x86 빌드 GOOS=windows GOARCH=386 go build 2. Mac.. Dev/Go 2023.12.18
go - package go의 모든 파일은 package로 시작해야 합니다. package main package handler package에 입력되는 이름은 main을 제외하고는 모두 파일을 포함하는 디렉토리명을 사용합니다. 이런 구조라면 error_handler, login_handler 등의 같은 디렉토리에 포함되는 파일은 모두 package handler로 시작합니다. package handler package main은 특별한 package로 프로그램의 시작시점인 func main을 포함 할 수 있습니다. package main또한 여러개의 파일이 존재할 수 있으나 같은 패키지에는 같은 이름의 함수가 한 개만 존재해야 하므로 main 함수는 하나만 선언 할 수 있습니다. Dev/Go 2023.11.24