在 Go 中对多个返回值进行转换/类型断言的惯用方法
技术问答
350 人阅读
|
0 人回复
|
2023-09-12
|
在 Go 转换多个返回值的常用方法是什么?' G* K w) K3 J8 a% d: r
可以在一行中完成,还是需要使用临时变量,比如我在下面的例子中做的?- k- ], X e# N) ]% C. v9 k
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") } }
$ q, o! q* @. j: r3 H4 E 顺便问一下,casting说到接口,是不是调用了?0 ]( L2 ~0 K8 o' k
i := interface.(int)
7 {- N* B- |8 O, @( d. p: f9 {+ E) [
! t( A1 E& O! x8 g- F 解决方案: # D/ ]0 k$ ]/ N/ a0 Z
你不能一行完成。你的临时变量方法是走路。6 z" H- }9 n, _6 `/ K, i0 z' z
对了,当涉及到界面时,是否称为强制转换?
0 V4 p* K9 Q9 P M8 C0 J7 P' z它实际上被称为类型断言。A型铸造不同的转换是: U# I4 `0 q" U# w8 ]: P
var a intvar b int64a = 5b = int64(a)$ h0 ~' s* e/ w/ S& B
|
|
|
|
|
|