在 Go 中对多个返回值进行转换/类型断言的惯用方法
技术问答
256 人阅读
|
0 人回复
|
2023-09-12
|
在 Go 转换多个返回值的常用方法是什么?
1 S; `" r; A7 U可以在一行中完成,还是需要使用临时变量,比如我在下面的例子中做的?: M8 s# J @9 ?- Y+ |
package mainimport "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: " str / 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") } }4 z4 Q1 C& L( E/ T3 g, G: {
顺便问一下,casting说到接口,是不是调用了?$ N/ w6 Y1 K7 S5 W+ Z
i := interface.(int)
) }: Y8 C, v* W+ Q - E7 b7 D' n1 J/ T5 k
解决方案:
0 R+ }7 Y6 p/ ~( B/ G5 C) _ 你不能一行完成。你的临时变量方法是走路。
3 A( ^! B$ v( W$ T对了,当涉及到界面时,是否称为强制转换?# c, R" Z9 _# Z: }7 T
它实际上被称为类型断言。A型铸造不同的转换是:
, @, W$ J- h) ]( X8 kvar a intvar b int64a = 5b = int64(a)
. K7 m# G7 i: e3 _$ t |
|
|
|
|
|