私は別のファイルの関数を呼び出す基本的なgoプログラムを作成しようとしていますが、同じパッケージの一部です。ただし、以下を返します。
undefined: NewEmployee
ソースコードは次のとおりです。
main.go
:
package main
func main() {
emp := NewEmployee()
}
employee.go
:
package main
type Employee struct {
name string
age int
}
func NewEmployee() *Employee {
p := &Employee{}
return p
}
func PrintEmployee (p *Employee) {
return "Hello world!"
}
"Goコードの書き方" をお読みください。
GOPATH
で/src
を使用しないでください。パッケージは$GOPATH/src
にあります。
build
またはinstall
の場合、パッケージディレクトリにファイルを置く必要があります。
go run
の場合、すべてのファイルを引数として指定する必要があります。
go run main.go employee.go
ただし、ほとんど常にgo install
またはgo build
を使用する必要があります(go build
はメインでないパッケージで作業するときに混乱を引き起こすため、前者が望ましいです)
GoLandでも同じ問題が発生したため、解決策を見つけました。 Run kind
をFile
からPackage
またはDirectory
に変更する必要があります。 Run/Edit
Configurationsに移動する場合、ドロップダウンからこれを選択できます。
パッケージ~/go/src/a_package
の場合、Package path
はa_package
であり、Directory
は~/go/src/a_package
です。好きなRun kind
を選択できます。
go run
を使用している場合は、go run *.go
を実行します。現在の作業ディレクトリにあるすべてのgoファイルを自動的に検索し、コンパイルしてからメイン関数を実行します。
Golandを使用して別のgoファイルから関数を呼び出したい場合は、[実行]メニューから[構成の編集]オプションを見つけ、実行の種類を[ファイル]から[ディレクトリ]に変更します。すべてのエラーをクリアし、他のgoファイルから関数を呼び出すことができます。
次のいずれかを試すことができます。
メソッド01:プロジェクト名がMyProject
であると仮定します
go build
と入力してEnterキーを押します。./MyProject
と入力してEnterキーを押しますgo build && ./MyProject
と入力すると、両方の手順を一度に実行できます。すべてのgo
ファイルを使用してプロジェクトを適切に実行します。
方法02
go run *.go
と入力してEnterキーを押します。これはexecuteすべてのgo files
になります。
これが誰かに役立つことを願っています。
Go11
で同じ問題に遭遇しました。同じ問題に遭遇した場合に備えて、他の人を助けるためにどのように解決したかを共有したかっただけです。
Goプロジェクトoutside$GOPATH
があったため、このオプションを有効にせずにGO111MODULE=on
を有効にする必要がありました。この問題が発生します。 package
またはdirectory
全体をビルドまたはテストしようとしても、GO111MODULE=on
なしでは解決されません。
ソースフォルダーが/ go/src/blogで構成されている場合(ソースフォルダーの名前がブログであると仮定)。
ファイルを手動でリストしたり、コマンドラインでメソッドを「バッシング」する代わりに、すべてのファイルを同時に実行する必要があります。