go中的三个点(...)

mac2025-03-03  13

作为函数参数

表示params可能是多个参数

func main() { eg("abc",99,"hello") } func eg(str string,params ... interface{}){ fmt.Println(str) // abc fmt.Println(params) // [99 hello] fmt.Println(params...) // 99 hello }

定义不定长数组

var arr = [...]int{1,2}

遍历&组装数组

var bac = [3]string{"c", "b", "a"} fmt.Println(bac) // [c b a] //遍历&组装成新的数组data,使用... var data []string //data = append(data,bac[1:]...) //加入除第一个元素以外的其他元素 此时data为[b a] data = append(data, bac[:]...) //所有元素 fmt.Println(data) // [c b a]

组装时可按需过滤部分元素

var sts = []string{"o1", "p2", "q1", "r3"} fmt.Println(sts) // [o p q r] //去除包含"1"的元素,sts动态变化 for i := 0; i < len(sts); { if strings.Contains(sts[i], "1") { sts = append(sts[:i], sts[i+1:]...) } else { i++ } } fmt.Println(sts) //[p2 r3]

应用场景:初始化sql脚本,多个文件,多行SQL

假如字符串str1和str2是两个文件中读出的几行sql(已转为string)

str1 := "INSERT INTO x(`id`,`name`)VALUES('1001','雨落山岚');" + "INSERT INTO x(`id`,`name`)VALUES('1002','雨落山岚1');" + "INSERT INTO x(`id`,`name`)VALUES('1003','雨落山岚11');" str2 := "INSERT INTO x(`id`,`name`)VALUES('1004','雨落山岚');" + "INSERT INTO x(`id`,`name`)VALUES('1005','雨落山岚1');" + "INSERT INTO x(`id`,`name`)VALUES('1006','雨落山岚11');" data5 := strings.SplitAfter(string(str1), ";") data5 = append(data5,strings.SplitAfter(string(str2), ";")...) //遍历data5执行SQL即可,此处只打印 for _, sql := range data5 { fmt.Println(sql) } //output: INSERT INTO x(`id`,`name`)VALUES('1001','雨落山岚'); INSERT INTO x(`id`,`name`)VALUES('1002','雨落山岚1'); INSERT INTO x(`id`,`name`)VALUES('1003','雨落山岚11'); INSERT INTO x(`id`,`name`)VALUES('1004','雨落山岚'); INSERT INTO x(`id`,`name`)VALUES('1005','雨落山岚1'); INSERT INTO x(`id`,`name`)VALUES('1006','雨落山岚11');

 

 

问君能有几多愁?恰似一江春水向东流。

最新回复(0)