2015-11-24 24 views
5
package main 

import (
    "fmt" 
    "bufio" 
    "os" 
) 

func main() { 
    fmt.Print("LOADED!\n") 
    fmt.Print("insert y value here: ") 
    inputY := bufio.NewScanner(os.Stdin) 
    inputY.Scan() 
    inputXfunc() 
} 

func inputXfunc() { 
    fmt.Print("insert x value here: ") 
    inputX := bufio.NewScanner(os.Stdin) 
    inputX.Scan() 
    slope() 
} 

func slope() { 
    fmt.Println(inputX.Text()) 
} 

このプログラムを実行するたびに、inputXとinputYは識別されません。どのようにして、このプログラムはすべての関数がアクセス可能な変数を使用するようにしますか?私がしたいのはinputYで入力Yを外して結果を出力することですグローバル変数を作成するにはどうすればいいですか?

+3

本当に大域変数はGoには存在しません。なぜなら、ここには使用しないでください。必要なのは 'func slope(inputX io.Scanner)'です。そして 'inputXfunc()'でそれを呼び出すと、 'inputX'を渡すべきです。 – evanmcdonnal

+2

上記のプログラム内のすべてのメソッドからアクセス可能な変数を、それらの変数に渡す必要がないようにしたい場合は、メソッドの外側のメイン変数の上に宣言するだけで、この場合はグローバルな 'パッケージスコープ'になりますあなたは 'main'パッケージに含まれているからです。 – evanmcdonnal

+0

inputX io.Scannerは私のコードで動作しません。 "io"に定義されていないエラーが発生しました – liam

答えて

7

私は答えとして私のコメントを入れています...私はこれに対して推奨しますが、パッケージスコープで変数を宣言するだけです。それはこのようになります。

package main 

import (
    "fmt" 
    "bufio" 
    "os" 
) 

var inputX io.Scanner 

func main() { 
    fmt.Print("LOADED!\n") 
    fmt.Print("insert y value here: ") 
    inputY := bufio.NewScanner(os.Stdin) 
    inputY.Scan() 
    inputXfunc() 
} 

func inputXfunc() { 
    fmt.Print("insert x value here: ") 
    inputX = bufio.NewScanner(os.Stdin) // get rid of assignment initilize short hand here 
    inputX.Scan() 
    slope() 
} 

func slope() { 
    fmt.Println(inputX.Text()) 
} 

しかし、より良い選択肢は、引数を受け入れ、必要に応じて値を渡すようにメソッド定義を変更することです。これはそうそうです。

func slope(inputX bufio.Scanner) { 
     fmt.Println(inputX.Text()) 
    } 

slope(myInputWhichIsOfTypeIOScanner) 
あなたは init()関数を作成し、OSの環境変数を設定する godotenvのようなパッケージを使用して main.goで、それを利用することができ
+0

このコードは私にとってはまったく機能しませんでした。私は、コードのあるセクションから別の関数に入力を渡す方法を探しています。確かにそこにそれを行う方法があります。 – liam

+1

@liamはい、それは2番目の例で概説されており、理解してプログラムに適用しても問題ありません。私は 'bufio.Scanner'の代わりに' io.Scanner'を持っていたという間違いがありましたが、それは単なる例です。あなたのプログラムにそれを適用する際に、あなたが 'io'パッケージをインポートしていないことが明らかになり、' bufio'が 'NewScanner'と呼ばれるものです。 – evanmcdonnal

1

global.goファイル

package global 

import (
    "log" 
    "os" 
    "strconv" 

    "github.com/joho/godotenv" 
) 

var (
    SERVER_HOST  string 
    SERVER_PORT  int 
) 

func InitConfig() { 

    err := godotenv.Load() 
    if err != nil { 
     log.Fatal("Error loading .env file") 
    } 

    SERVER_HOST = os.Getenv("SERVER_HOST") 
    SERVER_PORT, _ = strconv.Atoi(os.Getenv("SERVER_PORT")) 
} 

main.goファイルを

package main 

import(
    G "path/to/config" 
) 

func init() { 
    G.InitConfig() 
} 

func main() { 
    G.Init() 
} 

変数を使用するには他のパッケージに "G"パッケージをインポートする必要がありますが、Go(または他の言語)のグローバル変数に対処する最善の方法は環境変数を使用することです。

関連する問題