1. ホーム
  2. スクリプト・コラム
  3. ゴラン

Go(...)の3つのポイントを徹底分析 使用方法

2022-02-15 11:49:08

...」は、実はgoの構文解析の砂糖の一種です。
最初の用途は、主に関数が複数の不定引数を持ち、複数の不定引数を受け入れることができる場合である。
2つ目の用途は、スライスを分割して渡すことができることです。

package main
 
import (
	"fmt"
)
 
func main(){
    name(1,2,3,4,5,6,7,8,9) // multiple indeterminate number of arguments
    
    var strss= []string{
        "qwr",
        "234",
        "yui",
        "cvbc",
    }
    test1(strss...) //Slices are broken up and passed into strss... Equivalent to "qwr","234","yui","cvbc"
}
 
func name(args . .int) {//can accept any int argument
    for _, v:= range args{
        fmt.Println(v)
    }
}
 
func test1(args ... .string) { //can accept any string argument
    for _, v:= range args{
        fmt.Println(v)
    }
}

ここで、囲碁の使い方で3つの点(...)を見てみると、以下のようになります。

ご存知のように、Goは厳密に型付けされた言語であり、不定形の入力引数で開発するとどうなるでしょうか。

ここで、私たちプログラマに柔軟性を与えてくれる、以下の3つのポイント(...)を紹介します。

Golangでは、3つのドットは4つの場所で使われています(3つのドットは正式には何と言うのでしょうか?)

コードは以下の通りです。

package main
 
import (
    "fmt"
    "log"
)
 
func main() {
    //multiParam can accept a variable number of parameters
 
    names := []string{"jerry", "herry"}
 
    // In the array literal, ... The length specified by the symbol is equal to the number of elements in the literal.
    stooges := [...] string{"Moe", "Larry", "Curly"}
    stoogxs := []string{"Moe", "Larry", "Curly"}
 
    strParam("jerry", "herry")
    strParam(names...)
 
    //merge two slice by append
    stoogxs = append(stoogxs, names...)
    fmt.Println(stoogxs)
 
    //identify the number of elements of the array, here, ... means the number of elements of the array
    log.Println(len(stooges))
 
    nums := []int{4, 5, 6}
    stoogns := [...] int{4, 5, 6}
 
    intParam(1, 2, 3)
    intParam(nums...)
 
    // identifies the number of elements of the array, here, ... means the number of elements of the array
    log.Println(len(stoogns))
}
 
func strParam(args ... .string) {
    // the accepted arguments are placed in the args array
    for _, e := range args {
        log.Println(e)
    }
}
 
func intParam(args . .int) {
    res := 0
    for _, n := range args {
        res += n
    }
    log.Println(res)
 
}

可変長の関数パラメータ

関数の最後の引数が.NET型である場合 Tであれば、関数を呼び出すときに、引数リストの最後にあるT型の複数の引数を使用することができる。ここで、. Tは関数内部では実際には[]Tです。

func intParam(args . .int) {
    res := 0
    for _, n := range args {
        res += n
    }
    log.Println(res)
}

可変長の引数リストで関数を呼び出す

上記のSum関数は、可変長の引数を別々に記述して呼び出します。スライスがあれば、スライスを分割して呼び出す必要はなく、スライスの後に...をつけて呼び出すだけです。これだけです。

nums := []int{4, 5, 6}
intParam(nums...)

配列の要素数を指定します.

stooges := [...] string{"Moe", "Larry", "Curly"} // len(stooges) == 3

ここで、...は配列の要素数を意味します。

Go コマンドラインでのワイルドカード

パッケージファイルを記述するためのワイルドカード。
この例では、現在のディレクトリとすべてのサブディレクトリにあるすべてのパッケージがユニットテストされます:。

go test . /...

囲碁の3つの点(...)の使い方の記事は以上です。囲碁の3点(...)についての詳しい情報は、スクリプトハウスの過去の記事を検索していただくか、引き続き以下の関連記事をご覧ください。