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.
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))) }
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.
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)) }
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!