はじめに
タイトルのままです。
読み手の対象者は、
僕と同じで
- Go 言語って名前だけ知ってる
- 何ができるのか、とか、実際にコードを見たことはない
- でもなんか触ってみたい
そんな人です。
いつも通り、やりながら、書いていきます。
やることは、
公式のなんかセットアップ系のページ をやります
実行環境
持病のローカルに色々入れてはいけない病が出ちゃうので、
docker 内でやります。
docker の alpine でやります。
$ cat /proc/version
Linux version 4.9.184-linuxkit (root@a8c33e955a82) (gcc version 8.3.0 (Alpine 8.3.0) ) #1 SMP Tue Jul 2 22:58:16 UTC 2019
1. install
知らないんだから、持ってないですw
$ apk add go
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/community/x86_64/APKINDEX.tar.gz
(1/11) Installing binutils-libs (2.30-r2)
(2/11) Installing binutils (2.30-r2)
(3/11) Installing gmp (6.1.2-r1)
(4/11) Installing isl (0.18-r0)
(5/11) Installing libgomp (6.4.0-r5)
(6/11) Installing libatomic (6.4.0-r5)
(7/11) Installing mpfr3 (3.1.5-r1)
(8/11) Installing mpc1 (1.0.3-r1)
(9/11) Installing gcc (6.4.0-r5)
(10/11) Installing go (1.9.4-r0)
(11/11) Installing gcc-zsh-completion (5.4.2-r1)
Executing busybox-1.27.2-r11.trigger
OK: 603 MiB in 67 packages
$ go version
go version go1.9.4 linux/amd64
うん。いけた。
この辺、パス指定とかしなくていいんだね。
2. Go ファイルを書く
公式のいう通りに進めます。
$ mkdir go/src/hello
$ cd go
$ vim src/hello/hello.go
package main
import "fmt"
func main() {
fmt.Printf("hello, world\n")
}
おそらくこいつを呼び出すのだろう。
$ cd src/hello
$ go build
# _/app/projects/go_learn/go/src/hello
/usr/lib/go/pkg/tool/linux_amd64/link: running gcc failed: exit status 1
/usr/lib/gcc/x86_64-alpine-linux-musl/6.4.0/../../../../x86_64-alpine-linux-musl/bin/ld: cannot find Scrt1.o: No such file or directory
/usr/lib/gcc/x86_64-alpine-linux-musl/6.4.0/../../../../x86_64-alpine-linux-musl/bin/ld: cannot find crti.o: No such file or directory
/usr/lib/gcc/x86_64-alpine-linux-musl/6.4.0/../../../../x86_64-alpine-linux-musl/bin/ld: cannot find -lpthread
/usr/lib/gcc/x86_64-alpine-linux-musl/6.4.0/../../../../x86_64-alpine-linux-musl/bin/ld: cannot find -lssp_nonshared
collect2: error: ld returned 1 exit status
めっちゃエラー出るじゃん...。
$ vim ~/.zshrc
export GOPATH=$HOME/go
もだめ。
〜〜〜30分くらい頑張る〜〜〜
無理なので、
初学者向けのワークスペースで質問してみた。
(2年目だけど初学者でいいよね。いいよね?)
https://twitter.com/OgiharaRyo/status/1189467382328152064
そのままやった
$ apk add --no-cache musl-dev
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/community/x86_64/APKINDEX.tar.gz
(1/1) Installing musl-dev (1.1.18-r4)
OK: 613 MiB in 68 packages
$ go build
$ ls
hello hello.go
できた!!!!!
$ ./hello
hello, world
できた!!!
できた!!!!!!!!!!!
終わり
今回の大きい収穫は、ワークスペースで教えてもらった
ぐぐり方のこつですね( Go 関係ないw)
ググる時は、それっぽいワードをダブルクォーテーションで囲うとノイズを除去できます。
本当に助かりました。ありがとうございます!
結論
Go でも hello world だけなら難しくない
せっかく Go が動かせる環境を作れたので、
もうちょっと色々やってみようと思います。
今回はこれまで!ありがとうございました!