但我们今天要探讨的go,是支持变量的概念的。
在一开始的设想中,如果没有变量,那就意味着一个内存单元或者说寄存器单元的数值在任何时候都不能变。 比如我们的内存可以存储10个数值,一旦有第11个就无法存储,需要加内存。
为了省钱,只好设计为一块内存可以反复使用的,基于这样的设计理念,我们把能代表某块内存的称为变量,变量指向某块内存,其中的值可以变化,这样就能充分利用硬件资源。
当然随着计算机硬件成本越来越低,未来我们也可以设计为任何值都不要发生变化,或许几百年后就没有了变量的概念。
2. 使用变量的步骤
变量使用只需要三个步骤:
1)声明变量
2)给变量赋值
3)使用变量
来看一个小案例:
package main
import "fmt"
func main() {
//定义个i变量,数值类型为int
var i int
//给变量赋值为10
i=10
fmt.Println("i =", i)
}
注意:
1) 在go语言中,i=10 去赋值,或者用i = 10 量变加空格去赋值,问题都不大。
- 变量表示的是内存中的某一块存储空间。
3) 在这块存储空间里,有自己的名称和类型,也就是我们常说的变量名和数据类型。
3. 使用变量的三种方式
Go语言变量使用的三种方式:
(1) 指定变量类型,声明后若不复制,使用默认值,如int的默认值是0;
package main
import "fmt"
func main() {
var i int
//此处不做任何复制,直接输出结果
fmt.Println("i =", i)
}
输出结果:
(2) 根据值自行判定变量类型(类型推导);
package main
import "fmt"
func main() {
//var i int
//把这一行注释掉,不定义i的变量,直接在下面赋值
var i = 13.14
var num = 3
fmt.Println("i =", i)
fmt.Println("num =", num)
}
输出结果
也就是我们并没有给他指定类型,系统会自动推导,判断变量类型。
但这里要注意不定义数据类型和不赋值这两件事不能同时发生。
我们在第一条的时候,调到过可以不赋值,默认为0.,但不赋值也不赋值数据类型,全凭电脑自动帮你推导,行不通。
我们来测试下:
package main
import "fmt"
func main() {
//var i int
//把这一行注释掉,不定义i的数据类型
//var i = 13.14
//这里把赋值注释掉,不进行赋值
fmt.Println("i =", i)
}
太难为系统了,对不对。
(3) 省略var,=是赋值, :=是声明变量并赋值。
注意 :=左侧变量不应该是已经声明过的,否则会编译错误
正常写法:
package main
import "fmt"
func main() {
var name string
name = "itlaoxin"
fmt.Println("name =", name)
}
省略var之后的写法
package main
import "fmt"
func main() {
//var name string 此行注释掉,不写
name := "itlaoxin"
fmt.Println("name =", name)
}
执行结果
可以看到,如果不使用var,就需要在复制的时候加上:
也就是
var name string
name = “itlaoxin”
等价于
name := “itlaoxin”
但我建议大家使用第一种方式,别嫌麻烦,有时候麻烦点更容易理解。
4. 一次声明多个变量的多变量声明
学到这里之后,我们又遇到了一个问题,如果我们有多个变量,每个都需要确定数值类型,然后在赋值似乎有些麻烦。
我们来看个例子:
package main
import "fmt"
func main() {
var n1 = 100
var n2 = 200
var name ="itlaoxin"
fmt.Println(n1,n2,name)
}
输出结果
我们可以用下面的方法
package main
import "fmt"
func main() {
var (
n1 = 100
n2 = 200
name ="itlaoxin"
)
fmt.Println(n1,n2,name)
}
可以看到输出的结果是一样的,但是这里需要注意一点: ()写的时候要注意注意中英文。
5. 官方推荐的变量声明形式
我们平时的正常写法
package main
import "fmt"
func main() {
var f = 3.14
var a = 3.14
fmt.Println(a,f)
}
当我们这么写的时候,go编译器会默认设置为 float64, 如果你不接受默认类型可以改成float32
改成这么写:
package main
import "fmt"
func main() {
var f int32 = 6
var a float32 = 3.14
fmt.Println(a,f)
}
但官网推荐的是下面的写法:
package main
import "fmt"
func main() {
var f = int32(6)
var a = float32(3.14)
fmt.Println(a,f)
}
小练习
抄写如下代码,通过代码回顾本小节的内容,并根据自己的理解,进行讲解。
package main
import "fmt"
func main() {