变量
定义
变量几乎是所有编程语言最基本的组成元素,简单来说,变量相当于对一块数据存储空间的命名,程序可以通过申请一个变量来确定一块数据存储空间,之后通过引用指向这块变量名来使用这个存储空间。
使用的时候我直接拿变量a,b,c使用,不用关心a,b,c里面装的什么,是玩具还是大米还是水果,反正我用a就是拿到里面装的玩具在使用,使用完了之后我再把a变量赋值为其他的比如书籍,我再用a变量就是拿到a变量的书籍在使用。
变量声明
Go语言的变量声明方式和java语言有明显的不同,对于纯粹的变量声明,Go语言引入了var关键字,而类型声明放在变量名之后...这对于习惯java的变量声明类型放在变量名之前的写法,有点像筋脉逆行。 举例来习惯吧:
var a int
var b string
var c [10]int //数组
var d []int //数组切片,动态数组
var e struct{
f int
}
var g *int //指针 完全不懂
var h map[string]int //map的key是string类型,value是int类型
变量声明语句不需要使用分号作为结束符,var关键字的另一种用法也可以将若干个需要声明的变量放置在一起,和java放在一行的写法作用一样。
var(
a int
b string
)
变量初始化
对于声明变量需要进行初始化的场景,var关键字可以保留,但不是必须保留,如下都正确。
var a int=10
var b=10 //编译器能根据值推断出b的类型
c:=10 //一样编译器可以推导出c的类型
注意:=这种变量初始化的方式,不能初始化已经被声明过得,否则会导致编译错误,如下会报错。
var a int
a:=10
变量赋值
Go语法中,变量初始化和变量赋值是两个不同的概念。下面是声明一个变量之后的赋值过程
var a int
a=10
Go语言引入了多重赋值的语法糖,比如交换a和b的值,可以如下写法:
a,b=b,a
在不支持多重赋值的语言中需要一个中间变量交换,当年java第一次学这种交换懵了好一会儿,不支持多重赋值的交换a和b的值如下:
int a=10;
int b=20;
//交换
int temp=a;
a=b;
b=temp;
匿名函数
在强类型语言编程时,即在调用函数时为了获取一个值,却因为该函数返回多个值而不得不定义一堆没用的变量。(这点说法理解不透彻我的理解为函数有多个参数,需要传一堆没用的参数)假设现在Go的一个函数需要返回三个值,我只想用第三个值,代码如下:
//函数
func GetName() (firstName, lastName, nickName string) {
return "雷", "鸿", "H"
}
//只想返回nickName的调用
_, _, nickName := GetName()
这种写法很简单和简介,让人一眼看去直接知道我需要第三个返回值nickName,其他的-忽视不用管。提高了代码的可读性。
注:此前我这里的调用_, _, nickName := GetName()中的下划线写成中划线了,谢谢用户Qkuroky的指正非常感谢!专门去运行了下这次没问题!再次致谢
完整运行代码如下:
package main
import "fmt"
func main() {
_, _, nickName := GetName()
fmt.Println(nickName)
}
func GetName() (firstName, lastName, nickName string) {
return "雷", "鸿", "H"
}
备注
本文正在参与「掘金Golang主题学习月」, 点击查看活动详情。