LoginSignup
43
17

More than 3 years have passed since last update.

Go言語でmainパッケージに複数ファイルある場合にハマった(初学者向け)

Last updated at Posted at 2018-09-10

main.goの1ファイルから卒業するため、
とりあえずファイルを分けたらハマったのでメモ

前提としてプロジェクトがこうなっているとします。

.
├── main.go
└── foo.go

各ファイルの中身は以下の通り

main.go

package main

func main() {
    Bar()
}

foo.go

package main

import "fmt"

func Bar() {
    fmt.Println("hello main package")
}

とてもシンプルですね。

それでは実行してみましょう! hello main package と出力されるはずです!

$ go run main.go

./main.go:4:2: undefined: Bar

おや?なにかエラーが・・・

どうやらfoo.goが認識されていないようです。

すごく基本的な部分なのですが実行の仕方がまずかったようです。

正しく動くパターンはこちら

$ go run *.go

# もしくはすべてのファイルを渡す
$ go run main.go foo.go

こうしないと本当にmain.goしか対象としてくれないため、

別ファイルで定義されたものが参照できなかったということです。

おしまい。

追記

今ではgo run . でも実行することができます :smiley:

43
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
43
17