golangで cの#includeみたいなことをやりたいだけなのに、酷く苦労した話
変数や構造体などを一箇所に集めておいて、ソースコードから、#include "include.h" みたいに使うのは、Cの定番ですが、これだけのことをGoでやりたいだけなのに、酷く苦労しました。
大切なのは、ソースコードと違う場所に、そのインクルードファイルみたいなものを置きたい(×ソースコードの配下のディレクトリ)でなく、複数のgoのプロジェクトから共通して使いたい。
まあ、こんな感じです。
(人生最初のアイビスペイント+iPadの手書きです)
ソースファイルは、こんな感じです。
include.go
package include // この名前が、mail.goで使われるので覚えておいて下さい
type Person struct { // 先頭大文字
FirstName string // 先頭大文字
Age int // 先頭大文字
}
main.go (これは、src,src2の両方で使っています)
package main
import (
"fmt"
"m/include"
)
func main() {
var mike include.Person // この "include.Person"という変数名が特徴です
mike.FirstName = "Mike" // あとは構造体の属性を持ってくるだけ(先頭大文字を忘れないように)
mike.Age = 20 // 同上
fmt.Println(mike.FirstName, mike.Age) //=> Mike 20
}
で、ここからが重要なんですが、例えばsrcディレクトリの中で実行すると
PS C:\Users\ebata\dummy\go_test2\src> go run .
go: cannot find main module, but found .git/config in C:\Users\ebata
to create a module there, run:
cd ..\..\.. && go mod init
てなことを言われますので、include, src, src2の上のディレクトリで、
go mod init m // "m"でも、"mm"でも、"mmm"でも、かまわん
を実行すると、go.modができます。中身はこれだけです。
go.mod の中に、includeが書き込まれているとか、そういうことはないようです(どうなっているか分かりません)が、とりあえずsrcに移動して、main.goが動きました。