Goを少しだけ触ってみる

Goに触れる機会が多くなってきたように思う。 HugoもGoだし。

とりあえず、最低限の文法だけ書けるようになりたい。

30minだけ触ってみて記録を書いておく。

インストール

インストール手順はここにありそう

ただ、手元のmacdでは入ってた。 これを使うことにする。

> go version
go version go1.16.3 darwin/arm64

チュートリアル

こちらのチュートリアルをこなしていく。

hello world

go mod initでモジュールを作成する。これを実行しないとgo runなど使えない。

> go mod init example.com/hello
go: creating new go.mod: module example.com/hello
go: to add module requirements and sums:
	go mod tidy

example.com/hello の部分は本来はモジュールを補完するパスを書く。 今回は暫定でチュートリアルの記載にしたがっている。

以下のgoのコードを書く。そして、runすると実行結果が得られる。

package main

import "fmt"

func main() {
    fmt.Println("Hello, Hello!!")
}
> go run .
Hello, Hello!!

fmtはGoの標準ライブラリらしい。 ここにドキュメントがある。

外部ライブラリを利用する

外部ライブラリを利用する場合、https://pkg.go.dev/ でライブラリを検索する。

importは以下のように書く。

@@ -2,6 +2,8 @@ package main

 import "fmt"

+import "rsc.io/quote"
+
 func main() {
-    fmt.Println("Hello, Hello!!")
+    fmt.Println(quote.Go())
 }

書いただけなら使えないので、tidyコマンドを実行する。

> go mod tidy
go: finding module for package rsc.io/quote
go: downloading rsc.io/quote v1.5.2
go: found rsc.io/quote in rsc.io/quote v1.5.2
go: downloading rsc.io/sampler v1.3.0
go: downloading golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c

すると使えるようになる。

> go run .
Don't communicate by sharing memory, share memory by communicating.

tidyとは何かが気になるので、ドキュメントを見ると、

go mod tidy ensures that the go.mod file matches the source code in the module. It adds any missing module requirements necessary to build the current module’s packages and dependencies, and it removes requirements on modules that don’t provide any relevant packages. It also adds any missing entries to go.sum and removes unnecessary entries.

とのこと。つまり、ソースコードを見てgo.modに各モジュールを調整してくれる。便利。