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) }
Saya menghadapi masalah apabila menggunakan fungsi pembolehubah dalam bahasa go.
Apabila menghantar struct yang melaksanakan antara muka sebagai hujah, pengisytiharan berasingan adalah mungkin, tetapi bolehkah anda beritahu saya mengapa ini tidak mungkin apabila ia diluluskan melalui... ?
Terdapat ralat dalam kod di bawah.
variadicexample2(impls...)
Saya membaca artikel ini
Bagaimana untuk menghantar parameter antara muka kepada fungsi variadic dalam golang?
var impls []ISum impls = append(impls, impl1) impls = append(impls, impl1) variadicExample2(impls...)
Saya dapati kod di atas adalah ok.
sumimpl
切片不是 isum
切片。一个是结构体切片,另一个是接口切片。这就是为什么您无法将其传递给需要 []isum
的函数(即 ...isum
).
Tetapi anda boleh melakukan ini:
impls := []ISum{ SumImpl{ Num: 1, }, SumImpl{ Num: 2, }, }
Atas ialah kandungan terperinci Fungsi parameter berubah dalam golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!