Maison >développement back-end >Golang >Comment convertir un int en type générique contenant complex128 dans Go ?

Comment convertir un int en type générique contenant complex128 dans Go ?

王林
王林avant
2024-02-09 11:54:101233parcourir

Comment convertir un int en type générique contenant complex128 dans Go ?

L'éditeur php Xiaoxin vous présentera comment convertir un int en un type générique contenant complex128 en langage Go. En langage Go, nous pouvons utiliser des assertions de type pour réaliser cette conversion. L'assertion de type est un moyen de vérifier le type d'une valeur d'interface. Sa syntaxe est val. (Type), où val est la valeur de l'interface et Type est le type affirmé. En utilisant des assertions de type, nous pouvons convertir une valeur de type int en une valeur générique de type complex128 pour obtenir la fonctionnalité de conversion souhaitée. Ensuite, nous présenterons en détail la méthode de mise en œuvre spécifique.

Contenu de la question

Je n'arrive pas à comprendre comment convertir int 转换为包含 complex128 的通用类型。下面是一个示例,除非注释掉 complex128 ou il ne compilera pas :

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

Ceci est simplifié à partir d’un calcul plus large. J'ai essayé d'utiliser des commutateurs, mais chaque syntaxe que j'essaie semble se heurter à une résistance d'une sorte ou d'une autre.

Comment multiplier ab par un entier ?

J'ai essayé d'utiliser un commutateur qui renvoie le type de variable, comme any(c).(type) 但例如如果我有 case complex128: 那么它拒绝允许 complex 内置,因为它不允许返回 v.

Ce qui précède sera compilé sans complex128. complex128 上面的内容将编译。

解决方法

这个可以工作,但需要列出 switch

Solution de contournement🎜🎜Cela fonctionne, mais nécessite de lister chaque type dans l'instruction 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))
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer