1. ホーム
  2. casting

[解決済み] Goで複数の戻り値に対して変換/型アサーションを行うための慣用的な方法

2023-05-30 11:52:50

質問

Goで複数の戻り値をキャストするイディオム的な方法は何ですか?

一行でできますか?それとも、下の例でやったように一時変数を使う必要がありますか?

package main

import "fmt"

func oneRet() interface{} {
    return "Hello"
}

func twoRet() (interface{}, error) {
    return "Hejsan", nil
}

func main() {
    // With one return value, you can simply do this
    str1 := oneRet().(string)
    fmt.Println("String 1: " + str1)

    // It is not as easy with two return values
    //str2, err := twoRet().(string) // Not possible
    // Do I really have to use a temp variable instead?
    temp, err := twoRet()
    str2 := temp.(string)
    fmt.Println("String 2: " + str2 )


    if err != nil {
        panic("unreachable")
    }   
}

ところで、この casting というのは、インターフェイスの場合でしょうか?

i := interface.(int)

どのように解決するのですか?

一行では無理です。 あなたの一時変数のやり方がいい。

ところで、インターフェイスの場合はキャスティングと言うのでしょうか?

実際にはaという 型アサーション . 型 <ストライク キャスト の変換は異なります。

var a int
var b int64

a = 5
b = int64(a)