web-dev-qa-db-ja.com

グローバル変数にアクセスする方法

私はgolangにかなり慣れていないので、これは簡単な答えでしょうが、運のないすべての場所を検索してみました。

別の.goパッケージ/ファイルでmain.goで宣言/初期化されたグローバル変数にアクセスするにはどうすればよいですか?変数が未定義であることを教え続けます(グローバル変数が悪いことは知っていますが、これはタイムスタンプとしてのみ使用されます)

main.goで

var StartTime = time.Now()
func main(){...}

別の.goファイルでStartTimeにアクセスしようとするが、StartTimeが未定義のままになる

39
Nighthee

代わりにstarttime変数を「注入」します。そうしないと、パッケージ間の循環依存関係が発生します。

main.go

var StartTime = time.Now()
func main() {
   otherPackage.StartTime = StartTime
}

otherpackage.go

var StartTime time.Time
61
olif

コードを含むファイル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

できます!

7
joy miao

一般的なインポート方法を使用することをお勧めします。

最初に「相対インポート」と呼ばれる方法について説明します。おそらくこの方法でエラーが発生します。

次に、インポートの一般的な方法について説明します。

最初:

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」をインポートできます...インポートするだけです。

1
raskul