Golang语言的多种变量声明方式与使用场景详解

 更新时间:2022年02月14日 11:05:35   作者:frank  
Golang当中的变量类型和C/C++比较接近,一般用的比较多的也就是int,float和字符串,下面这篇文章主要给大家介绍了关于Golang语言的多种变量声明方式与使用场景的相关资料,需要的朋友可以参考下

01介绍

在程序设计中,编译器必须将代表数据的变量名称替换成该数据所在的内存地址。变量的名称、类型及内存地址通常会维持固定,但该内存地址所存储的数据在程序执行期间则可能会改变。

Golang 语言编译器需要先明确变量的内存边界,才可以使用变量。通过声明变量使用的类型,编译器可以明确变量的内存边界。

因为 Golang 语言是静态语言,它不能像动态语言那样,在运行时可以通过分析变量的值,自动确定变量的内存边界,所以在 Golang 语言中,使用变量之前,需要先声明变量。

在 Golang 语言中,在变量显式赋值的前提下,声明变量可以省略类型,和使用短变量声明方法时,也不需要指定变量类型,此时,编译器会根据变量的值通过类型推断得出变量类型,从而明确变量的内存边界。

02变量声明方式

Golang 语言的变量声明比较灵活,它支持多种变量声明的方式,包括标准声明变量,不显式赋初始值声明变量,省略类型声明变量和短变量声明。

标准声明变量

var a int = 100

阅读上面这段代码,我们可以发现 Golang 语言的标准声明变量方式包含 4 部分,分别是 var 关键字,变量名 a,变量类型 int 和变量的值 100。

不显式赋初始值声明变量

如果我们不想给声明的变量赋初始值,也可以不显式给变量赋值,省略等号和值,如下所示:

var a int

如果不显式给变量赋值,变量的值是类型的零值,即类型的默认值。

省略类型声明变量

标准声明变量方式的 4 部分,除了可以不显式给变量赋值,还可以省略类型,如下所示:

var a = 100

我们在文章开头介绍编译器需要根据变量的类型确定变量的内存边界,如果在声明变量时,未指定变量的类型,编译器还可以确定变量的内存边界吗?

答案是可以。原因是 Golang 编译器可以根据变量的赋值通过类型推断得到变量的类型。

细心的读者可能会问,Golang 语言可以将标准变量声明方式的 4 部分中类型和显式赋初始值同时省略吗?

答案是不可以。Golang 编译器必须至少明确变量的类型或初始值,二者如果都省略,编译器将无法得到变量的类型,从而也就不能根据类型明确变量的内存边界。

短变量声明

以上两种在标准声明变量方式的基础上简化的变量声明方式,都需要使用关键字 var,可能会有读者问可以省略关键字 var 吗?

答案是可以。Golang 语言还有一种最简化的声明变量的方式,短变量声明,使用短变量声明的方式,可以同时省略关键字 var 和变量的类型。

a := 100

阅读上面这段代码,它就是短变量声明,与标准变量声明的方式相比,该方式省略了关键字 var 和变量的类型。但是,细心的读者可能已经发现,= 改为 :=。Golang 编译器可以根据变量的赋值做类型推断,得到变量的类型,从而明确变量的内存边界。

短变量声明的方式虽然是 Golang 语言中最简化的变量声明的方式,但是它也有局限性,它只能用于局部变量声明。

显式类型转换

无论是省略类型显式赋初始值声明变量,还是短变量声明,它们都是 Golang 编译器根据变量的赋值,通过类型推断得出变量的默认类型。

如果我们也不想使用变量的默认类型,那么我们可以通过显式类型转换得到我们想要的变量类型,如下所示:

var a = int8(100)
b := int8(60)

变量列表声明

所有声明变量的方式,都支持变量列表声明。所谓变量列表声明,就是使用 var 关键字,通过一行代码声明多个变量。

var a, b, c int = 100, 200, 300
var d, e, f int
var g, h, i = 400, "你好", true
j, k, l := 500, "世界", 3.14

变量声明块

Golang 语言还支持变量声明块,使用关键字 var 将多个单个变量声明或变量列表声明放在一起,如下所示:

var (
    a int = 100
    b int = 200
)

var (
    c = 300
    d = 3.14
    f = true
)

var (
    e, f, g int = 10, 20, 30
    h, i, j string = "a", "b", "c"
)

03使用场景

我们介绍了多种变量声明的方式,那么每种 Golang 语言变量声明方式的使用场景分别是什么,首先,我们需要先了解 Golang 语言中变量的作用域,分别是包级变量,全局变量和局部变量。

