Heim >Backend-Entwicklung >Golang >Variable Parameterfunktion in Golang

Variable Parameterfunktion in Golang

王林
王林nach vorne
2024-02-12 15:42:06567Durchsuche

Variable Parameterfunktion in Golang

Frageninhalt

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

Bei der Verwendung variabler Funktionen in der Go-Sprache ist ein Problem aufgetreten.

Bei der Übergabe einer Struktur, die eine Schnittstelle als Argument implementiert, ist eine separate Deklaration möglich, aber können Sie mir sagen, warum dies nicht möglich ist, wenn sie über ... übergeben wird?

Im folgenden Code ist ein Fehler aufgetreten.

variadicexample2(impls...)

Ich habe diesen Artikel gelesen

Wie übergebe ich Schnittstellenparameter an variadische Funktionen in Golang?

var impls []ISum
impls = append(impls, impl1)
impls = append(impls, impl1)
variadicExample2(impls...)

Ich habe festgestellt, dass der obige Code in Ordnung ist.

Lösung

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

Aber Sie können dies tun:

impls := []ISum{
        SumImpl{
            Num: 1,
        },
        SumImpl{
            Num: 2,
        },
    }

Das obige ist der detaillierte Inhalt vonVariable Parameterfunktion in Golang. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen