【go入门】变量

目录

前言

本专栏将直接从go语言的内容开始,不会介绍go语言的前世今生以及go语言环境的安装以及配置。

变量

go语言变量名由字母、数字、下划线组成,不能以数字开头。声明变量的一般形式是var关键字。比如我想声明一个age变量,它是整型:

go 复制代码
var age int

也可以同时声明多个变量

go 复制代码
var age1, age2 int
go 复制代码
//demo1
package main

import "fmt"

func main() {
	var a string = "Hello World!"
	fmt.Println(a)

	var b, c int = 1, 2
	fmt.Println(b, c)
}

变量声明

指定变量类型,如果没有初始化,默认为零值,零值是变量没有初始化系统默认的值

go 复制代码
//demo2
package main

import "fmt"

func main() {
	var a string = "Hello" //声明一个变量并初始化
	fmt.Println(a)

	var b int //没有初始化则为零值
	fmt.Println(b)

	var c bool //bool的默认值是false
	fmt.Println(c)
}

结果是

go 复制代码
Hello
0
false

数值类型的默认值是0,布尔类型是false,字符串为""(空字符串)

根据值自行判断变量类型

也就是说,你可以直接这样写:

go 复制代码
var d = 1

它会自动判断该变量是 int 型

:= 声明变量

这样声明变量相当于直接省略了 var 和 类型

go 复制代码
f := 6 //var f int = 6

如果变量已经用 var 声明过了,再使用 := 就会产生编译错误

go 复制代码
//错误
var f int //声明1次
f := 6 //var f int = 6,又声明一次
go 复制代码
//demo3
package main

import "fmt"

func main() {
	g := "ni hao"
	fmt.Println(g)
}

多变量声明

go 复制代码
//demo4
package main

import "fmt"

func main() {
	var a, b, c int = 1, 2, 3
	fmt.Println(a, b, c)

	var d, e, f = 4, 5, 6
	fmt.Println(d, e, f)

	g, h, i := 7, 8, 9 //这种方式只能再函数体中出现
	fmt.Println(g, h, i)
}

上面的方式适用于非全局变量,也可以叫局部变量

下面这的适用于声明全局变量

go 复制代码
//demo5
package main

import "fmt"

var x, y int
var (
	a int
	b bool
)
var c, d int = 1, 2

func main() {
	e := "hello" //只能再函数体中使用
	fmt.Println(x, y, a, b, c, d, e)
}

注意事项

  • 变量初始化时可以省略变量类型由系统自动判断,那么使用 var 关键字就有些多余,因此可以简写:
go 复制代码
a := 10

首选这种方式声明变量,但是这种方式只能再函数体中使用。

  • 在相同的代码块中,不能对相同名称的变量使用初始化声明,例如:
go 复制代码
a := 10
a := 20 //错误

但是可以

go 复制代码
a = 20

这是给变量赋予了一个新的值,并没有再次声明。

  • 如果声明了一个局部变量,但是没有使用,也会编译错误,单纯地赋值也是不行的,必须被使用。
go 复制代码
//demo6
package main

import "fmt"

func main() {
	str1 := "abc"
	fmt.Println("hello", str1) //必须使用str1,否则会报错
}

全局变量是允许声明了但不使用

go 复制代码
package main

import "fmt"

var str2 = "world" //可以不使用

func main() {
	str1 := "abc"
	fmt.Println("hello", str1) //必须使用str1,否则会报错
}
  • 多类型变量也可以在同一行赋值
go 复制代码
//demo7
package main

import "fmt"

func main() {
	//var a, b = 1, 2
	//var c, d = "hello", "world"
	//fmt.Println(a, b, c, d)

	a, b, c, d := 1, 2, "hello", "world" //多种类型变量在同一行赋值
	fmt.Println(a, b, c, d)
}
  • 空白标识符 _ 也被用于抛弃值,相当于只写变量,但得不到它的值
go 复制代码
_, b = 1, 2
go 复制代码
//demo8
package main

import "fmt"

func main() {
	a, b := 0, 0
	fmt.Println(a, b)
	_, b = 1, 2
	fmt.Println(a, b)
}

结果是

go 复制代码
0 0
0 2

在go语言中必须使用所有被声明的变量,但有时候不需要返回这个函数的所有返回值。

变量的生命周期

全局变量的生命周期是程序的存活时间

在不发生内存逃逸(后面文章会讲到)的情况下,局部变量的生命周期是函数存活的时间

go 复制代码
//demo9
package main

import "fmt"

var a1 = 1

// b2出了这个函数就死了,它的生命周期就是test函数的存活时间
func test() {
	b2 := 2
	fmt.Println(b2)
}
func main() {
	var c3 = 3
	fmt.Println(a1, c3) //这里输出b2就会出错
	test()
}
相关推荐
OEC小胖胖3 分钟前
js中正则表达式中【exec】用法深度解读
开发语言·前端·javascript·正则表达式·web
孞㐑¥6 分钟前
C语言—顺序表(含通讯录项目)
c语言·开发语言·经验分享·笔记
学地理的小胖砸10 分钟前
【高分系列卫星简介——高分五号卫星(GF-5)】
开发语言·python·信息可视化·遥感·地理信息
一颗星星辰12 分钟前
Python | 第六章节 | 控制结构
开发语言·网络·python
灯火不休ᝰ14 分钟前
6--苍穹外卖-SpringBoot项目中菜品管理 详解(二)
java·spring boot·后端
GoppViper16 分钟前
golang 如何生成唯一的 UUID
开发语言·后端·golang·uuid
SkyrimCitadelValinor16 分钟前
python【入门基础知识】
开发语言·python
Crossoads17 分钟前
【C++掌中宝】类和对象(一):类的定义和实例化
开发语言·c++·机器学习·ajax·数据挖掘
计算机学姐24 分钟前
基于php摄影门户网站
开发语言·vue.js·vscode·后端·php·phpstorm·webstorm
J不A秃V头A37 分钟前
Java中的继承和实现
java·开发语言