2

go チュートリアルでは、次のコードがよく見られます。

a := foo()
b, c := foo()

または実際に私が見ているのは:

m["Answer"] = 48
a := m["Answer"]
v, ok := m["Answer"]

foo() はいくつ定義されていますか?

戻り値の型が 1 つと、戻り値の型が 2 つの 2 つですか?

または、2 つの戻り値の型が定義された 1 つの foo() だけで、魔法のように 1 つの戻り値 ( a := foo()) だけが必要な場合、別の戻り値は省略されますか?

私は試した

package main

func main() {
    a := foo()
    a = 1
}

func foo() (x, y int) {
    x = 1
    y = 2
    return
}

func foo() (y int) {
    y = 2
    return
}

しかし、エラーメッセージが表示されましたfoo redeclared in this block

4

2 に答える 2

7

一部の組み込み操作は、単一および複数の戻り値モード (マップからの読み取り、型アサーション、またはループでの range キーワードの使用など) をサポートしていますが、この機能はユーザー定義関数では使用できません。

戻り値が異なる 2 つのバージョンの関数が必要な場合は、それらに異なる名前を付ける必要があります。

于 2013-10-31T05:38:08.907 に答える