golangの変数パラメータ

王林
リリース: 2023-05-21 22:56:06
オリジナル
502 人が閲覧しました

Golang は、近年よく話題になっているプログラミング言語で、そのシンプルさ、効率性、同時プログラミングのサポートにより、多くの開発者に選ばれています。 Golang では、可変パラメータ関数は非常に重要なプログラミング モデルであるため、この記事では Golang の可変パラメータ関数について詳しく説明します。

1. Golang における可変パラメータ関数の定義

Golang では、可変パラメータ関数は可変パラメータ関数とも呼ばれ、関数は任意の数のパラメータを受け入れることができます。 Golang の可変パラメーター関数は、パラメーターの型の前に省略記号「...」を追加することで定義されます。例:

func funcName(args ...type) return_type {}

上記の関数定義では、args パラメータは不定パラメータであり、任意の数の type パラメータを受け取ることができます。

2. Golang での可変パラメーター関数の使用

Golang では、可変パラメーター関数の使用は非常に柔軟です。これは、任意の数のパラメーターを受け取る必要がある関数を処理するために使用でき、また、他の関数の機能を拡張するためにも使用できます。

  1. 不定パラメータ関数を使用して複数のパラメータを受け取る

一般的な使用シナリオは、関数を定義するときに受け取る必要があるパラメータの数がわからない場合に、不定のパラメータを使用できる関数を処理します。たとえば、次の関数 sum は、任意の数の int 型パラメータを受け入れ、それらの合計を返すことができます。

func sum(args ...int) int {

var total int
for _, v := range args {
    total += v
}
return total
ログイン後にコピー

}

sum 関数を使用する場合、任意の数の int 型パラメータを渡すことができます。

sum(1, 2, 3) // 戻り値: 6
sum(1, 2, 3, 4, 5) // 戻り値: 15

  1. 他の関数を展開する 関数

もう 1 つの一般的な使用シナリオは、元の関数の機能を維持しながらその機能を拡張することです。たとえば、次の関数 print は、関数のパラメータを出力する前に関数名とパラメータの合計数を出力するように、任意の関数の出力機能を拡張できます。

func print(fn func(...interface{}) (int, error)) func(...interface{}) (int, error) {

return func(args ...interface{}) (int, error) {
    name := runtime.FuncForPC(reflect.ValueOf(fn).Pointer()).Name() // 获取函数名称
    fmt.Printf("Function %s got %d args: ", name, len(args)) // 打印函数名和参数个数
    return fn(args...)
}
ログイン後にコピー

}

print 関数を使用する場合、展開する必要がある関数をパラメータとして渡すだけです:

func hello(name string, age int) {

fmt.Printf("Hello, my name is %s and I'm %d years old.", name, age)
ログイン後にコピー

}

print(hello)("John", 25)
// 出力: 関数 main.hello は 2 つの引数を取得しました: こんにちは、私の名前はジョンで、25 歳です。

Above この例では、print 関数はパラメーターとして可変個引数関数を受け取り、新しい可変個引数関数を返して元の関数の機能を拡張します。

3. Golang の不定引数関数に関する注意事項

Golang の不定引数関数を使用する場合は、次の点に注意する必要があります。関数 変数パラメータは 1 つだけです。

  1. Golang は、複数の変数パラメータを持つ関数定義をサポートしていません。たとえば、次の関数はコンパイル エラーを引き起こします:
func test(a ... int, b ...string) {}

変数パラメータは関数パラメータ リストの最後のパラメータである必要があります

  1. 関数が定義されている場合、変数パラメータはパラメータ リストの最後のパラメータである必要があります。たとえば、次の関数定義は無効です:
func test(a ...int, b string) {}

可変パラメータ関数がパラメータを受け取るスライスタイプが使用できない場合

    ##可変パラメータ関数内では、パラメータをスライスタイプに直接変換することはできません。スライスを使用する必要がある場合は、他の関数にパラメータを渡すことで使用できます。
  1. func slideFunc(args ...int) {
slice := make([]int, 0)
for _, v := range args {
    slice = append(slice, v)
}
// 使用slice
ログイン後にコピー

}

上記Golangの変数パラメータです。関数の詳細な説明です。可変引数関数を使用すると、不確実な数の関数パラメータをより柔軟に処理でき、より効率的で洗練されたコードを実現できます。

以上がgolangの変数パラメータの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!