我是golang的新手,所以如果这个问题太天真,请道歉.环顾四周,但找不到我的基本问题的答案.
假设我有一个具体的结构和方法,如下所示.
type MyData struct{
field1 string
field2 int
}
func(a MyData) OperatorOnString() string{
return a.field1.(string)
}
func(a MyData) OperatorOnInt() int{
return a.field2.(int)
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,我可以输入强制转换而不是执行断言吗?从我到目前为止所学到的是,断言用于接口类型的数据.但在这种情况下,我有具体的类型.我还应该使用断言还是可以做类似的事情return int(a.field2).我知道这个例子很简单,但我感到困惑的一点是何时在两种转换类型之间使用.或者这里涉及一些golang惯用语?
谢谢
zzz*_*zzz 11
首先,类型断言只能在接口上使用:
对于
x接口类型和类型T的表达式,主表达式
x.(T)
Run Code Online (Sandbox Code Playgroud)
断言
x不是nil并且存储的值x是typeT.该表示法x.(T)称为类型断言.
但是你将它应用于非接口类型字段(int和string).这让编译器不高兴.
其次,如果T要从方法/函数返回类型,则返回类型的表达式总是足够的T,您的字段已经恰好是.那么正确的代码很简单:
package main
import "fmt"
type MyData struct {
field1 string
field2 int
}
func (a MyData) OperatorOnString() string {
return a.field1
}
func (a MyData) OperatorOnInt() int {
return a.field2
}
func main() {
a := MyData{"foo", 42}
fmt.Println(a.OperatorOnString(), a.OperatorOnInt())
}
Run Code Online (Sandbox Code Playgroud)
输出:
foo 42
Run Code Online (Sandbox Code Playgroud)