Go 语法糖

语法糖

语法糖通常是用来简化代码编写的,特性就是使用语法糖前后编译的结果是相同的。

go语言的语法糖最具有代表性的莫过于海象表达式:=

1. 简短变量声明符

可以使用关键字var或者直接简短变量声明符:=声明变量,但是使用:=时要注意一些规则

1.1 规则1

多变量赋值可能会重新声明

package main

import "fmt"

func main(){
	a,b:=1,2
	fmt.Println(a,b)
	c,b:=4,5
	fmt.Println(c,b)
}

image-20210728175546934

可以看到b的值发生了改变

但是如果:=左侧没有新变量的时候是不允许的

package main

import "fmt"

func main(){
	a,b:=1,2
	fmt.Println(a,b)
	a,b:=4,5
	fmt.Println(a,b)
}

image-20210728175818184

当然,我们重新声明变量的时候还要注意一个问题,那就是变量声明要在同一个作用域中出现;如果在不同作用域中出现,很有可能就创建了新的同名变量。

1.2 规则2

不能用于函数外部

简短变量声明符只能用于函数中,使用:=声明或者初始化全局变量会出错

可以这样理解,我们使用:=时其实是完成了两步操作,第一步声明变量,第二步对声明的变量进行赋值。

而我们在函数外部只能以关键字开头,所以会产生报错。

1.3 规则3

变量作用域的问题

规则1中最后提到不应该在一个函数内部不同作用域中用:=去声明同名变量,这样往往会在不经意间导致混淆出错。

package main

import "fmt"

func main(){
	i,j:=0,0
	if true{
		j,k:=1,1
		fmt.Println(j,k)
	}
	fmt.Println(i,j)
}

image-20210729100711380

这里的j在不同作用域下就被赋予了不同的值,如果对j混淆操作就可能出错

2. 可变参函数

可变参函数是指函数的某个参数可有可无,个数不确定。声明时需要在参数类型前面加上…前缀

比如最常用的fmt.Println()它的实现就是…interface{},即传入多个接口

最基本的例子

package main

import "fmt"

func Hello(word string,names ...string){
	if names==nil{
		fmt.Println("Nobody!")
		return
	}
	for _,people:=range names{
		fmt.Println(word,people)
	}
}


func main(){
	Hello("hi","a","b","c")
	Hello("hi",[]string{"a","b","c","d"}...)
}

image-20210729101819752

首先说说可变参函数的特点

  • 可变参数必须在可变参函数的尾部,也就是最后一个
  • 可变参数在函数内部是作为切片来解析的
  • 可变参数可以不填,不填的时候函数内部当做nil切片处理
  • 可变参数必须是相同的类型,如果是不同的类型可以定义为interface{}接口类型去实现

再来看看上面的例子,我们如果向可变参函数的可变参数传入切片类型的时候,函数参数部分使用的时候必须使用slice…来表示切片

另外,当我们传入切片的时候并不会产生新的切片,所以函数内部使用的切片和传入的切片是共享存储空间的。 当我们在函数内部修改切片时,也会影响外部调用的切片,所以这个一定要注意。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

shelgi

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

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

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

打赏作者

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

抵扣说明:

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

余额充值