107

私は3つのファイルで構成され、すべて同じパッケージ(メイン)に属する小さなプログラムを持っています。しかし、私が行うとgo build main.go、ビルドは成功しません。1つのファイル(main.go)だけの場合、すべてが正常に機能しました。

コードを分離するために少し努力したので、コンパイラは、main.goこれら2つの他のファイル(main.goと同じディレクトリにある)から取り出されて入れられたものを見つけることができないようです。これによりundefined 'type'エラーが発生します。

複数のファイルで構成されるこのプログラムをコンパイルするにはどうすればよいですか?

4

7 に答える 7

93

新しい方法(推奨):

この答えを見てください

古い方法:

myprogというプログラムを書いているとしましょう:

このようなディレクトリにすべてのファイルを配置します

myproject/go/src/myprog/xxx.go

次に、myproject/goGOPATHに追加します

そして実行します

go install myprog

このようにして、必要に応じてmyproject / go/srcに他のパッケージやプログラムを追加できます。

参照: http: //golang.org/doc/code.html

(このドキュメントは、初心者には常に見逃されており、最初はよく理解されていません。GoチームIMOの最大の注目を集める必要があります)

于 2012-05-31T17:43:19.840 に答える
70

main.goたとえば、からコードを分離する場合は、more.goそのファイルを//にも渡すgo buildだけです。go rungo install

したがって、以前に実行した場合

go build main.go

あなたは今単に

go build main.go more.go

詳細情報として:

go build --help

状態:

引数が.goファイルのリストである場合、buildはそれらを単一のパッケージを指定するソースファイルのリストとして扱います。


とは、最初の2つの状態が引数としてパッケージ名を期待しているのに対し、後者はgoファイルgo buildを期待していることに注意してgo installください。ただし、最初の2つは、goinstallと同様にgoファイルも受け入れます。go run

疑問に思っている場合:ビルドはbuildパッケージ/ファイルだけinstallを作成し、GOPATHでオブジェクトとバイナリファイルを生成しrun、プログラムをコンパイルして実行します。

于 2012-06-03T16:46:58.350 に答える
38

Go 1.11以降では、GOPATHは推奨されなくなりました。新しい方法は、Goモジュールを使用することです。

あなたがというプログラムを書いているとしましょうsimple

  1. ディレクトリを作成します。

    mkdir simple
    cd simple
    
  2. 新しいモジュールを作成します。

    go mod init github.com/username/simple
    # Here, the module name is: github.com/username/simple.
    # You're free to choose any module name.
    # It doesn't matter as long as it's unique.
    # It's better to be a URL: so it can be go-gettable.
    
  3. すべてのファイルをそのディレクトリに置きます。

  4. 最後に、以下を実行します。

    go run .
    
  5. または、次のようにビルドして実行可能プログラムを作成することもできます。

    go build .
    
    # then:
    ./simple     # if you're on xnix
    
    # or, just:
    simple       # if you're on Windows
    

詳細については、こちらをお読みください

Goには、1.11以降、ここで提案されているバージョン管理されたモジュールのサポートが含まれています。最初のプロトタイプvgoは2018年2月に発表されました。2018年7月、バージョン管理されたモジュールがメインのGoリポジトリに到着しました。Go 1.14では、モジュールサポートは本番環境で使用できる状態であると見なされ、すべてのユーザーは他の依存関係管理システムからモジュールに移行することをお勧めします。

于 2020-05-14T09:25:39.143 に答える
32

実行することもできます

go build

プロジェクトフォルダ内myproject/go / src / myprog

次に、入力するだけです

./myprog

アプリを実行するには

于 2014-12-08T18:43:11.293 に答える
11

プロジェクトの構造によって異なります。しかし、最も簡単なのは次のとおりです。

go build -o ./myproject ./...

次に、を実行し./myprojectます。

プロジェクト構造が次のようになっているとします

- hello
|- main.go

次に、プロジェクトディレクトリに移動して実行します

go build -o ./myproject

次に./myproject、シェルで実行します。

また

# most easiest; builds and run simultaneously
go run main.go

メインファイルが次のようなサブディレクトリにネストされているとします。cmd

- hello
|- cmd
 |- main.go

その後、実行します

go run cmd/main.go
于 2019-01-26T05:26:06.107 に答える
8

使用できます

go build *.go 
go run *.go

両方とも動作しますあなたが使用することもできます

go build .
go run .
于 2019-04-16T04:44:38.210 に答える
3

うん!それは非常に簡単であり、そこでパッケージ戦略が役立ちます。私の知るには3つの方法があります。フォルダ構造:

GOPATH / src / github.com/ abc / myproject / adapter / main.go pkg1 pkg2警告:アダプターにはパッケージmainのみとsunディレクトリを含めることができます

  1. 「アダプタ」フォルダに移動します。走る:
    go build main.go
  1. 「アダプタ」フォルダに移動します。走る:
    go build main.go
  1. GOPATH / srcに移動し、パッケージmainへの相対パスを認識します。ここでは「myproject/adapter」です。走る:
    go build myproject/adapter

exeファイルは現在のディレクトリに作成されます。

于 2019-06-25T16:05:20.803 に答える