`

go局部变量和全局变量

    博客分类:
  • go
 
阅读更多
go用const关键字定义常量,用var关键字定义变量。定义的方式:var {key} {type}
定义单个对象:
var str string = "hello"

定义多个统一类型:
var p, q float32 = 1.1, 2.2

或:
var (
	k = 1
	t = 2
)

注意:string和float32可以去掉,编译器会自动判断。

一个变量在定义之后在程序有一定范围可以使用,我们成为作用域,根据作用域大小,我们可以分为全局变量和局部变量。在函数外声明的变量称为全局变量,可以在函数中随意用。在函数中声明的对象,作用域只在这个函数中,我们称为局部变量,下面来个例子说明一下:
package main

var a = "G"

var (
	k = 1
	t = 2
)

var p, q float32 = 1.1, 2.2

func main() {
	var a string
	a = "t"
	b := "q"
	n()
	m()
	n()
	print("main :\n")
	print(a, b, q, p)
}

func n() {
	print(a)
}

func m() {
	a = "O"
	print(a)
}

上面例子中:a,k,t,p,q都是全局变量,在函数外声明
在main函数中,a,b为局部变量。
注意::a既是局部变量,又是全局变量。
:=也是一种赋值方法,省略关键字var 会自动判断变量类型。
解析:函数从main方法开始执行,方法体
第一行:定义a为string类型变量
第二行:把字符串t赋值给a
第三行:定义b为string类型并把字符串q赋值给它。
第四行:执行n函数,输出a,这个a取的全局变量,所以输出G
第五行:执行m函数,先把全局变量a变成O,所以输出O
第六行:执行n函数,因为a在m函数中变成O,所以n输出O
第八行:输出a,b,q,p的值,这里的a取的是局部变量a,所以是t。
注意如果把var a string注释掉,a=“t”就修改的全局变量,这样结果就完全不同。

结论:函数中如果重新定义了全局变量,那么函数中会把全局变量的值隐藏掉。
全局变量定义了没有被引用不会报错
局部变量定义了没有被引用会报错:declared and not used
分享到:
评论

相关推荐

    Go语言基础、进阶、提高课程第十节Go语言 变量作用域1

    本节课程主要讲解了Go语言中变量的三种作用域:局部变量、全局变量和形式参数。 1. 局部变量 局部变量是在函数内部声明的,它们的作用域仅限于该函数。这意味着在函数外部无法访问这些变量。例如: ```go func ...

    Go语言基础、进阶、提高课程五节Go语言 变量1

    在本篇内容中,我们将深入探讨Go语言变量的声明和使用。 1. **基本变量声明**: - 使用`var`关键字进行声明,同时指定变量类型。例如: ```go var v_name v_type ``` 如果未在声明时赋值,Go会为变量赋予对应...

    Go语言基础(变量和基本类型).zip

    在本资料“Go语言基础(变量和基本类型)”中,我们将深入探讨Go语言中的变量定义和基本数据类型。 首先,让我们从变量开始。在Go语言中,变量是存储数据的内存位置,它们的值可以在程序运行时改变。Go提供了一种...

    3.Golang的基础语法(变量,常量)1

    在Golang中,如果在同一个作用域内同时存在全局变量和局部变量,局部变量会覆盖全局变量的引用。因此,在函数内部声明的同名变量会优先于全局变量。 总结起来,Golang中的变量和常量是编程中必不可少的元素,理解...

    go代码-GO变量练习

    `main.go`文件中的变量可能包括局部变量和全局变量,这取决于它们在函数内外的位置。 4. **变量的生命周期** 局部变量在进入其所在的作用域时创建,在离开该作用域时销毁。而全局变量在程序开始运行时创建,在程序...

    golang的gc回收针对堆还是栈?变量内存分配在堆还是栈?

    这里不讲垃圾回收的机制 先给出三个结论: golang的垃圾回收是针对堆的(垃圾回收都是针对堆的,这里只是做一个简单的证明) 引用类型的全局变量内存...注意这里说的是通常,因为变量又分为局部变量和全局变量。 当变

    手撕Go语言v1.1.pdf

    Go语言(又称Golang)是一种静态类型的编程语言,由Google工程师Robert Griesemer、Rob Pike及Ken Thompson在2007年开始设计并开发,于2009年正式发布。它被设计成一种简洁、高效且易于学习的语言,旨在解决现代软件...

    2022年数据库应用技术考试知识点.doc

    本文档主要介绍了数据库应用技术的知识点,涵盖了系统数据类型、用户定义数据类型、局部变量和全局变量、SQL Server 运算符的优先级别、数学函数、字符串函数、日期函数、转换函数、系统函数、聚合函数、批和脚本、...

    go注意点.mdgo学习高级文件(个人整理)

    在Go语言中,变量的声明和使用有着严格的规则,这些规则确保了程序的健壮性和可维护性。 1. **作用域内的唯一性**:无论是全局变量还是局部变量,在相同的作用域内都不能有同名的变量存在。例如,在同一个函数内部...

    Go语言基本语法.pptx(共64页,包括变量、数据类型、运算符)

    **1.2 局部变量与全局变量** - **局部变量**: 定义在花括号({})内的变量,其作用域仅限于该花括号内。 - **全局变量**: 定义在所有函数和花括号({})外的变量,可以在整个程序范围内被访问。 **1.3 变量声明与初始化*...

    Go-Delve的GUI前端

    3. **变量查看**:在调试过程中,可以实时查看当前作用域内的变量值,包括局部变量、全局变量以及函数参数。 4. **调用堆栈**:显示当前的调用堆栈,可以看到程序如何从一个函数调用到另一个函数,有助于理解代码...

    数据库应用技术考试知识点.doc

    在SQL Server中,变量可以分为局部变量和全局变量。局部变量使用DECLARE语句声明,并使用SET或SELECT语句赋值。全局变量可以分为两类,一类是与SQL Server连接有关的全局变量,如@@rowcount表示受最近一个语句影响的...

    学习go语言(中文)

    局部变量仅在其定义的块中可见,而全局变量在整个程序中都可访问。 #### 3. 多返回值与命名返回参数 Go语言允许函数返回多个值,这在处理复杂任务时非常有用。此外,Go还支持命名返回参数,使得代码更加清晰易读。 ...

    sqlserver编程结构[参考].pdf

    局部变量以"@变量名"的形式定义,仅在定义它的批处理内有效,而全局变量(如@@变量名)存储服务器状态信息,一般只能读取不能修改。声明局部变量的语法是"DECLARE @变量名 数据类型",可以一次声明多个变量,并且...

    Go - Golang - An Introduction to Programming in Go

    这部分内容解释了局部变量和全局变量的区别,并介绍了如何确定一个变量可以在何处被访问。 **4.3 常量** 常量是指一旦被赋值就不能更改的值。本节讲解了如何定义常量、如何使用多个变量同时赋值给一组常量,以及...

    Golang开发工程师笔试题1

    11. **局部变量初始化**:Go语言推荐使用短变量声明语法,即 C. `i := 10`。 12. **常量定义**: - A. 错误,不能在一个常量定义中混合类型。 - B. 正确,常量组定义。 - C. 错误,New() 返回的是错误接口,不能...

    sql数据库第九章sql数据库第九章.ppt

    变量则分为局部变量和全局变量,局部变量在批处理、存储过程或触发器内使用,生命周期仅限于此,以 "@" 开头声明,可通过DECLARE定义,使用SET或SELECT赋值。全局变量则是系统预定义的,作用范围更广。 表达式用于...

Global site tag (gtag.js) - Google Analytics