이 블로그 검색

2021년 4월 27일 화요일

Go 1.16 에서 $GOPATH/src 에서 코드 작성하고 사용하기

Go 1.16 버전 부터는 기본적으로 module 을 사용하게 변경 되었다. 덕분에 GOPATH  와 상관없이 아무 위치에서든 자신의 소스파일을 작성하면 된다.  그리고 모듈을 사용하기 위한 go.mod 파일이 반드시 필요하게 되었다.  하지만 1.16 버전에서도 선택적으로 module 사용을 할지 말지 여부를 결정 할 수 있다. 예를 들어 기존 프로젝트 구조가 GOPATH 내 src 를 사용하는 경우등이 해당될수 있다.

2021년 4월 25일 일요일

go module과 package 관계, 그리고 module path 개념 정리

go 의 기본적인 개념 중에서 모듈, package 그리고 모듈 경로에 대해 알아본다. 처음에 개인적으로 많이 헷갈렸던 부분이라서 정리해 본다. 지금 우리가 go 로 어떤 프로젝트를 수행한다고 가정해 보면, 다음처럼 정리 할 수 있겠다. 

  • 이 프로젝트는 여러개의 모듈을 가질수 있다.
  • 각 모듈에는 여러개의 package들이 존재할수 있다.
  • 각 package 들은 1개 이상의 go 소스파일로 구성된다.
  • 모듈내의 각 package 들은 자신의 package 폴더를 go mod init 으로 지정한 모듈 경로 + 폴더로 만들면 된다. 
  • 패키지명은 (반드시) 경로의 마지막 문자열로 해준다.
  • 개발중인 모듈은 반드시 원격 저장소에 배포될 필요가 없다.
  • 로컬 개발환경에서 동시에 여러 모듈을 개발중이고, A모듈이 B모듈을 사용해야 한다면, B모듈의 경로를 개발 중인 로컬 경로로 변경하는 작업이 필요하다.(이건 예전 상황이고.. go 1.18 부터는 그냥 workspace 를 사용하면 됨)

위 내용들을 하나씩 살펴보자. (go 1.16 기준으로 작성됨)

2021년 4월 24일 토요일

go 에서 gRPC-Gateway 사용하기

이번에는 go 에서 gRPC-Gateway 를 사용하는 방법에 대해 알아보려 한다. 

최종 코드는 다음에서 확인 가능 : https://github.com/jeremyko/grpc-gateway-sample

앞서 살펴본 go 에서 proto buffer 사용하기 와 거의 비슷한 절차이나 gRPC-Gateway 사용을 위해 추가되는 절차가 있다. 다음 내용을 기초로 작성되었다 (그대로 따라 했더니 에러가 발생되어, 최신 go 버전에 맞게 내용이 추가된 부분이 있다. go 1.16 버전 기준).

https://grpc-ecosystem.github.io/grpc-gateway/docs/tutorials/introduction/

필요한 패키지 다운로드

go get google.golang.org/grpc
go get github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-grpc-gateway
go get google.golang.org/protobuf/cmd/protoc-gen-go
go get google.golang.org/grpc/cmd/protoc-gen-go-grpc

2021년 4월 22일 목요일

go 에서 proto buffer 사용하기

1. proto buffer 를 정의
2. go 로 변환하여 모듈을 만들고
3. 이 모듈을 로컬에서 호출해서 사용 하는 간단한 예제를 정리해 본다 (go 1.16 버전을 기준)

최종 코드는 다음을 참고 : https://github.com/jeremyko/go-proto-buffer-sample

2021년 4월 15일 목요일

flutter : push-up mania

flutter 를 사용한 모바일 크로스 플랫폼 앱 개발 예제. 

https://play.google.com/store/apps/details?id=com.jeremyko.pui

뭘 일단 만들어볼까 하다가, 한 10년 전에 ios 앱으로 만들었던 푸쉬업 카운터를 또 만들어 봤음.

 


 

2021년 4월 3일 토요일

flutter : using mixed null safety for legacy packages

null safety 가 없는 기존 package 들을 최신 flutter, dart 개발 환경에서 사용하기.

flutter 프로젝트 내에서 dart 버전을 소스파일 단위로 다르게 지정하여 오래된 package 들도 null safety 에러가 안나게 개발할수 있다.