1、变量的定义
无论使用哪种高级语言,变量都是程序的基本单元。变量表示内存中,程序可以通过定义一个变量来申请一块数据存储空间,之后可以通过引用变量名来使用这块存储空间。
2、变量的使用步骤
- 声明变量
- 初始化或赋值
- 使用变量
package main
import "fmt"
func main() {
var i int
i = 10
fmt.Println("i=" + i);
}
3、变量声明
var [变量名] [类型]
eg:var a int
多变量声明,go支持使用一个var声明多个变量,使用括号就行
var (
v1 int
v2 string
)
4、变量初始化
对变量进行初始化处理,有3种方式
// 方式1:常规操作,按照规范
var v1 int = 1
// 方式2:省略类型,编辑器会根据赋值定位为int类型
var v2 = 1
// 方式3:省略var和类型,编辑器自动推导出int类型
v2 := 1
go语言不写类型这个特点就像JavaScript等动态语言有点像了,不过go是属于静态语言,因为go编辑器会根据赋值推导出类型
:=:=
var a int
a := 1
no new variables on left side of :=
5、变量赋值
变量的初始化和操作是两个不同的概念,初始化只有一次,赋值可以有多次
var v1 int
v1 = 10
注意点,变量不能随便更改类型
var a int = 1
a = 2
a = 3
// 变量已经定义为int类型,不能随便更改类型为float
a = 3.1
异常提示:constant 3.1 truncated to integer
- 变量多重赋值
go提供了很好用的多重赋值功能,使用多重赋值,可以对两个变量进行互换
i, j = j, i
没有这个功能的语言,比如PHP或者java只能通过一个临时变量进行互换
temp = i;
i = j;
j = temp;
6、匿名变量
_
func main() {
// 只获取需要的用户名
userName,_ := GetUserInfo()
fmt.Println(userName)
}
func GetUserInfo() (userName string , password string) {
return "admin", "pwd"
}
7、变量的作用域
go和其它语言一样,也有全局变量和局部变量,声明在函数体之外的都是全局变量,这个变量可以在整个文件里使用,如果要跨包或者说是跨文件调用,必须声明为大写的,有点类似于java中的public变量,声明为大小的全局变量之后,就可以在其它package里调用;然后局部变量就是声明在函数体内的变量,局部变量只能在对应的函数里调用
8、常量的使用
在go语言中,常量是指在编译期就已知且不可以改变的值,常量只可以是数值类型(括整型、 浮点型和复数类型)、布尔类型、字符串类型等标量类型。
constconst [常量名] [类型]
- 定义多个常量
const (
size int64 = 1024
flag = -1
)
- 多重赋值
const a,b,c = 1 , 2, "foo"
constconst
const (
c1 = iota // 0
c2 = iota // 1
c3 = iota // 2
)
const (
c4 = 1 << iota // 1
c5 = 1 << iota // 2
c6 = 1 << iota // 4
)
const (
c7 = iota * 2 // 0
c8 = iota * 2 // 2
c9 = iota * 2 // 4
)
const a = iota // 0
const多重赋值,如果两个赋值表示式一样,就可以进行省略,所以上面例子就可以进行修改
const (
c1 = iota // 0
c2 // 1
c3 // 2
)
const (
c4 = 1 << iota // 1
c5 // 2
c6 // 4
)
const (
c7 = iota * 2 // 0
c8 // 2
c9 // 4
)
利用这个特性,可以进行多常量定义,可以实现类似于java中枚举的效果,如下代码,进行常量定义,并按0~6的顺序赋值
type Weekday int
const (
Sunday Weekday = iota
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
)
还有更复杂点的例子,来自《go语言圣经》
const (
_ = 1 << (10 * iota)
KiB // 1024
MiB // 1048576
GiB // 1073741824
TiB // 1099511627776 (exceeds 1 << 32)
PiB // 1125899906842624
EiB // 1152921504606846976
ZiB // 1180591620717411303424 (exceeds 1 << 64)
YiB // 1208925819614629174706176
)
- 常量作用域
常量的作用域也是根据大小写进行判定,大写的可以挎包调用,小写的只能在本包调用
9、程序中加号使用
+