变量的概念
变量相当于内存中一个数据存储空间的表示,通过变量名可以访问到变量值,变量是程序的基本单位。
在go语言中,变量声明必须使用,不使用会编译不通过。
变量的使用
(1)声明变量(定义变量)
一般使用 var 关键字声明变量
var 变量名 变量类型
(2)给变量赋值
可以在声明变量的时候,就赋值
var a int = 45
(3)使用变量
示例:
package main
import "fmt"
func main(){
//定义变量
var i int
//给i赋值
i = 10
//使用变量
fmt.Println("i = ",i) //i = 10
}
注意:
- 指定变量类型,声明后若不赋值,则使用默认值
package main
import "fmt"
func main(){
var i int
fmt.Println("i = ",i) //i = 0
}
- 根据值自动判定变量类型(类型推断)
package main
import "fmt"
func main(){
var num = 1.1
fmt.Println("num = ", num) //num = 1.1
}
- 省略var关键字(常用的方法)
package main
import "fmt"
func main(){
//这种方式等价 var name string name = "tom"
//:=中的:不能省略
name := "tom"
fmt.Println("name = ",name) //name = tom
}
声明多个变量
声明多个变量
有时候需要一次性声明多个变量
package main
import "fmt"
func main(){
//方式1
//var n1, n2, n3 int
//fmt.Println("n1=",n1, "n2=",n2, "n3=",n3)
//方式2
//var n1, name, n3 = 100, "tom", 20
//fmt.Println("n1=",n1, "name=",name, "n3=",n3) // n1= 100 name= tom n3= 20
//方式3
n1, name, n3 := 100, "tom", 20
fmt.Println("n1=",n1, "name=",name, "n3=",n3) // n1= 100 name= tom n3= 20
}
全局变量
在go中函数外部定义的变量就是全局变量。
package main
import "fmt"
//定义全局变量
var n1 = 100
var n2 = 200
var name = "tom"
func main(){
//输出全局变量
fmt.Println("n1=",n1,"n2=",n2,"name=",name) // n1= 100 n2= 200 name= tom
}
上述声明全局变量的方式可以改为一次性声明,方式如下:
package main
import "fmt"
//一次性声明多个全局变量
var (
n3 = 300
n4 = 400
name2 = "jerry"
)
func main(){
//输出全局变量
fmt.Println("n3=",n3,"n4=",n4,"name2=",name2) // n3= 300 n4= 400 name2= jerry
}
常量
常量多用来定义程序运行期间不会改变的那些值。
使用 const
关键字声明常量:
const pi = 3.14
const e = 2.7182
示例:
package main
//常量
const pi = 3.14 //定义了常量后不能修改
func main(){
//pi = 123 //编译不通过
}
批量声明常量:
//批量声明常量
const (
statusOk = 200
notFound = 404
)
const
同时声明多个常量时,如果省略了值则表示和上面一行的值相同。
package main
import "fmt"
//批量声明常量时,如果某一行声明后没有赋值,则默认和上一行相同
const (
n1 = 100
n2
n3
)
func main(){
fmt.Println("n1:",n1) //n1: 100
fmt.Println("n2:",n2) //n2: 100
fmt.Println("n3:",n3) //n3: 100
}
iota
iota是go语言的常量计算器,只能在常量的表达式使用,iota在const
关键字出现时被重置为0,const
中每新增一行常量,将使iota计数一次。使用iota能简化定义,在定义枚举时很有用。
package main
import "fmt"
const (
a1 = iota //0
a2 //1
a3 //2
)
func main(){
fmt.Println("a1:",a1) //a1: 0
fmt.Println("a2:",a2) //a2: 1
fmt.Println("a3:",a3) //a3: 2
}
iota常见的示例:
使用 _
跳过某些值
const (
n1 = iota //0
n2 //1
_ //2
n4 //3
)
示例:
package main
import "fmt"
const (
b1 = iota //0
b2 = iota //1
_ = iota //2
b3 = iota //3
)
func main(){
fmt.Println("b1:",b1) //b1: 0
fmt.Println("b2:",b2) //b2: 1
fmt.Println("b3:",b3) //b3: 3
}
iota声明中插入值
package main
import "fmt"
const (
c1 = iota //0
c2 = 100 //100
c3 = iota //2
c4 //3
)
func main(){
fmt.Println("c1:",c1) //c1: 0
fmt.Println("c2:",c2) //c2: 100
fmt.Println("c3:",c3) //c3: 2
fmt.Println("c4:",c4) //c4: 3
}
多个iota定义在一行
package main
import "fmt"
//多个常量声明在一行
const (
d1, d2 = iota + 1, iota + 2
d3, d4 = iota + 1, iota + 2
)
func main(){
fmt.Println("d1:",d1) //d1: 1
fmt.Println("d2:",d2) //d2: 2
fmt.Println("d3:",d3) //d3: 2
fmt.Println("d4:",d4) //d4: 3
}
定义数量级
package main
import "fmt"
const (
_ = iota
KB = 1 << (10 * iota)
MB = 1 << (10 * iota)
GB = 1 << (10 * iota)
TB = 1 << (10 * iota)
PB = 1 << (10 * iota)
)
func main() {
fmt.Println(KB) // 1024
fmt.Println(MB) // 1048576
fmt.Println(GB) // 1073741824
fmt.Println(TB) // 1099511627776
fmt.Println(PB) // 1125899906842624
}