nakamura244 blog

所属団体とは関係なく、個人的なblog

Go1.12に上げた時のメモ

今の会社のメインで開発しているリポジトリのGoのバージョンを上げた時のメモを残しておこうと思います。検索にヒットして誰かの少しでも役に立てれば幸い

まずはざっくり

Go 1.12 Release Notes - The Go Programming Language

まずはざっくり、リリースノートを眺めて大枠を抑えよう!

基本的には1系なのでGo 1 promise of compatibility in mind.の元に大体は大丈夫だろうなぁーっとなんとなく思っていた。

Go 1 and the Future of Go Programs - The Go Programming Language

んで、大きめの変更で担当のリポジトリに関係しそうなところはModulesぐらいだなと思い作業した。

それでもちょっとコケた部分はあった

そんな大してハマった訳ではないが、気になったところをまとめておく

1. clangコマンドが見つからない問題

Go1.12に上げた後にtestを走らせてみたら下記のようなエラーが出力された。でも結論からいうとGo1.12と関係はないです。自分のマシンの設定の問題でした。

# runtime/cgo
pyenv: clang: command not found

The `clang' command exists in these Python versions:
  anaconda3-4.4.0/envs/xxxx

ちなみにその時のgo envの結果は下記

GCCGO="gccgo"
CC="clang"
CXX="clang++"

特に問題ないはずですよね〜。

なぜか、clangコマンドが見当たらない問題ですが、エラーログからすぐにわかったのですが、自分のマシンでは機械学習関連でPythonを入れています。

しかも、anaconda経由で。

それで.zshrcに下記のようにPython関連の設定を仕込んでいます

export PYENV_ROOT=$HOME/.pyenv
export PATH=$PYENV_ROOT/bin:$PATH
eval "$(pyenv init -)"
export PATH="$PYENV_ROOT/versions/anaconda3-4.4.0/bin/:$PATH"

こいつのおかげでclangのパスが/Users/xxxx/.pyenv/shims/clangとなっていました。

普通は/usr/bin/clangになっているはずです。

致し方ないので.zshrcのexport設定をいちいちいじりながら対応しています。

あまり詳しく追いかけていないけど、anacondaじゃなくて、pyenvの方がうまくあっていないのかも...

pyenv,anacondaあたりでmacローカルマシンで機械学習関連をやっているGopherの方は注意です!!

自分は最近Python関連も積極的にいじるようになって、それ用の環境を整えた所がちょっとバッティングしてしまったという感じです。

2. プライベートリポジトリのgo get

何も気にせずにやると下記のようなエラーが出る by circleci

git fetch -f origin refs/heads/*:refs/heads/* refs/tags/*:refs/tags/* in /go/pkg/mod/cache/vcs/217ea393f42f5804c253aab4ec165a343ea79430ab82e5d628514a79a78c9a53: exit status 128:
    ERROR: Repository not found.
    fatal: Could not read from remote repository.
    
    Please make sure you have the correct access rights
    and the repository exists.

circleciの設定で下記は実施済み

name: "Setting netrc"
command: |
  echo "machine github.com" >> /home/circleci/.netrc
  echo "login ${GITHUB_ACCESS_TOKEN}" >> /home/circleci/.netrc

でもなぜか効いていない

致し方なく、下記のFAQで書かれているgitconfigでの解決法を試したら解決したのでこちらの方法にした

Frequently Asked Questions (FAQ) - The Go Programming Language

まぁsshでの接続のが早いだろうし、良いか😅

軽く感想的なところ

  • module-aware modeはGo1.13からはデフォルトになるようなので、基本的にGO111MODULE=onで動かしている。1.13にあげる時に少しでも楽なように
  • 軽く忘れたけど、開発環境のGOROOT,GOPATHどうするかみたいなやつもう統一されてくるんじゃなかろうか
  • moduleもキャッシュされるようですね.
    • circleciを早くするポイントかな。うちはdeployまでcircleciでやるので割と重要かも
  • さよならdep,vendorディレクトリ👋