Go语言基础-变量

Posted 互联网老辛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Go语言基础-变量相关的知识,希望对你有一定的参考价值。

一. 前言

我们之前提到过,Go语言是静态类型的语言,所以它的变量是有明确类型的,编译器也会检查变量类型是否正确。

二. 关于变量的知识点

1. 变量的概念

变量相当于内存中的一个数据存储空间的标识,你可以把变量看做是一个内存地址,通过这个地址,我们可以找到这个地址所存储的数据。

这里要注意的是: 变量不是编程必须有的概念,很多函数式的编程语言是没有变量的,因为在函数式编程中,所有的值都是不可变的。

但我们今天要探讨的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 量变加空格去赋值,问题都不大。

  1. 变量表示的是内存中的某一块存储空间。

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() 

var x,y int
var(
	a int
	b bool
)
var c,d int = 1,2
var e,f = 123,"hello,world"
g,h := 456,"itlaoxin"	

fmt.Println(x,y,a,b,c,d,e,f,g,h)


四. 小知识

1. 如何优雅的为程序中的变量命名?

  1. 见名知意

我们经常强调,函数要准确和精简,看到函数名字就知道是干嘛的。
所以尽可能的使用单词和缩写,不要使用拼音,尤其是不要使用任何双关语和缩写。

好的代码几乎不需要注释,注释越多证明代码可读性越差。

当你不知道如何命名的时候,可以使用下面的网站,他会给你一些建议。

变量命名辅助网站

推荐书籍《代码整洁之道》,这本书也不难,在学习完编程之前可以粗略读。

以上是关于Go语言基础-变量的主要内容,如果未能解决你的问题,请参考以下文章

Go语言变量

Go语言之变量,常量

[GO专栏-3]Go语言的变量定义

Go语言变量

Go语言变量

go语言变量