ソースコードが長くなってくれば、ソースコードを分割するのは当然ですが、Golangでは、この「当たり前」の情報が全然見つからなくて、本当に困っています。
これまで出てきたエラー一覧
- build command-line-arguments: cannot find module for path _/C_/Users/....
- # command-line-arguments
- repeated module statement
「もう、これだから、新しい言葉を覚えるのは嫌なんだよ」と、何十回目かの泣き言を言っています。C/C++で1000万くらいのスレッドが、サクっと作れれば、別にGolangでなくたって・・・と思うのですが、ないものをねだっても仕方がありません。
こちらの記事(https://leben.mobi/go/configuration_and_package/start-go/)を丸パクリさせて頂きました(ちょっとだけ変えています)。
$ tree
.
├── hello
│ ├── greet.go
│ └── hello.go
└── main.go
てな構造でディレクトリを掘って、ファイルを作ってください。
で、
$ go mod init m ← "m"でもなんでも、好きな文字列を(ここでは"m"とします)
go: creating new go.mod: module m
go: to add module requirements and sums:
go mod tidy
下↓が必要はどうかは不明
$ go mod edit -replace=m/hello=../hello
として、
.
├── go.mod
を作ります。
$ more main.go
package main
import (
"fmt"
"m/hello" // ← ここ重要
)
func main() {
fmt.Println(hello.SayHello()) // パッケージ名 + 最初が大文字の関数
fmt.Println(hello.Greet())
}
$ more hello/hello.go
package hello // ← ここ重要
func SayHello() string { // 最初は大文字
return "Hello World!"
}
$ more hello/greet.go package hello // ← ここ重要 func Greet() string { // 最初は大文字 return "How are you?" }
とすると、
$ go run main.go
Hello World!
How are you?
と、ちゃんと、動くようになりました。
が、全然消せない。