我想创建一个可以采用任何类似int的变量的函数。
例如:
type IntegerType interface {
int
}
func MyFunc(arg IntegerType) {
fmt.Println(arg)
}
这不会编译因为我不能在非接口类型上建立接口继承,但这正是我想要做的!
最终目标是:
type Token int
var t Token
t = 3
MyFunc(t)
我如何保证我的参数是一个整数,同时仍然允许整数别名?
答案 0 :(得分:2)
我如何保证我的参数是一个整数,同时仍然允许整数别名?
您依赖于类型转换。
func MyFunc(arg int) {
fmt.Println(arg)
}
type Token int
var t Token
t = 3
MyFunc(int(t))
s := "This is a string, obviously"
MyFunc(int(s)) // throws a compiler error
实际上不需要为类型int
定义接口,因为您可以依赖语言类型转换行为来在这些类型的场景中强制执行编译时类型安全。
有一点需要注意的是,这比仅使用int的界面更接受。例如,int64
将使用典型的舍入约定转换为int
,甚至float
。无效的转化会产生以下错误; cannot convert s (type string) to type int
。据我所知,只有原生数字类型或别名才能转换。