プロジェクト作成とHello World
Go(v 1.18)で新しいプロジェクトを作るにはまずプロジェクト用に適当なフォルダをつくります。
たとえばwebappフォルダを作ります。私はubuntuを使っていますが、Windowsを使っている人はGUIからフォルダの作成をしてください。
$ mkdir ./webapp
そしたらまずはここがgoのプロジェクトのフォルダだと宣言します。
$ cd ./webapp
$ go work init
実際に作業をするのはモジュールのフォルダなのでモジュール用フォルダを作ります。
$ mkdir ./helloworld
ここでここがモジュールのフォルダだと宣言します。
$ cd ./helloworld
$ go mod init example.com/webapp/helloworld
なお、パッケージとして一般公開したい場合はモジュール名にちゃんと命名規則があるようです。
参考: https://go.dev/blog/package-names
できたらここがプロジェクトの一部だと宣言します。
$ go work use .
できたらプロジェクトの準備ができたのでmain.goを書きます。
$ touch ./main.go
このmain.goを開き、こう書いてください。
package main
func main() {
fmt.Println("Hello World")
}
できたらビルドして実行しましょう。するとHello Worldが出力されます。
$ go build .
$ go run .
Hello World
なお、実行はこういうやり方でもできるはずです。
$ go build example.com/webapp/helloworld
$ go run example.com/webapp/helloworld
サブパッケージ
今度はサブパッケージをつくってみます。
$ mkdir ./subpackage
$ cd ./subpackage
$ touch subpackage1.go
このsubpackage1.goの中にこう書きます。
package subpackage
func Hello1() (str string) {
return "Hello subpackage 1"
}
もうひとつサブパッケージをつくります。
$ touch subpackage2.go
package subpackage
func Hello1() (str string) {
return "Hello subpackage 2"
}
これだけでサブパッケージの呼び出しができるようになります。
main.goを書き換えて呼び出してみます。
package main
import (
"fmt"
"example.com/webapp/helloworld/subpackage"
)
func main() {
fmt.Println("Hello World")
fmt.Println(subpackage.Hello1())
fmt.Println(subpackage.Hello2())
}
これを実行してみます。
$ go build example.com/webapp/helloworld
$ go run example.com/webapp/helloworld
Hello World
Hello subpackage 1
Hello subpackage 2
ちゃんとstringの値がサブパッケージから取得できていることが確認できました。
最後に
モジュールをうまくわけてかいてマイクロサービス的な作り方ができればモダンでいいと思います。