作为函数参数
表示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');