私はgolangにかなり慣れていないので、これは簡単な答えでしょうが、運のないすべての場所を検索してみました。
別の.goパッケージ/ファイルでmain.goで宣言/初期化されたグローバル変数にアクセスするにはどうすればよいですか?変数が未定義であることを教え続けます(グローバル変数が悪いことは知っていますが、これはタイムスタンプとしてのみ使用されます)
main.goで
var StartTime = time.Now()
func main(){...}
別の.goファイルでStartTimeにアクセスしようとするが、StartTimeが未定義のままになる
代わりにstarttime変数を「注入」します。そうしないと、パッケージ間の循環依存関係が発生します。
main.go
var StartTime = time.Now()
func main() {
otherPackage.StartTime = StartTime
}
otherpackage.go
var StartTime time.Time
コードを含むファイルdif.go
を作成します。
package dif
import (
"time"
)
var StartTime = time.Now()
main.go
を作成するフォルダーの外で、大丈夫です!
package main
import (
dif "./dif"
"fmt"
)
func main() {
fmt.Println(dif.StartTime)
}
出力:
2016-01-27 21:56:47.729019925 +0800 CST
ファイルのディレクトリ構造:
folder
main.go
dif
dif.go
できます!
一般的なインポート方法を使用することをお勧めします。
最初に「相対インポート」と呼ばれる方法について説明します。おそらくこの方法でエラーが発生します。
次に、インポートの一般的な方法について説明します。
最初:
Goバージョン1.12以降では、インポートファイルと何か変更に関するいくつかの新しいヒントがあります。
1-ファイルを別のフォルダに配置する必要があります。たとえば、「model」フォルダにファイルを作成します。ファイル名は「example.go」です
2-ファイルをインポートするときは大文字を使用する必要があります!
3-別のファイルにインポートする変数、構造、および関数に大文字を使用する
注意:main.goを別のファイルにインポートする方法はありません。
ファイルディレクトリ:
root
|_____main.go
|_____model
|_____example.go
これはexample.goです:
package model
import (
"time"
)
var StartTime = time.Now()
これはmain.goであり、ファイルをインポートする場合は大文字を使用する必要があります。 「Mod」は大文字で始まります
package main
import (
Mod "./model"
"fmt"
)
func main() {
fmt.Println(Mod.StartTime)
}
注意!!!
注:このタイプのインポートはお勧めしません!
2番目:
(通常のインポート)
ファイルをインポートするより良い方法は次のとおりです。
構造は次のようになります。
root
|_____github.com
|_________Your-account-name-in-github
| |__________Your-project-name
| |________main.go
| |________handlers
| |________models
|
|_________gorilla
|__________sessions
これは一例です:
package main
import (
"github.com/gorilla/sessions"
)
func main(){
//you can use sessions here
}
必要なすべての場所に「github.com/gorilla/sessions」をインポートできます...インポートするだけです。