[go] gvm으로 여러 버전 중 골라 쓰기

https://github.com/moovweb/gvm 로 go 버전 중 원하는 버전을 설치하고 사용할 수 있다. gvm을 사용하기 위해서는 설치하고자하는 go 버전의 compile을 위해 go 가 먼저 설치되어 있어야 한다.

$ brew install go
$ bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
$ source ~/.gvm/scripts/gvm

설치 후에는 gvm install go<버전> 형식으로 설치한 후 gvm use go<버전> 으로 사용한다.

$ gvm install go1.21.5
$ gvm use go1.21.5

버전 확인을 위해 go version으로 확인해본다.

$ go version
go version go1.21.5 darwin/amd64
$ which go
/Users/dasomoli/.gvm/gos/go1.21.5/bin/go

[golang] go-ethereum으로 이벤트 구독

	go func(client *ethclient.Client) {
		contractAddresses := []common.Address{}
		for _, pair := range Pair {
			contractAddresses = append(contractAddresses, common.HexToAddress(pair.PairAddress))
		}

		SyncEventSig := []byte("Sync(uint112,uint112)")
		hash := sha3.NewLegacyKeccak256()
		hash.Write(SyncEventSig)
		SyncEventHashBytes := hash.Sum(nil)
		signature := common.BytesToHash(SyncEventHashBytes) // 0x1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1
		topic := []common.Hash{signature}
		topics := [][]common.Hash{topic}
		query := ethereum.FilterQuery{
			Addresses: contractAddresses,
			Topics:    topics,
		}

		logs := make(chan types.Log)
		sub := event.Resubscribe(2*time.Second, func(ctx context.Context) (event.Subscription, error) {
			return client.SubscribeFilterLogs(context.Background(), query, logs)
		})
		defer sub.Unsubscribe()
		for {
			select {
			case err := <-sub.Err():
				log.Fatal("Error on select:", err)
			case vLog := <-logs:
				fmt.Println("Log block number:", vLog.BlockNumber)
				// 여기서 하고 싶은 일 하기.
			}
		}
	}(client)

[golang] brew로 go의 여러 버전 사용하기

brew를 사용할 때 go의 여러 버전을 설치해서 바꿔가며 사용할 수 있다.

특정 버전을 설치할 때는 다음과 같이 한다.

brew install go@1.14

특정 버전을 선택해서 사용할 때는 다음과 같이 한다.

brew link --force go@1.14
brew link --overwrite go@1.14

Protocol Buffer

구글에서 개발한 structured data를 serialize하는데 사용하는 data format. 줄여서 protobuf로 부른다.

go의 github protobuf 는 “google.golang.org/protobuf/proto” 패키지를 사용하도록 deprecated (https://pkg.go.dev/github.com/golang/protobuf/proto) 되었다.

구글 문서인 proto3의 language guide는 아래.

https://developers.google.com/protocol-buffers/docs/proto3

API reference는 아래에 있다.

https://developers.google.com/protocol-buffers/docs/reference/overview

Go API reference는 아래다.

https://pkg.go.dev/google.golang.org/protobuf/proto

[golang] github.com의 private repo 접근하기

$ git config --global url.git@github.com:.insteadOf https://dasomoli@github.com/
$ go get github.com/dasomoli/private-repo

참고: https://stackoverflow.com/questions/27500861/whats-the-proper-way-to-go-get-a-private-repository

[go] Ubuntu 에서 go 여러버전 사용하기

Ubuntu 리눅스에서 go의 여러 버전을 심볼릭 링크로 사용할 때 update-alternatives로 셋팅해서 사용하자.

# update-alternatives --install /usr/local/go go /usr/local/go1.17.2 1
update-alternatives: using /usr/local/go1.17.2 to provide /usr/local/go (go) in auto mode

# update-alternatives --install /usr/local/go go /usr/local/go1.16.8 2
update-alternatives: using /usr/local/go1.16.8 to provide /usr/local/go (go) in auto mode

# update-alternatives --install /usr/local/go go /usr/local/go1.14.15 3
update-alternatives: using /usr/local/go1.14.15 to provide /usr/local/go (go) in auto mode

# update-alternatives --config go
대체 항목 go에 대해 (/usr/local/go 제공) 3개 선택이 있습니다.

  선택       경로                우선순� 상태
------------------------------------------------------------
* 0            /usr/local/go1.14.15   3         자동 모드
  1            /usr/local/go1.14.15   3         수동 모드
  2            /usr/local/go1.16.8    2         수동 모드
  3            /usr/local/go1.17.2    1         수동 모드

현재 선택[*]을 유지하려면 <엔터>를 누르고, 아니면 선택 번호를 입력하시오:
#