包级变量

包级变量的作用域是只能在同一个 package 中使用。

包级变量,只能使用 var 关键字的变量声明方式,如果变量声明显式初始化,一般会使用省略类型声明变量的方式。

全局变量

全局变量的作用域是在项目的任意位置都可以使用。

如果包级变量的变量名首字母大写,也就是 Golang 语言中的导出变量,那么这个变量就成为全局变量,可以在全局使用。

全局变量,也只能使用 var 关键字的变量声明方式,如果变量声明显式初始化,一般会使用省略类型声明变量的方式。

局部变量

局部变量的作用域是只能在函数体或方法体中使用。

局部变量,一般会优先使用短变量声明的方式,除非不想给局部变量显式初始化,我们可以使用省略类型声明变量的方式。

04注意事项:

函数外的每个语句都必须以关键字开始(var、const、func等);

:= 不能使用在函数外;

_ 多用于占位,表示忽略值;

05总结

本文我们介绍 Golang 语言为什么在使用变量之前,需要先声明变量;Golang 语言有哪些变量声明的方式和 Golang 语言的每种变量声明方式适用于什么场景。

到此这篇关于Golang语言的多种变量声明方式与使用场景的文章就介绍到这了,更多相关Golang多种变量声明与使用场景内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 用Go获取短信验证码的示例代码

    用Go获取短信验证码的示例代码

    要用Go获取短信验证码,通常需要连接到一个短信服务提供商的API,并通过该API发送请求来获取验证码,由于不同的短信服务提供商可能具有不同的API和授权方式,我将以一个简单的示例介绍如何使用Go语言来获取短信验证码,需要的朋友可以参考下
    2023-07-07
  • 使用Golang获取音视频时长信息的示例代码

    使用Golang获取音视频时长信息的示例代码

    这篇文章主要介绍了如何使用Golang获取音视频时长信息,文中通过代码示例讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-03-03
  • Golang中间件设计示例详解

    Golang中间件设计示例详解

    这篇文章主要介绍了Golang中间件设计示例,中间件是在HTTP请求处理过程中,对请求进行处理的一种模式,中间件可以在请求到达处理器之前或之后对请求进行拦截,修改或者增强,同时可以对响应进行处理,需要的朋友可以参考下
    2023-05-05
  • GO语言基础入门第一个go程序解读

    GO语言基础入门第一个go程序解读

    这篇文章主要为大家介绍了GO语言基础入门的第一个go程序解读,下面来带大家进入Go语言世界helloworld的大门吧,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-11-11
  • Go语言常用字符串处理方法实例汇总

    Go语言常用字符串处理方法实例汇总

    这篇文章主要介绍了Go语言常用字符串处理方法,实例汇总了Go语言中常见的各种字符串处理技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • Golang设计模式之外观模式的实现

    Golang设计模式之外观模式的实现

    这篇文章主要介绍了Golang设计模式之外观模式的实现,外观模式是一种常用的设计模式之一,是一种结构型设计模式,它提供了一个简单的接口来访问复杂系统的各种功能,从而降低了系统的复杂度,需要详细了解可以参考下文
    2023-05-05
  • GO语言数组和切片实例详解

    GO语言数组和切片实例详解

    这篇文章主要介绍了GO语言数组和切片的用法,以实例形式较为详细的分析了GO语言中数组与切片的创建及使用技巧,是深入学习GO语言的基础,需要的朋友可以参考下
    2014-12-12
  • 基于Go语言实现一个并发下载器

    基于Go语言实现一个并发下载器

    这篇文章主要为大家详细介绍了如何利用GO语言实现一个并发的文件下载器,可以在不重新启动整个下载的情况下处理错误,感兴趣的小伙伴可以了解一下
    2023-10-10
  • golang获取prometheus数据(prometheus/client_golang包)

    golang获取prometheus数据(prometheus/client_golang包)

    本文主要介绍了使用Go语言的prometheus/client_golang包来获取Prometheus监控数据,具有一定的参考价值,感兴趣的可以了解一下
    2025-03-03
  • 深入了解Golang中reflect反射基本原理

    深入了解Golang中reflect反射基本原理

    反射是这样一种机制,它是可以让我们在程序运行时(runtime)访问、检测和修改对象本身状态或行为的一种能力。本文主要带大家来看看Golang中reflect反射基本原理,需要的可以参考一下
    2023-01-01

最新评论