golang中的三个点 ‘...‘ 的用法

...的用法在Go里特别常见,特别是有管切片,数组和变长参数的函数定义和调用时;

‘…’是go语言里的一种语法糖,可以用简单的写法,实现一个多行代码的逻辑; 

它的第一个用法主要是用于函数有多个不定参数的情况,可以接受多个不确定数量的参数。可以看看下面这段代码样例:

func join(args ...string) string { //可以接受任意个string参数
	return strings.Join(args, " ")
}



func main() {
	var strss = []string{
		"This",
		"is",
		"a",
		"sample",
		"in",
		"Golang",
	}

	join(strss...) //切片被打散传入
}

===== OUTPUT =====
  This is a sample in Golang

这段代码就是使用在可变长的参数里, 通过(args ...string) 这样的方式定义了一个args的参数,该参数是一个string类型的可变长参数。  在函数体实现里,可以作为一个数组或者切片进行使用; 如这里例子里的, strings.join(args, ' ')就是作为string的数组进行调用。

第二个用法是slice可以被打散进行传递。

下面直接上例子:

func testRead() {
	for {
		//从file读取到buf中
		//打开文件使用os.Open函数,会返回一个文件句柄和一个error
		file, err := os.Open(`test.txt`)
		if err != nil {
			fmt.Println("文件打开失败:", err)

			//读取文件内容可以调用file.Read()方法,接收一个字节数组,
            //返回一个int和error
			buf := make([]byte, 12)
			//此时文件的内容都会读到buf里面,n则是写入了多少个字节, 
            //n不会超过字节数组buf的长度
			n, err := file.Read(buf)
			if err != nil && err != io.EOF {
				fmt.Println("read buf fail", err)
				return
			}
			//说明读取结束
			if n == 0 {
				break
			}
			//读取到最终的缓冲区中
			var chunk []byte
			chunk = append(chunk, buf[:n]...)
		}
	}
}

这里append就是对切片的操作,把一个切片或者数组,打散成一个一个的元素。

append是一个可变长度的函数, 调用这个函数,需要一个一个的把元素依次传递为参数,在确定的长度情况下,还可以直接调用,对于数组而言,如果不确定长度,就可以使用...的操作,把数组或者切片打散, 如同例子中的append(chunk, buf[:n]...); 就是buf[0:n]的数组通过...打散成一个个元素,作为append的参数进行调用。

 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

inthirties

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值