众所周知,Go语言是严格类型语言,而开发的时候又遇到传入参数不定的情况,怎么办?
这里的三个点(...),就给我们编程人员带来很大的灵活性,具体如下
函数可变数量参数
可参考https://github.com/guyan0319/...
示例
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)
}
}
需要注意的是,可变参数是函数最右边的参数,普通参数放在左侧,可以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)
}
}
可变函数的参数
s
如果使用s...
符号解压缩切片,则可以将切片直接传递给可变参数函数。在这种情况下,不会创建新的切片。
示例
package main
import "fmt"
func main() {
//multiParam 可以接受可变数量的参数
names := []string{"jerry", "herry"}
multiParam(names...)
}
func multiParam(args ...string) {
//接受的参数放在args数组中
for _, e := range args {
fmt.Println(e)
}
}
还有一种情况就是通过append合并两个slice,
stooges := []string{"Moe", "Larry", "Curly"}
lang := []string{"php", "golang", "java"}
stooges = append(stooges, lang...)
fmt.Println(stooges)//[Moe Larry Curly php golang java]
数组文字
在数组文字中,...
符号指定的长度等于文字中元素的数量。
stooges := [...]string{"Moe", "Larry", "Curly"}
arr := [...]int{1, 2, 3}
fmt.Println(len(stooges))
fmt.Println(len(arr))
这里...
也可以不用。
go命令
go
描述软件包列表时,命令使用三个点作为通配符。
此命令测试当前目录及其子目录中的所有软件包。
$ go test ./...
参考:
https://yourbasic.org/golang/...