Home > Backend Development > Golang > How to convert int to generic type containing complex128 in Go?

How to convert int to generic type containing complex128 in Go?

王林
Release: 2024-02-09 11:54:10
forward
1251 people have browsed it

How to convert int to generic type containing complex128 in Go?

php editor Xiaoxin will introduce to you how to convert int into a generic type containing complex128 in Go language. In Go language, we can use type assertions to achieve this conversion. Type assertion is a way to check the type of an interface value. Its syntax is val.(Type), where val is the interface value and Type is the asserted type. By using type assertions, we can convert a value of type int to a generic value of type complex128 to achieve the desired conversion functionality. Next, we will introduce the specific implementation method in detail.

Question content

I can't figure out how to convert int to a generic type containing complex128. Here's an example that won't compile unless complex128 is commented out:

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)))
}
Copy after login

This is simplified from a larger calculation. I've tried using switches, but every syntax I try seems to run into resistance of one kind or another.

How to multiply a and b with integers?

I tried using a switch that returns the variable type like any(c).(type) but for example if I have case complex128: then it refuses to allow complex built-in because it is not allowed to return v.

Without complex128 the above will compile.

Workaround

This will work, but requires listing each type in the switch statement:

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))
}
Copy after login

The above is the detailed content of How to convert int to generic type containing complex128 in Go?. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
source:stackoverflow.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template