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多种变量声明与使用场景内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解golang中的结构体编解码神器Mapstructure库

    详解golang中的结构体编解码神器Mapstructure库

    mapstructure是GO字典(map[string]interface{})和Go结构体之间转换的编解码工具,这篇文章主要为大家介绍一下Mapstructure库的相关使用,希望对大家有所帮助
    2023-09-09
  • Go语言带缓冲的通道实现

    Go语言带缓冲的通道实现

    这篇文章主要介绍了Go语言带缓冲的通道实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Go语言开发环境搭建与初探(Windows平台下)

    Go语言开发环境搭建与初探(Windows平台下)

    Go是Google开发的一种编译型,並發型,并具有垃圾回收功能的编程语言,可能很多人想学习go语言,那么首先就要了解go语言的环境配置方法
    2014-10-10
  • Go1.21新增slices包的用法详解

    Go1.21新增slices包的用法详解

    Go 1.21新增的 slices 包提供了很多和切片相关的函数,可以用于任何类型的切片,这篇文章主要来和大家介绍一下slices包中相关函数的用法,需要的可以参考一下
    2023-08-08
  • 通过Go channel批量读取数据的示例详解

    通过Go channel批量读取数据的示例详解

    批量处理的主要逻辑是:从 channel 中接收数据,积累到一定数量或者达到时间限制后,将数据批量处理(例如发送到 Kafka 或者写入网络),下面我将展示一个从 Go channel 中批量读取数据,并批量发送到 Kafka 和批量写入网络数据的示例,需要的朋友可以参考下
    2024-10-10
  • Go本地测试小技巧解耦任务拆解

    Go本地测试小技巧解耦任务拆解

    这篇文章主要为大家介绍了Go本地测试解耦任务拆解及沟通详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • 使用docker构建golang线上部署环境的步骤详解

    使用docker构建golang线上部署环境的步骤详解

    这篇文章主要介绍了使用docker构建golang线上部署环境的步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-11-11
  • 一文初探Go语言中的reflect反射包

    一文初探Go语言中的reflect反射包

    这篇文章主要和大家分享一下Go语言中的reflect反射包,文中的示例代码讲解详细,对我们学习Go语言有一定的帮助,需要的小伙伴可以参考一下
    2022-12-12
  • 重学Go语言之运算符与控制结构详解

    重学Go语言之运算符与控制结构详解

    对于任何编程语言来说,运算符和控制结构都算是最基础的知识了,既然是基础,当然非常有必要学习,因此在这篇文章中我们就来讨论一下
    2023-02-02
  • Golang实现CronJob(定时任务)的方法详解

    Golang实现CronJob(定时任务)的方法详解

    这篇文章主要为大家详细介绍了Golang如何通过一个单 pod 去实现一个常驻服务,去跑定时任务(CronJob),文中的示例代码讲解详细,需要的可以参考下
    2023-04-04

最新评论