Heim > Artikel > Backend-Entwicklung > Variable Parameterfunktion in Golang
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.
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!