搜索
首页后端开发GolangGo语言中变量是什么

Go语言中变量是什么

Dec 02, 2022 pm 07:53 PM
gogolanggo语言

在Go语言中,变量是程序运行过程中,内容可以变化(修改)的量; 变量是程序的基本组成单位,是内存中一个数据存储空间的表示,可以通过变量名找到变量值。变量的功能是存储用户的数据,是计算机语言中能储存计算结果或能表示值抽象概念。

Go语言中变量是什么

本教程操作环境:windows7系统、GO 1.18版本、Dell G3电脑。

1、概述

变量(Variable)是程序运行过程中,内容可以变化(修改)的量; 变量是程序的基本组成单位,是内存中一个数据存储空间的表示,可以通过变量名找到变量值。

变量的功能是存储用户的数据,是计算机语言中能储存计算结果或能表示值抽象概念。 

变量,是通过变量的标识符定位值的过程。变量的内存模拟演示:

1.png

2、定义:声明和初始化

定义变使用var关键字,需要指定其类型,可以同时初始化,如果没有指定初始化值,则使用类型的默认值,语法如下:

// 声明变量,未初始化(默认值初始化)
var name string
// 声明变量,特定值初始化
var user string = "Hank"

Go语言中的变量必须声明后才可以使用,不能直接使用未定义的变量。

3、类型默认值(零值)

Go语言的类型默认值如下所示: 整型和浮点型变量的默认值为 0。 字符串变量的默认值为空字符串。 布尔型变量默认为 bool。 切片、函数、指针变量的默认为 nil。

4、强类型

Go语言是强类型语言,变量必须有类型,同时变量仅仅可以存储特定类型的数据。【相关推荐:Go视频教程

5、类型推导

定义变量时,如果指定了初始值,则可以省略类型的定义,Go语言可以自己由数据推导出类型。 语法为:

// 声明变量,特定值初始化,类型推导出user为字符串string型
var user = "Hank"

6、短声明(定义)

为了简化定义变量,使用运算符 := 配合类型推导,可以快速完成变量的定义,语法为:

user := "hank"

7、批量定义

使用var或:=都可以一次性定义多个变量,语法为: 

var

var (
  v1 = 42
  v2 = "hank"
  )
也可以
var v1, v2 = 42, "hank"

:=

v1, v2 := 42, "hank"

推荐使用 var() 声明块语法,因为代码维护容易。

8、批量赋值

一次性为多个变量进行赋值。(类似短定义。v1, v2, v3 := 42, "hank", false) 当变量定义完毕后,再批量对其赋值,没有定义功能! 语法为:

var (
  v1 int
  v2 int
)
// 批量赋值
v1, v2 = 42, 1024

该语法,通常配合函数的批量返回来使用,一次性接收多个返回值,语法为:

func main() {
  var (
    v1 int
    v2 int
  )
  // 调用函数,接收其返回值
  v1, v2 = getData()
}
// 返回两个值的函数
func getData() (int, int) {
  // 返回了两个值(假设42为最小值,1024为最大值)
  return 42, 1024
}

非常方便的可以交换两个变量的值:

var (
  v1 = 42
  v2 = 1024
)
// 交换
v1, v2 = v2, v1

执行后,v1==1024, v2==42

9、匿名变量

标识符为_(下划线)的变量,是系统保留的匿名变量,在赋值后,会被立即释放,称之为匿名变量。其作用是变量占位符,对其变量赋值结构。通常会在批量赋值时使用。 例如,函数返回多个值,我们仅仅需要其中部分,则不需要的使用_来占位,演示:

func main() {
  var (
    v int
  )
  // 调用函数,仅仅需要第二个返回值,第一,三使用匿名变量占位
  _, v, _ = getData()
}
// 返回两个值的函数
func getData() (int, int, int) {
  // 返回3个值
  return 42, 1024, 2012
}

10、变量作用域

Go语言中的变量是块作用域。 块,指的是使用{}定义的代码段,包括函数,if/switch/for语句,或独立的{}都是块。在块内定义的变量仅仅在本块内可用。 定义,指的是 var 或者 := 定义的变量。 Go语言的作用域是层叠的,就是说内层块可以直接访问到外层块的变量,前提是内层块没有定义同名的外层变量。 演示如下:

// 全局(函数外)定义3个变量
var (
  v1 = 1
  v2 = 2
  v3 = 3
)
func main() {

  // main{}函数块,定义2个变量
  var (
    v2 = 22
    v3 = 33
  )
  fmt.Println(v1, v2, v3)
  // 结果 1 22 33

  {
    // main()函数内部{}块,定义1个变量
    var (
      v3 = 333
    )
    fmt.Println(v1, v2, v3)
    // 结果 1 22 333
  }
}

