什么是变量?
变量是为存储位置指定的名称,用于存储特定类型的值。
如何声明变量?
在go中有多种语法来声明变量
声明单个变量
语法:
var name type
- var:是声明变量的关键词
- name: 是变量名
- type:变量是类型
示例:
var username string
以上语句:var name string 声明一个名为username type为string的变量。
如果未为变量分配任何值,则Go会自动使用变量类型的零值对其进行初始化。 示例:
package main
import "fmt"
func main() {
var number int
fmt.Println("变量number的值是:", number)
}
运行结果:
变量number的值是: 0
声明具有初始值的变量
语法:
var name type = initialvalue
示例:
var number int = 25
多变量申明
使用单个语句声明多个变量,首先我们得知道go中的类型推断
什么是类型推断?
在声明变量的时候,变量具有初始值,Go将自动使用该初始值来推断该变量的类型。这样的话,在声明变量的时候则可以删除类型所对应的关键字。例如:
var number int =12
以上的声明赋值语句就可以这样写
var number = 12
明白了类型推断,我们再来看多变量的声明
语法:
var name1,name2 type = initialvalue1,initialvalue2
示例:
var number1, number2 int = 10, 20
//go 会根据赋值的类型自行类型推断,从而确定变量的类型
var number1, number2 = 10, 20
以上两个语句是等价的。
当然多变量的声明,也阔以是不同数据类型。 语法:
var (
name1 = initialvalue1
name2 = initialvalue2
)
示例:
package main
import "fmt"
func main() {
var (
name = "naveen"
age = 29
height int
)
fmt.Println("my name is", name, ", age is", age, "and height is", height)
}
以上声明一个变量name类型string,age和height类型int。其中name、age 的数据类型是根据赋值确定的(即类型推断)。
短变量申明
go对于变量的声明还提供了一种简洁的变量声明的方法。其语法如下:
name:= initialvalue
示例:
package main
import "fmt"
func main() {
number := 10
name,age := "李四", 20
fmt.Println("number =",number)
fmt.Println("name:", name, " age: ", age)
}
运行结果:
number = 10
name: 李四 age: 20
注意1:采用这种简洁的方式声明变量的时候,必须对左侧所有的变量赋值。否则就会报错! 示例:
package main
import "fmt"
func main() {
name, age := "李四"
fmt.Println("name:", name, " age: ", age)
}
运行结果:
# command-line-arguments
./main.go:7:12: assignment mismatch: 2 variables but 1 values
注意2:采用这种简洁的方式声明变量的时候,阔以对老的变量的值进行修改,但前提是:=的左侧必须有新变量才行。否则也会报错!
示例:
package main
import "fmt"
func main() {
name, age := "李四", 20
fmt.Println("name:", name, " age: ", age)
age, height := 30, 175
fmt.Println(" age: ", age, " height:", height)
}
运行结果:
name: 李四 age: 20
age: 30 height: 175
我们对上面代码中已经声明的变量再次声明赋值,其代码如下
package main
import "fmt"
func main() {
name, age := "李四", 20
fmt.Println("name:", name, " age: ", age)
age, height := 30, 175
age, height := 40, 185
fmt.Println(" age: ", age, " height:", height)
}
运行结果:
# command-line-arguments
./main.go:14:14: no new variables on left side of :=
使用关键词new创建指针变量
指针变量,顾名思义就是存放地址(数据所在内存中的位置)的变量。 示例:
package main
import "fmt"
func main() {
number1 := 20
var ptr1 = &number1
ptr2 := new(int)
fmt.Println("number1: ", number1)
fmt.Println("ptr1: ", ptr1)
fmt.Println("ptr2: ", ptr2)
fmt.Println("ptr2针所在指向的数据值:", *ptr2)
}
运行结果;
number1: 20
ptr1: 0xc00010c000
ptr2: 0xc00010c008
ptr2指针所指向的数据值: 0
上面代码中,变量ptr1和ptr2都是指针变量。只是ptr2变量的是使用表达式new(Type)的形式来创建的。
new(Type):实际上是创建了一个类型为Type的匿名变量,初始化的值为Type类型的零值,其返回值为这个匿名变量的地址。
make函数创建引用数据类型变量
go中引用数据类型:slice、map、chan 对于引用数据的类型的创建和初始化,一般使用make来完成。 示例:
//channel中make的使用方式
var a chan int //声明一个变量
if a == nil {
fmt.Println("channel a is nil, going to define it")
a = make(chan int) //定一个channel
}
b := make(chan int) //声明并定义一个channel
//map中make的使用方式
var map1 map[string]int //此时为map1为零值,即nil
map1 = make(map[string]int) //使用make函数进行初始化
map2 := make(map[string]int)
//map2["abc"] = 123
fmt.Println(map1, b, a, map2)
//slice中make的使用方式
i := make([]int, 5, 5) //使用make创建一个切片
欢迎关注我的公众号“晓冬编程”,原创技术文章第一时间推送。