【Go语言】【5】GO语言变量

简介:

变量也是语言的基本元素,与GO语言的常量类似,常量使用const关键字修饰,而变量使用var关键字修饰,变量声明的形式为var variableName variableType

一、变量声明

var age int

var phone int

var name string

var address string

var salary float64

var consume float64

var array [10]int

var frieds [20]string


每个变量声明都使用一个var,上面的例子中能否能减少var的个数吗?前面说过GO是最懂程序员的,所以当然可以简写为:

var (

   age     int

   phone   int

   name    string

   address string

   salary  float64

   consume float64

   array   [10]int

   frieds  [20]string

)


上面尽管只用了一个var来声明,但变量的行数并没有减少,细心的读者可能发现有两个int、两个string和两个float64,能否合并呢?答案是可以:

var (

    age, phone       int

    name, address     string

    salary, consume    float64

    array           [10]int

    frieds          [20]string

)

当类型相同时就可以按var variable1,variable2,variable3,variable4 variableType这种形式声明了


二、变量声明时的缺省值

1、变量缺省值

wKioL1Txp-TA__W2AANBTZwhguE136.jpg运行上面的程序可以发现int变量缺省赋值为0,string变量缺省赋值为空串(所以打印出来看不见),float64变量缺省赋值为0,int数组中的每个元素缺省赋值为0,string数组中的每个元素缺省赋值为空串

在该例中尽管没有定义复数类型,但不难推断复数变量缺省赋值为0+0i


2、变量声明的实质

变量声明实质上是申请一块数据存储空间并对其进行命名,这样程序可以通过变量名来使用这块存储空间;GO编译器在变量声明时顺便赋一个缺省值

wKioL1TxrCzACYIlAAAx1FKCLUE587.jpg


三、变量初始化

正如上例所示,变量声明时编译器会缺省赋一个值,但这个值可能并不是我们想要的,所以我们可以在声明的同时对变量进行初始化,其形式为var variableName variableType = value

var age int = 22

var phone int = 13581887557

var name string = "纠正哥"

var address string = "山东"

var salary float64 = 3030.30

var consume float64 = 1552.8

var array [10]int = [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

var frieds [3]string = [3]string{"山东", "李大朋", "13581887557"}


同变量声明类似,可以节省var个数:

var (

    age     int       = 22

    phone   int       = 13581887557

    name    string    = "纠正哥"

    address string    = "山东"

    salary  float64   = 3030.30

    consume float64   = 1552.8

    array   [10]int   = [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

    frieds  [3]string = [3]string{"山东", "李大朋", "13581887557"}

)


还可以减少行数:

var (

    age, phone      int       = 22, 13581887557

    name, address   string    = "纠正哥", "山东"

    salary, consume float64   = 3030.30, 1552.8

    array  [10]int   = [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

    frieds  [3]string = [3]string{"山东", "李大朋", "13581887557"}

)


还可以去掉变量类型:

var (

    age, phone    = 22, 13581887557

    name, address  = "纠正哥", "山东"

    salary, consume = 3030.30, 1552.8

    array       = [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

    frieds       = [3]string{"山东", "李大朋", "13581887557"}

)


哪有没有更狠的呢?请读者上眼:

age, phone := 22, 13581887557

name, address := "纠正哥", "山东"

salary, consume := 3030.30, 1552.8

array := [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}

frieds := [3]string{"山东", "李大朋", "13581887557"}

运行一下,小伙伴们都惊呆了,这样竟然也行,是的,GO语言就是这么任性

wKiom1Txr0nyLCyqAAO983sG9Bs248.jpg


四、变量赋值

下面就是声明一个变量之后的赋值过程:

var name string

name = "qingke"

举例:

假如变量a和变量b都是整型,其中a的值为10,b的值为12,写程序交换a和b的值

var a, b int

a, b = 10, 12 // 变量赋值

fmt.Println("a = ", a, " b = ", b)

a, b = b, a  // a和b的值互换

fmt.Println("a = ", a, " b = ", b)

wKioL1TsbUawESTYAAJihRzuqR4989.jpg

首次接触GO的读者可能发现,数字交换时竟然没有引入中间变量!是的,GO就是这么任性


五、变量声明和初始化符(:=

例1:先看一下小程序

var value1 int32 = 22

value2 := 22

fmt.Println(value1 == value2)

这里先初始化变量value1,它的类型为int32,然后再使用:=符对变量value2声明并初始化,最后判断value1和value2是否相等?
wKiom1Txxnzj8vD1AAKWGFWL1Kw047.jpg

运行结果出乎意料,这里抛出一个错误:说value2的类型与value1的类型不匹配,也就是说使用:=对变量value2进行初始化时,GO编译器会根据变量值22自动推导出一个int类型给value2;在GO语言中int、int32、int64被认为是不同的类型。


例2:再看一个小程序

var a int

a := 23

程序编译时会不会报错呢?

wKioL1Tsb4bybJ5-AAJmahBJlQM654.jpg

从运行结果来看,使用:=变量的定义和初始化同时进行,第二个变量a与第一个变量a名称冲突了。






     本文转自qingkechina 51CTO博客,原文链接:http://blog.51cto.com/qingkechina/1615103,如需转载请自行联系原作者


相关文章
|
2月前
|
算法 Java Go
【GoGin】(1)上手Go Gin 基于Go语言开发的Web框架,本文介绍了各种路由的配置信息;包含各场景下请求参数的基本传入接收
gin 框架中采用的路优酷是基于httprouter做的是一个高性能的 HTTP 请求路由器,适用于 Go 语言。它的设计目标是提供高效的路由匹配和低内存占用,特别适合需要高性能和简单路由的应用场景。
244 4
|
3月前
|
Linux Go iOS开发
Go语言100个实战案例-进阶与部署篇:使用Go打包生成可执行文件
本文详解Go语言打包与跨平台编译技巧,涵盖`go build`命令、多平台构建、二进制优化及资源嵌入(embed),助你将项目编译为无依赖的独立可执行文件,轻松实现高效分发与部署。
|
2月前
|
存储 安全 Java
【Golang】(4)Go里面的指针如何?函数与方法怎么不一样?带你了解Go不同于其他高级语言的语法
结构体可以存储一组不同类型的数据,是一种符合类型。Go抛弃了类与继承,同时也抛弃了构造方法,刻意弱化了面向对象的功能,Go并非是一个传统OOP的语言,但是Go依旧有着OOP的影子,通过结构体和方法也可以模拟出一个类。
181 1
|
5月前
|
JSON 中间件 Go
Go语言实战指南 —— Go中的反射机制:reflect 包使用
Go语言中的反射机制通过`reflect`包实现,允许程序在运行时动态检查变量类型、获取或设置值、调用方法等。它适用于初中级开发者深入理解Go的动态能力,帮助构建通用工具、中间件和ORM系统等。
306 63
|
4月前
|
Cloud Native 安全 Java
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
291 1
|
4月前
|
Cloud Native Go API
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
383 0
|
4月前
|
Cloud Native Java Go
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
246 0
|
4月前
|
Cloud Native Java 中间件
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
223 0
|
4月前
|
Cloud Native Java Go
Go:为云原生而生的高效语言
Go:为云原生而生的高效语言
321 0
|
4月前
|
数据采集 Go API
Go语言实战案例:多协程并发下载网页内容
本文是《Go语言100个实战案例 · 网络与并发篇》第6篇,讲解如何使用 Goroutine 和 Channel 实现多协程并发抓取网页内容,提升网络请求效率。通过实战掌握高并发编程技巧,构建爬虫、内容聚合器等工具,涵盖 WaitGroup、超时控制、错误处理等核心知识点。