2017-12-14 4 views
-3

私はWeb APIを作成しています。GOでローカルパッケージをインポートする方法

サーバーとコントローラを同じファイルmain.goに作りました。

私は別のファイル名model.goを作成しました。ここではPerson構造体を宣言しています。

main.goでモデルをエクスポートできません。

私は実行または構築するたびに、私はこのエラーを取得:FUNC/CONSTをエクスポートして、良いパスを持つファイルにインポートする方法は

can't load package: package .: found packages main 

ありますか? (JavaScriptの仕組みと同じように)。

これは私の木である:

myapp/ 
    --main.go/ 
    --model.go/ 

これは私のインポートです: main.go

package main 

import (
    "encoding/json" 
    "log" 
    "net/http" 

    "./person" 
    "github.com/gorilla/mux" 
) 

model.go

package person 

type Person struct { 
    ID  string `json:"id,omitempty"` 
    Firstname string `json:"firstname,omitempty"` 
    Lastname string `json:"lastname,omitempty"` 
    Address *Address `json:"address,omitempty"` 
} 

var people []Person 
+2

これはパッケージがどのように動作するかではありません。書き方を読んでください。Go codeと_stick_ _to_ _it_(議論はありません)。パッケージ(基本的にはファイルシステムフォルダ全体)と_not_ファイルをインポートします。また、重複してから10日後。 – Volker

答えて

1

同じフォルダ内に同じパッケージ名が必要です。

golangがインポートを処理するとき、すべてのファイルが同じディレクトリの下に全体として読み込まれます。

あなたが提示したコードがある場合、model.goのパッケージ名はmainでなければなりません。

main.goからmodel.goをインポートする必要はありません。

ここで、少し知っていることがあります。 go build/run/installを実行すると、ビルドプロセスを初期化するパラメータとして渡されたファイルのリストが取得されます。

現在のセットアップでは、メインパッケージを構成するすべてのファイルをコマンドラインに渡す必要があります。そうでない場合は、ビルドに失敗した場合は無視されます。プレーンテキストで

、あなたが構築するために複数のソースファイルを避けたい場合は、あなたが初期化することで最小限のコードで、ユニークなmain.goを持つべき将来的には代わりにgo build main.go

go build *.goを行いますあなたが書いているプログラム。結果としてmodel.goの内容は異なるパッケージ(ディレクトリ)内に存在し、import xyzステートメントを介してメインにインポートされます。

最後に、importディレクティブのインポートパスは、現在の作業ディレクトリからの相対パスであってはなりません。それらはすべてGOPATH/srcに基づいています。

+0

インポートパスは相対パスであってもかまいませんが、可能な限り相対パスは使用しないでください。 _EVER!_ – Kaedys

+0

~~メインパッケージでは、大丈夫かもしれませんが、悪い習慣です。また、テストでは、同じフォルダ内で別のパッケージ名が使用されます。 –

+1

テストは同じフォルダ内の異なるパッケージ名を使用することができますが、非常に特定のパターン( 'packagename_test')のみを使用し、ブラックボックステストがホワイトボックステスト(多くの場合、適切なユニットテストを機能的に排除する)よりも有用な場合にのみ使用します。 – Kaedys

関連する問題