卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章34746本站已运行393

在Go中如何将int转换为包含complex128的泛型类型?

在go中如何将int转换为包含complex128的泛型类型?

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("%vn", f(int64(1), int64(2)))
}

这是从更大的计算中简化而来的。我尝试过使用开关,但我尝试的每一种语法似乎都会遇到这样或那样的阻力。

如何将 ab 与整数相乘?

我尝试使用返回变量类型的开关,例如 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))
}
卓越飞翔博客
上一篇: 有没有办法使用 Golang 客户端库或 REST API 将协作者添加到 Google Sheet?
下一篇: 返回列表
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