php小编小新将为大家介绍在Go语言中如何将int转换为包含complex128的泛型类型。在Go语言中,我们可以使用类型断言来实现这个转换。类型断言是一种检查接口值的类型的方式,它的语法形式为val.(Type),其中val是接口值,Type是断言的类型。通过使用类型断言,我们可以将int类型的值转换为complex128类型的泛型值,从而实现所需的转换功能。接下来,我们将详细介绍具体的实现方法。
问题内容
我无法弄清楚如何将 int
转换为包含 complex128
的通用类型。下面是一个示例,除非注释掉 complex128
,否则不会编译:
package main
import "fmt"
type val interface {
int64 | float64 | complex128
}
func f[V val](a, b V) (c V) {
q := calc()
return a * b * V(q)
}
func calc() int {
// lengthy calculation that returns an int
return 1
}
func main() {
fmt.Printf("%v\n", f(int64(1), int64(2)))
}
这是从更大的计算中简化而来的。我尝试过使用开关,但我尝试的每一种语法似乎都会遇到这样或那样的阻力。
如何将 a
和 b
与整数相乘?
我尝试使用返回变量类型的开关,例如 any(c).(type)
但例如如果我有 case complex128:
那么它拒绝允许 complex
内置,因为它不允许返回 v
。
如果没有 complex128
上面的内容将编译。
解决方法
这个可以工作,但需要列出 switch
语句中的每种类型:
func f[V val](a, b V) (c V) {
q := calc()
var temp any
switch any(c).(type) {
case complex128:
temp = complex(float64(q), 0)
case int64:
temp = int64(q)
default:
temp = float64(q)
}
return a * b * (temp.(V))
}
以上就是在Go中如何将int转换为包含complex128的泛型类型?的详细内容,更多请关注编程网其它相关文章!