my coredump

自分用の公開メモです。主にプログラムのこととか書くはず。

golangでC言語のincludeみたいにカレントディレクトリのファイルを読み込めないのか?

ちょっとハマったのでメモ。

ちょろっとしたコード書きたいけど長くなってきたからファイル分けたい! ってときにmainからどう呼び出すのが良いのか?

知っている範囲だと、みんな同じパッケージにするかサブディレクトリ作ってサブパッケージみたいにする必要がある。

こんなmain.goがあったとすると、、、

main.go

package main

import (
    "./sub"
)

func main() {
    Foo()
    sub.Bar()
}

パッケージ名の修飾なしで使いたい関数とかはmainパッケージで定義する。

foo.go

package main

import "fmt"

func Foo() {
    fmt.Println("Foo!!!")
}

パッケージを分けたい場合はサブディレクトリを作ってやる必要がある。

sub/bar.go

package sub 

import "fmt"

func Bar() {
    fmt.Println("Bar!!!")
}

必ずサブディレクトリ作ってやらなきゃいけないのが面倒かなーとも思うけどまあこんなもんか…

と思ったらビルド時にもう一つ落とし穴。

go build main.go foo.go

としてやる必要があった。

runの時も同じく。

go run main.go foo.go

barはimportしてるから解決してくれるけどfooは場所が分からないのかな? なんとなくgoツールの作法からはずれそうだから素直にサブディレクトリ切るのがよさそう。

もっとサクッとやる方法ないものか。ちょっとトライアンドエラーしにくい。

まああんまサクってやるのはgolangの守備範囲害なのかな?