上面代码中: 在main()中,v2,v3被重新定义,则在main()中,v1是外部,而v2, v3是main函数局部的。 在main()内部的{}中,v3被重新定义,则在main()内部的{}中,v1是外部,而v2是main()定义的, v3是main()内部{}定义的的。

变量可以沿内部作用域向外部作用域查找变量的过程。

带有{}的语句,其中的变量也仅仅在内部有效,例如for,if,switch等,演示:

for i := 0; i < 10; i++ {
  fmt.Println(i)
}
fmt.Println(i)
// 会提示变量i未定义, undefined: i

注意i,是通过短声明在for内部定义的变量,仅仅在for内部有意义。

互不嵌套的{}见作用域不可见,不可互相访问。

func main() {
  {
    v := 42
  }
  {
    fmt.Println(v)
    // 会提示变量v未定义, undefined: v
  }
}

更多编程相关知识,请访问:编程教学!!

以上是Go语言中变量是什么的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
GO的选择语句:多路复用并发操作GO的选择语句:多路复用并发操作Apr 24, 2025 pm 05:21 PM

go'SselectStatementTreamLinesConcurrentProgrambyMultiplexingOperations.1)itallowSwaitingOnMultipleChannEloperations,执行thefirstreadyone.2)theDefirstreadyone.2)thedefefcasepreventlocksbysbysbysbysbysbythoplocktrograpraproxrograpraprocrecrecectefnoopeready.3)

GO中的高级并发技术:上下文和候补组GO中的高级并发技术:上下文和候补组Apr 24, 2025 pm 05:09 PM

contextancandwaitgroupsarecrucialingoformanaginggoroutineseflect.1)context contextsallowsAllowsAllowsAllowsAllowsAllingCancellationAndDeadLinesAcrossapibiboundaries,确保GoroutinesCanbestoppedGrace.2)WaitGroupsSynChronizeGoroutines,确保Allimizegoroutines,确保AllizeNizeGoROutines,确保AllimizeGoroutines

使用微服务体系结构的好处使用微服务体系结构的好处Apr 24, 2025 pm 04:29 PM

goisbeneformervicesduetoitssimplicity,效率,androbustConcurrencySupport.1)go'sdesignemphasemphasizessimplicity and效率,Idealformicroservices.2))其ConcconcurnCurnInesSandChannelsOdinesSallessallessallessAlloSalosalOsalOsalOsalOndlingConconcConccompi.3)

Golang vs. Python:利弊Golang vs. Python:利弊Apr 21, 2025 am 12:17 AM

Golangisidealforbuildingscalablesystemsduetoitsefficiencyandconcurrency,whilePythonexcelsinquickscriptinganddataanalysisduetoitssimplicityandvastecosystem.Golang'sdesignencouragesclean,readablecodeanditsgoroutinesenableefficientconcurrentoperations,t

Golang和C:并发与原始速度Golang和C:并发与原始速度Apr 21, 2025 am 12:16 AM

Golang在并发性上优于C ,而C 在原始速度上优于Golang。1)Golang通过goroutine和channel实现高效并发,适合处理大量并发任务。2)C 通过编译器优化和标准库,提供接近硬件的高性能,适合需要极致优化的应用。

为什么要使用Golang?解释的好处和优势为什么要使用Golang?解释的好处和优势Apr 21, 2025 am 12:15 AM

选择Golang的原因包括:1)高并发性能,2)静态类型系统,3)垃圾回收机制,4)丰富的标准库和生态系统,这些特性使其成为开发高效、可靠软件的理想选择。

Golang vs.C:性能和速度比较Golang vs.C:性能和速度比较Apr 21, 2025 am 12:13 AM

Golang适合快速开发和并发场景,C 适用于需要极致性能和低级控制的场景。1)Golang通过垃圾回收和并发机制提升性能,适合高并发Web服务开发。2)C 通过手动内存管理和编译器优化达到极致性能,适用于嵌入式系统开发。

golang比C快吗?探索极限golang比C快吗?探索极限Apr 20, 2025 am 12:19 AM

Golang在编译时间和并发处理上表现更好,而C 在运行速度和内存管理上更具优势。1.Golang编译速度快,适合快速开发。2.C 运行速度快,适合性能关键应用。3.Golang并发处理简单高效,适用于并发编程。4.C 手动内存管理提供更高性能,但增加开发复杂度。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

Dreamweaver Mac版

Dreamweaver Mac版

视觉化网页开发工具

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。