go基础编程(二):变量

690 阅读4分钟

什么是变量?

变量是为存储位置指定的名称,用于存储特定类型的值。

如何声明变量?

在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创建一个切片

欢迎关注我的公众号“晓冬编程”,原创技术文章第一时间推送。