2017-05-10 1 views
0

私はGoLangを初めて勉強しましたが、現時点ではコンパイラが特定のコード行を受け入れない理由を忘れました。Golang:intをtime.durationに変換するには

私はダイヤルするときにタイムアウトを作成するために、この作業例を持っている

conn, err := grpc.Dial(*connAddress, 
     grpc.WithInsecure(), 
     grpc.WithBlock(),     // will block till the connection is available 
     grpc.WithTimeout(100*time.Second)) // times out after 100 seconds 

今ハードコードさ100が素敵ではないので、私はそうのように、フラグを介して、そのコマンドラインの変数を作成したいと思います:

connTimeout := flag.Int64("connection-timeout", 100, "give the timeout for dialing connection x") 
... 
    conn, err := grpc.Dial(*connAddress, 
     grpc.WithInsecure(), 
     grpc.WithBlock(), 
     grpc.WithTimeout(*connTimeout*time.Second)) 

しかし、これは、次のコンパイルエラーを与える:

mismatched types int64 and time.Duration

したがって、明らかに、int64フラグ変数を使用して期間を計算することはできませんが、数値はできますか?上記

var timeoutduration = time.Duration(*distributorTimeout) * time.Second 
    // create distributor connection 
    conn, err := grpc.Dial(*connAddress, 
     grpc.WithBlock(), 
     grpc.WithTimeout(timeoutduration)) 

期待どおりに動作するように思われる:

は、最終的に私が最初time.Durationに関連する変数を作成することにより、フラグ変数を使用するための解決策を見つけたダイヤルがあれば、コマンドラインなどのために試みられていますパラメータは与えられていて(デフォルトは100)、接続できなかったというメッセージをスローします。良い。

ただし、int64フラグ変数を直接使用すると時間を計算することはできません。つまり、数値100とint64を含む変数のgolangの違いは何ですか?

+2

これは、質問への答えではなく、 'flag.Int64'の[' flag.Duration'](https://godoc.org/flag#Duration)を使用することを検討してください。 –

+0

こんにちは@CeriseLimónはい、ありがとうございます:私はGolang newbyとして探しているものです:)それはtime.Durationを参照して保存実際に! – Hace

答えて

2

grpc.WithTimeout(100*time.Second)grpc.WithTimeout(*connTimeout*time.Second)ためassignability rulesのない:

後者の式は

  • xを、それらのいずれも満たさない、前者満たすタイプTの値によって型なし定数表現です。

ルール

関連する問題