ホームページ  >  記事  >  バックエンド開発  >  Go言語の不定パラメータとは何ですか?

Go言語の不定パラメータとは何ですか?

青灯夜游
青灯夜游オリジナル
2023-01-17 15:33:552078ブラウズ

不定パラメータは、関数によって渡されるパラメータの数が不定であることを意味します。不定パラメータ宣言では、「param...type」という構文形式が使用されます。不定パラメータの特性: 1. すべての不定パラメータの型は同じである必要があります; 2. 不定パラメータは関数の最後のパラメータである必要があります; 3. 不定パラメータは関数本体のスライスに相当し、関数の操作はスライスは不定引数の演算にも適している; 4. スライスは不定引数に引数として渡すことができ、スライス名の後に「…」を付ける必要がある; 5. 仮引数が不定引数である関数の種類が異なる仮パラメータがスライスである関数のものから。

Go言語の不定パラメータとは何ですか?

このチュートリアルの動作環境: Windows 7 システム、GO バージョン 1.18、Dell G3 コンピューター。

不定パラメータとは

不定パラメータとは、関数によって渡されるパラメータの数が不定であることを意味します。

package main

import (
    "fmt"
)

/*
不定参数函数
*/
func Add(a int, args ...int) (result int) {
    result += a
    for _, arg := range args {
        result += arg
    }
    return
}

func main() {
    fmt.Println(Add(1, 2, 3, 4, 5, 6, 7, 8, 9, 10))
}

Go 関数は、不定の数の仮パラメータをサポートします。不定パラメータ宣言では、param...type

の構文形式が使用されます。不定パラメータには次のものが含まれます。特性:

  • ①すべての変数パラメータのタイプは同じである必要があります。

  • ②不定パラメータは関数の最後のパラメータでなければなりません。

  • ③不定パラメータは関数本体のスライスに相当し、スライスの操作は不定パラメータの操作にも適しています。

  • ④ スライスはパラメータとして不定のパラメータに渡すこともできます。スライス名の後に「...」を追加する必要があります。

package main

import "fmt"

func Add(arr ...int) int {
	var count int
	arr1 := arr[1:]
	for _, val := range arr1 {
		count += val
	}
	return count
}

func main() {
	slice := []int{1, 2, 3, 4, 5}
	//array := [...]int{1, 2, 3, 4}
	fmt.Println(Add(slice...))
	//fmt.Println(Add(array...))  //cannot use array (variable of type [4]int) as parameter of type []int
}
  • ⑤仮引数が不定引数である関数と、仮引数がスライスである関数では種類が異なります。

  • #
    package main
    
    import "fmt"
    
    func Add1(arr ...int) int {
    	return arr[0]
    }
    
    func Add2(arr []int) int {
    	return arr[0]
    }
    
    func main() {
    	fmt.Printf("%T\n", Add1)
    	fmt.Printf("%T\n", Add2)
    }

Go言語の不定パラメータとは何ですか?

#不定パラメータの受け渡し#

func SetData(args ...int) (result int) {
    //不定参数的传递
    return Add(1, args...)
}
func main() {
    fmt.Println(SetData(1, 2, 3))//输出7
    array := []int{1, 2, 3, 4}
    fmt.Println(Add(1, array...))//输出11
}

任意のタイプの不定パラメータ

/*
任意类型的不定参数,用interface{}表示
*/

func MyPrintf(args ...interface{}) {
    for _, arg := range args { //迭代不定参数
        switch arg.(type) {
        case int:
            fmt.Println(arg, "is int")
        case string:
            fmt.Println(arg, "is string")
        case float64:
            fmt.Println(arg, "is float64")
        case bool:
            fmt.Println(arg, " is bool")
        default:
            fmt.Println("未知的类型")
        }
    }
}

func main() {
    /*输出结果:
                12 is int
                haha is string
                12.5 is float64
                false  is bool
                -12.5 is float64
    */
    MyPrintf(12, "haha", 12.5, false, -12.5)
}
[関連する推奨事項: Go ビデオ チュートリアル

プログラミング教育]

以上がGo言語の不定パラメータとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。