Maison > développement back-end > Golang > Fonction de paramètre variable dans Golang

Fonction de paramètre variable dans Golang

王林
Libérer: 2024-02-12 15:42:06
avant
565 Les gens l'ont consulté

Fonction de paramètre variable dans Golang

Contenu des questions

package main

import (
    "fmt"
)

type isum interface {
    sum() int
}

type sumimpl struct {
    num int
}

func (s sumimpl) sum() int {
    return s.num
}

func main() {

    nums := []int{1, 2}
    variadicexample1(nums...)

    impl1 := sumimpl{num: 1}
    impl2 := sumimpl{num: 2}

    variadicexample2(impl1, impl2)

    impls := []sumimpl{
        {
            num: 1,
        },
        {
            num: 2,
        },
    }
    variadicexample2(impls...)
}

func variadicexample1(nums ...int) {
    fmt.print(nums, " ")
    total := 0
    for _, num := range nums {
        total += num
    }
    fmt.println(total)
}

func variadicexample2(nums ...isum) {

    fmt.print(nums, " ")
    total := 0
    for _, num := range nums {
        total += num.sum()
    }
    fmt.println(total)
}
Copier après la connexion

J'ai rencontré un problème lors de l'utilisation de fonctions variables en langage Go.

Lors du passage d'une structure implémentant une interface en argument, une déclaration distincte est possible, mais pouvez-vous me dire pourquoi cela n'est pas possible lorsqu'elle est passée via... ?

Il y a une erreur dans le code ci-dessous.

variadicexample2(impls...)
Copier après la connexion

J'ai lu cet article

Comment passer des paramètres d'interface aux fonctions variadiques dans Golang ?

var impls []ISum
impls = append(impls, impl1)
impls = append(impls, impl1)
variadicExample2(impls...)
Copier après la connexion

J'ai trouvé que le code ci-dessus est correct.

Solution

sumimpl 切片不是 isum 切片。一个是结构体切片,另一个是接口切片。这就是为什么您无法将其传递给需要 []isum 的函数(即 ...isum).

Mais vous pouvez faire ceci :

impls := []ISum{
        SumImpl{
            Num: 1,
        },
        SumImpl{
            Num: 2,
        },
    }
Copier après la connexion

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!

Étiquettes associées:
source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal