golang中的三個點 '...'的用法示例詳解


‘…' 其實是go的一種語法糖。
它的第一個用法主要是用於函數有多個不定參數的情況,可以接受多個不確定數量的參數。
第二個用法是slice可以被打散進行傳遞。

下面直接上例子:

一個函數的參數列表里面只能有一個可變參數

func test1(args ...string) { //可以接受任意個string參數
  for _, v:= range args{
    fmt.Println(v)
  }
}

func main(){
var strss= []string{
    "qwr",
    "234",
    "yui",
    "cvbc",
  }
  test1(strss...) //切片被打散傳入
}

結果:

qwr
234
yui
cvbc

其中strss切片內部的元素數量可以是任意個,test1函數都能夠接受。

第二個例子:

var strss= []string{
    "qwr",
    "234",
    "yui",

  }
  var strss2= []string{
    "qqq",
    "aaa",
    "zzz",
    "zzz",
  }
strss=append(strss,strss2...) //strss2的元素被打散一個個append進strss
fmt.Println(strss)

結果:

[qwr 234 yui qqq aaa zzz zzz]

例如:

package main

import "fmt"

func main() {
    //multiParam 可以接受可變數量的參數
    multiParam("jerry", "herry")
    names := []string{"jerry", "herry"}
    multiParam(names...)
}
func multiParam(args ...string) {
    //接受的參數放在args數組中
    for _, e := range args {
        fmt.Println(e)
    }
}

結果:

jerry
herry
jerry
herry

需要注意的是,可變參數是函數最右邊的參數,普通參數放在左側,可以0到n個。如

package main

import "fmt"

func main() {
   //multiParam 可以接受可變數量的參數
   multiParam("jerry", 1)
   multiParam("php", 1, 2)
}
func multiParam(name string, args ...int) {
   fmt.Println(name)
   //接受的參數放在args數組中
   for _, e := range args {
      fmt.Println(e)
   }
} 

結果:

jerry
1
php
1
2 

數組文字

在數組文字中,...符號指定的長度等於文字中元素的數量。

stooges := [...]string{"Moe", "Larry", "Curly"}
arr := [...]int{1, 2, 3}
fmt.Println(len(stooges))
fmt.Println(len(arr))

這里... 也可以不用。

如果沒有'…',面對上面的情況,無疑會增加代碼量,有了'…',是不是感覺簡潔了許多


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM