2016-05-18 2 views
-1

ようにするヘルパー関数を適用することができ、私はDummyConnectionにキャストしたいpool.GetConnection戻りinterface{}golang:私は返された引数の1

connection := pool.GetConnection().(*DummyConnection) 

を持っていることを言います。

エラーを返すようにGetConnectionインターフェイスを変更したいと思います。コードは次のようになります:

connectionInterface, err := pool.GetConnection() 
connection := connectionInterface.(*DummyConnection) 

私は不思議に思っていますが、ヘルパー変数の必要性を避けて、これらを1行に含めることはできますか?

+1

可能な重複(http://stackoverflow.com/questions/28227095/go-multiple-value-in-single-value-context) – icza

+0

いいえ、私の質問では、間違いを無視したり、振る舞いをあらかじめ定義したくないのです。返された値の1つに変更を適用したいのですが、解決策は似ています。ヘルパー関数を作成するだけです。申し訳ありません - 私はゴランには新しいです。 – gsf

答えて

3

これらの2つのステートメントを組み合わせることはできません。これは、関数が値のペアを返し、型アサーションを実行する方法を指定する方法がないためです。代入は戻り値と同じように順序付けされているので、代入式が実行されますが、どの値をタイプアサートするかを推測するにはどうしたらよいでしょうか?

Goでコードをあまりにも減らすことはお勧めしません。言語がどのように設計されているかとはまったく一致せず、意図的なものだと私は信じています。哲学は、抽象度があまり高くなく、同じ結果を達成するためのオプションがあまり多くないため、これは読みやすいということです。とにかく、あなたは本当にその型のアサーションで多くの節約をしないだろうし、このような関数呼び出しは、エラー処理のためにいくつかのコード行を追加する必要がある。これはGoの標準です。

-1

何らかの種類のソリューションです。コードを減らさずに、関数のスコープ内の変数を匿名の内部関数に移動することによって減らします。 [行く単一値コンテキスト内の複数の値]の

package main 

import "fmt" 

type t struct{} 

func foo()(interface{},error){ 
    return &t{},nil 
} 

func main() { 
    var myT *t 
    myT, err := func() (*t,error){ 
     i,e:=foo() 
     return i.(*t),e 
    }() 
    fmt.Println(myT,err) 
} 
関連する問題