しかさんに、Pythonからgoに変換する、というものを教えてもらった。
が、goなんて試して大丈夫だろうか?
Pythonを使ってから、Cに戻っても文字列をシングルクオーテーションで囲もうとしたり、セミコロンを付け忘れたりと、多少困ったことになっているのだ。
が、ソースファイルの一部を見て「あ、これはgoだね」くらいは言えるようになっておきたいというのはある。
Hello World程度はやっておこう。
まず、インストール。
Ubuntu on Windowsで試そうとしたのだが、困ったことに、なぜかgoがインストールされていた。
したっけ。。。最近、別の作業でインストールしたような気がしなくもない。
$ go version
go version go1.6 linux/amd64
$ ls -l /usr/bin/go
/usr/bin/go -> /etc/alternatives/go*
今日の時点では、最新版は「go1.7.5 (released 2017/01/26)」なので、aptでupdateしたり、purgeしてinstallし直したりしたが、そもそもpurgeしてもgoコマンドが使える。
なんなんだ、一体。。。
https://golang.org/doc/install#uninstall
goディレクトリを削除、という方法なのか。
$ ls -l /usr/bin/go
/usr/bin/go -> /etc/alternatives/go*
$ ls -l /etc/alternatives/go
/etc/alternatives/go -> /usr/lib/go/bin/go*
$ ls -l /usr/lib/go/bin/go
/usr/lib/go/bin/go*
たらい回しにされたが、/usr/lib/goディレクトリが本体のようだから、それを削除すれば良いことになるのかな。
そして、wgetでtar.gzファイルを取ってきて、tarで展開すると、goディレクトリが出てくる。
これを/usr/localに移動させて、/usr/local/go/binにPATHを通せばよい。
$ go version
go version go1.7.5 linux/amd64
~/.profileに追加するよう書かれているが、.profileを見ると~/.bashrcがあれば読込んでいるので、今回は.bashrcでよいだろう。
そして、/usr/local/go以外に置くのであれば、GOROOTを設定する必要があるらしい。
では、さっきまで/usr/lib/goに入っていたのだが、その場合はGOROOTは/usr/lib/goだったのだろうか。。。
gccなんかは、実行ファイルさえ動けば位置の設定などせずに使えるけど、ああはならなかったのだろうか?
あるいは、なにか便利なことがあるのかもしれない。
そしてGOPATHだ。
これを設定しておかないと、なんか、いろいろうまくいかなかった記憶がある。
今回は、~/Prog/golangにしておこう。
Progはシンボリックリンクで、lxssではなく普通の場所にしている。
テキストエディタを使うのは、lxss以下だとやりづらい。
https://golang.org/doc/install#testing
動作確認。
GOPATHを設定して、src/github.com/user/hello
にhello.goというファイルを作るらしい。
なんだよ、github.comって。。。
変に反発して、~/Prog/golang/hello/hello.goという構成にしてみた。
$ go install hello
can't load package: package hello: cannot find package "hello" in any of:
/usr/local/go/src/hello (from $GOROOT)
/home/xxx/Prog/golang/src/hello (from $GOPATH)
ちっ。
$GOPATH/src以下にないとだめなんだ。
つまり$GOPATHの中には、binとsrcがいるということだ。
あらためて、~/Prog/golang/src/hello/hello.goという構成でやってみる。
$ go install hello
go build hello: /usr/local/go/pkg/tool/linux_amd64/link: read |0: interrupted system call
ん??
これ、前回もなったな。。。
確か、2回同じことをするとビルドできたような。
$ go install hello
$
できた。
・・・これでよいのか?
$ ls $GOPATH/bin
hello*
$ hello
Hello, world!
動いた。
$ file $GOPATH/bin/o
/home/xxx/Prog/golang/bin/hello: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, not stripped
$ ls -l$GOPATH/bin/hello
-rwxrwxrwx 1 root root 1642158 Jan 28 11:44 /home/xxx/Prog/golang/bin/hello*
意外と大きいな。
$ strip $GOPATH/bin/hello
$ ls -l $GOPATH/bin/hello
-rwxrwxrwx 1 root root 1028488 Jan 28 11:47 /home/xxx/Prog/golang/bin/hello*
まあ、static linkしているから、こんなもんか。
gccだと共有ライブラリを使うのがデフォルトだから、実行ファイル自体は小さくなるだろう。
Execution Modeというのが関係しそうな、しなさそうな。。。まあ、忘れよう。
Go Execution Modes - Google ドキュメント
動いたものの、気になるのはinterrupted system call。
uowの問題で、Build 15019では直るのだとか。
これがWindows Updateのようなものなのか、Anniversary Updateみたいなものなのかは、よくわからんな。
動かないことはないので、次回がいつになるか分からないが、そのときはもう少し見ることにしよう。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。