我想制作一个可以接受任何类似 int 的变量的函数。
例如:
type IntegerType interface {
int
}
func MyFunc(arg IntegerType) {
fmt.Println(arg)
}
这不会编译,因为我不能将接口(interface)继承基于非接口(interface)类型,但这正是我想要做的!
最终目标是这样的:
type Token int
var t Token
t = 3
MyFunc(t)
我如何保证我的参数是一个整数,同时仍然允许整数别名?
最佳答案
How do I guarantee that my argument is an integer, while still allowing integer aliases?
您依赖于类型转换。
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
类型定义接口(interface),因为您可以依靠语言类型转换行为在这些类型的场景中强制执行编译时类型安全。
需要注意的一件事是,这比只有 int 的接口(interface)更容易接受。例如,int64
将转换为 int
,甚至 float
也会使用典型的舍入约定。无效的转换会产生以下错误; 无法将 s(字符串类型)转换为 int 类型
。据我所知,只有 native 数字类型或它们的别名会转换。
关于go - 如何制作一个只允许整数的接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31322541/