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) }
Go 言語で変数関数を使用するときに問題が発生しました。
インターフェイスを実装した構造体をパラメータとして渡す場合は別途宣言が可能ですが、経由で渡す場合はなぜできないのか教えていただけますか?
次のコードでエラーが発生しました。
リーリーこの記事を読みました
golang でインターフェイス パラメーターを可変個引数関数に渡すにはどうすればよいですか?
リーリー上記のコードは問題ないことがわかりました。
sumimpl
スライスは isum
スライスではありません。 1 つは構造スライスで、もう 1 つはインターフェイス スライスです。そのため、[]isum
(つまり、...isum
) を期待する関数にそれを渡すことはできません。
しかし、これを行うこともできます:
リーリー以上がgolangの可変パラメータ関数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。