web-dev-qa-db-ja.com

golang「未定義」関数が別のファイルで宣言されていますか?

私は別のファイルの関数を呼び出す基本的な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!"
}
99
Juan M

"Goコードの書き方" をお読みください。

GOPATH/srcを使用しないでください。パッケージは$GOPATH/srcにあります。

buildまたはinstallの場合、パッケージディレクトリにファイルを置く必要があります。

go runの場合、すべてのファイルを引数として指定する必要があります。

go run main.go employee.go

ただし、ほとんど常にgo installまたはgo buildを使用する必要があります(go buildはメインでないパッケージで作業するときに混乱を引き起こすため、前者が望ましいです)

126
JimB

GoLandでも同じ問題が発生したため、解決策を見つけました。 Run kindFileからPackageまたはDirectoryに変更する必要があります。 Run/Edit Configurationsに移動する場合、ドロップダウンからこれを選択できます。

パッケージ~/go/src/a_packageの場合、Package patha_packageであり、Directory~/go/src/a_packageです。好きなRun kindを選択できます。

38

go runを使用している場合は、go run *.goを実行します。現在の作業ディレクトリにあるすべてのgoファイルを自動的に検索し、コンパイルしてからメイン関数を実行します。

5
Paul Berg

Golandを使用して別のgoファイルから関数を呼び出したい場合は、[実行]メニューから[構成の編集]オプションを見つけ、実行の種類を[ファイル]から[ディレクトリ]に変更します。すべてのエラーをクリアし、他のgoファイルから関数を呼び出すことができます。

4
Puneet Tokhi

次のいずれかを試すことができます。

メソッド01:プロジェクト名がMyProjectであると仮定します

  • パスに移動し、go buildと入力してEnterキーを押します。
  • プロジェクト名( "MyProject")として実行可能ファイルが作成されます
  • 次に、端末で./MyProjectと入力してEnterキーを押します

go build && ./MyProjectと入力すると、両方の手順を一度に実行できます。すべてのgoファイルを使用してプロジェクトを適切に実行します。

方法02

go run *.goと入力してEnterキーを押します。これはexecuteすべてのgo filesになります。

これが誰かに役立つことを願っています。

4
Chanaka Caldera

Go11で同じ問題に遭遇しました。同じ問題に遭遇した場合に備えて、他の人を助けるためにどのように解決したかを共有したかっただけです。

Goプロジェクトoutside$GOPATHがあったため、このオプションを有効にせずにGO111MODULE=onを有効にする必要がありました。この問題が発生します。 packageまたはdirectory全体をビルドまたはテストしようとしても、GO111MODULE=onなしでは解決されません。

0
msoliman

ソースフォルダーが/ go/src/blogで構成されている場合(ソースフォルダーの名前がブログであると仮定)。

  1. cd/go/src/blog ...(パッケージがあるフォルダー内のcd)
  2. インストールしてください
  3. ブログ

ファイルを手動でリストしたり、コマンドラインでメソッドを「バッシング」する代わりに、すべてのファイルを同時に実行する必要があります。

0
Druhin Bala