go中的三个点(...)

作为函数参数

表示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');

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

发布了155 篇原创文章 · 获赞 74 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/HYZX_9987/article/details/102852041