我想不出如何将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)))
}

这是从一个大得多的计算中简化出来的.我try 使用switch ,但我try 的每个语法似乎都遇到了这样或那样的阻力.

如何将ab与一个整数相乘?

我曾try 在返回变量的类型上使用switch ,如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相关问答推荐

有没有更简单的方法在Go中编写这个逻辑?

理解Golang并发:缓冲通道的意外行为

Go在使用HTTP代理时如何处理DNS请求?

一种基于时间的Golang函数节制器

在Mac中使用uname获取处理器体系 struct 时,在为AMD64构建Go二进制时出现错误结果

无法使用exec从管道中读取.Go中的命令

go-chi: 接受带有反斜杠的 url 路径参数

Go 中带有回调的 MiniDumpWriteDump

Golang telegram 机器人

启动套接字服务器会干扰 gRPC/http 客户端服务器通信 Golang

在golang中以JSON格式获取xwwwformurlencoded请求的嵌套键值对

使用goqu无法获取响应

为什么 net/http 不遵守超过 30 秒的超时持续时间?

闭包所处的环境范围是什么?

切片到数组指针的转换

Golang grpc go.mod 问题

Golang BigInt 部门

(如何)我可以基于接口抽象地实现Stringer吗?

关于GO的几个问题

Go http标准库中的内存泄漏?