『プロになるためのWeb技術入門』の新版はGo言語で解説になったんだなあと思いつつ読み進めていた。 普段はJavaばかり触っているが、だいぶ気色の違う言語のようで興味が湧いてきた。 例えば、書籍中によると以下のような特徴があるとのことだった。
- オブジェクト指向言語ではない
- 関数は複数の値を返す
- 例外処理がない
- ポインタがある
- 関数を受渡できる
これだけでもJavaと大きな違いがあることがわかる。
普段はJava + Springでバックエンドの開発・保守をやっているが、Goだとどうなるのか調べながら触ってみようと思う。
前提
私の環境は以下の通り
- M2MacBook Pro
- メモリは24GB
- MacOS Sonoma 14.6.1
環境構築
Goの公式よりpkgファイルの取得もできたが、brewコマンドでインストールした。
$ brew install go
Go - Visual Studio Marketplace
手を動かしてみる
公式チュートリアルがたくさん用意されている。
以下、私の感想ベースでメモを残しておく。(単に手順とか記載してもあまり意味がないので)
まずはGetting Started
go mod tidyについて
このコマンドを実行すると不足しているrequirements(依存ライブラリ?)を追加してくれたり、また不要なrequirementsを削除してくれる。
- 初期状態
hello.go(mainの関数を持つコード)
package main import "fmt" func main() { fmt.Println("Hello World!") }
go.mod
module example/hello go 1.23.4
- hello.goに"rsc.io/quote/v4"を追加してgo mod tidyを実行
hello.go(mainの関数を持つコード)
package main import ( "fmt" "rsc.io/quote/v4" ) func main() { fmt.Println(quote.Go()) }
go.mod
module example/hello go 1.23.4 require rsc.io/quote/v4 v4.0.1 require ( golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c // indirect rsc.io/sampler v1.3.0 // indirect )
- hello.goから"rsc.io/quote/v4"を削除してgo mod tidyを実行
hello.go(mainの関数を持つコード)
package main import ( "fmt" ) func main() { fmt.Println("Hello World!") }
go.mod
module example/hello go 1.23.4
追加したり削除したりをよしなにやってくれている。便利。
hello.goに"rsc.io/quote/v4"を追加してgo mod tidyを実行したときに
requireが2箇所追加されたが、上のrequireはプロジェクトが直接依存しているモジュールで、
したのrequireは間接的に依存しているモジュール。
Gradleでも間接的に依存しているライブラリを持ってきてくれるので同じようなものかな。
Go Modules Reference - The Go Programming Language
Tutorial: Get started with Go - The Go Programming Language
文法に慣れる A Tour of GO
tour of go をローカルで動かしたいのに動かない
$ go tool tour go: no such tool "tour"
$ go get github.com/atotto/go-tour-jp/gotour go: go.mod file not found in current directory or any parent directory. 'go get' is no longer supported outside a module. To build and install a command, use 'go install' with a version, like 'go install example.com/cmd@latest' For more information, see https://golang.org/doc/go-get-install-deprecation or run 'go help get' or 'go help install'.
原因調査が必要。同じところでハマってる人を発見した。
【Go言語】A Tour Of Go (日本語版) のローカル実行エラー - lelelemon’s blog
この方が残してくれているように、英語版の方にはコマンドが記載されている。
$ go install golang.org/x/website/tour@latest
コマンドを実行したところ、~/go/bin にtourが追加されていることを確認できた。
そして~/go/bin/tourを実行して無事にローカル起動ができた。
英語版になるけど、日本語版はメンテの維持が難しい(最終コミットが2020年12月)ようだったので英語版のまま進める。
簡潔な解説と実際のコード例で見比べられるので、英語でもほぼ困らない感じだった。
Goの観点でプログラミングを眺めるCreate a module
手を動かして確認していないが、以下の情報源がある。
Tutorial: Create a Go module - The Go Programming Language
Goでマルチモジュールワークスペースを作成して使用する
手を動かして確認していないが、以下の情報源がある。
Tutorial: Getting started with multi-module workspaces - The Go Programming Language
RDBへのアクセス
手を動かして確認していないが、以下の情報源がある。
Tutorial: Accessing a relational database - The Go Programming Language
RESTful APIをGinフレームワークを使って実装する
未着手。。。
Tutorial: Developing a RESTful API with Go and Gin - The Go Programming Language