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

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

王林
王林forward
2024-02-09 11:54:101204browse

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

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

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!

Statement:
This article is reproduced at:stackoverflow.com. If there is any infringement, please contact admin@php.cn delete