`

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
分享到:
评论

相关推荐

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

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

    go开发实战.doc

    5.8.1 局部变量 32 5.8.2 全局变量 33 5.8.3 不同作用域同名变量 33 6. 工程管理 34 6.1 工作区 34 6.1.1 工作区介绍 34 6.1.2 GOPATH设置 35 6.2 包 35 6.2.1 自定义包 35 6.2.2 main包 36 6.2.3 main...

    GO入门指南:4.4章节练习题4.1、4.2、4.3习题分析

    然后执行函数m,此时声明了一个局部变量a,并赋值为“O”,所以下一个打印的字母为”O“。当出了函数m()作用域时,局部变量a析构。当再次执行函数n()时,此时打印的是全局变量a,所以为”G“。 所以该题结果为: GO

    context:Context是一个R包,用于在大型项目中导入依赖项

    我们不仅指软件包,还指的是跟踪当前隐式并确定未注释的局部变量和全局变量的起源。 上下文包为在较大的项目中构造R文件提供了一种简单的工具,如上面的定义中所述,可能需要更仔细地管理依赖项。 默认情况下,...

    8cc.go:用Go语言编写的C编译器

    :) 功能声明函数调用分配给局部变量分配给全局变量primitiv数据类型(int,char,char *,float,double) 复合数据类型(数组,结构,联合,指针) 指针算术指针取消引用测试$ docker run -it --rm -v `pwd`:/mnt ...

    mugo:Mugo,一个可编译自身的Go子集的玩具编译器

    Mugo Mugo是用于Go编程语言的一小部分的单遍编译器-足以编译... 它输出(非常幼稚)x86-64程序集,并且仅支持足够的语言来实现Mugo编译器: int和string类型,切片,函数,局部变量,全局变量以及基本表达式和语句。

    最新go语言中文教程及手册(强烈推荐)

    Go 编程语言是一个使得程序员更加有效率的开源项目。Go 是有表 达力、简洁、清晰和有效率的。它的并行机制使其很容易编写多核 和网络应用,而新的类型系统允许构建有性的模块化程序。Go 编译到机器码非常...

    uber-go-style-guide-kr:Uber的Go Style Guide官方翻译成韩文。 作为贡献的一部分链接到uber-goguide

    uber-go-style-guide-kr 翻译成韩文由于2019年10月17日对原始文档进行的第一笔翻译如果您发现任何更新,问题或改进...前缀未导出的全局变量嵌入结构使用字段名称初始化结构 局部变量声明nil是有效切片缩小变量范围避免

    uber-style-guide-ja

    前缀未导出的全局变量嵌入结构使用字段名称初始化结构局部变量声明nil是有效切片缩小变量范围避免裸参数使用原始字符串文字避免转义初始化结构引用初始化地图在Printf外部格式化字符串命名Printf样式的函数模式测试...

    SQL sever 实训

    --单元九 语言编程基础 --计算有多少种产品(假设为x),然后显示一条信息:共有X种产品 DECLARE @X int SET @X =(SELECT COUNT (*) FROM Product ) PRINT '共有'+convert (char(2),@x)+'种产品。' GO --编写...

    黄淮学院2010学年第二学期SQL server期末考试

    SQL server 中的变量分为两种,全局变量和局部变量。其中全局变量的名称以________ 字符开始,有系统定义和维护。局部变量以 _________ 字符开始,由用户自己定义和赋值。 一个事务的操作必须是具备以下四个属性:...

    像计算机科学家一样思考Python(第2版).pdf

    3.8 变量和形参是局部的 23 3.9 栈图 23 3.10 有返回值函数和无返回值函数 24 3.11 为什么要有函数 25 3.12 调试 26 3.13 术语表 26 3.14 练习 27 第4章 案例研究:接口设计 30 4.1 turtle模块 30...

    java泛型源码-GENESIS:通用源代码预处理器

    一个功能强大的类似于C的预处理器,具有多令牌变量和函数,局部和全局作用域,包含,导入,赋值,表达式,条件,循环和函数调用。 将Allman样式转换为K&R样式。 通过多令牌参数实例化的泛型类型。 句法 变数 除非在...

    JavaScript基础和实例代码

    2.9.2 全局函数与局部函数 2.9.3 作为对象的函数 2.9.4 函数递归调用 2.9.5 语言注释语句 2.9.6 函数应用注意事项 2.10 本章小结 第3章 JavaScript事件处理 3.1 什么是事件 3.2 HTML文档事件 3.2.1 事件捆绑 3.2.2 ...

    源文件程序天下JAVASCRIPT实例自学手册

    2.9.2 全局函数与局部函数 2.9.3 作为对象的函数 2.9.4 函数递归调用 2.9.5 语言注释语句 2.9.6 函数应用注意事项 2.10 本章小结 第3章 JavaScript事件处理 3.1 什么是事件 3.2 HTML文档事件 3.2.1 事件捆绑 3.2.2 ...

    C++复习资料之系列

    下列选项中,( a,b,c )能交换变量a和b的值。 (a) t=b ;b=a ;a=t; (b) a=a+b ;b=a-b ;a=a-b; (c) t=a ;a=b ;b=t; (d) a=b ; b=a ; 14.执行语句 int i = 10,*p = &i; 后,下面描述错误的是( a ...

    McGraw C++程序调试实用手册

    5.10.l 局部变量的自动初始化 5.10.2 检查函数指针调用稚栈的合法性 5.10.3 检查调用堆栈的合法性 5.11 TRACEN 5.12 VEAIFY宏 5.13 移植Visual C++旧的32位版本 5.13.l 转换早期的32位工作空间和工程 ...

    JavaScript的History API使搜索引擎抓取AJAX内容

    它使用的就是HTML5 history新增的几个API,作为window的一个全局变量,在HTML4的时代history已不是什么新鲜的事物了。我们经常使用的就有 history.back()以及history.go() 。 我一直以为没有办法做到,直到前两天...

    PHP基础教程 是一个比较有价值的PHP新手教程!

    所有变量都是局部变量,为了使得定义的函数中可以使用外部变量,使用global语句。而你要将该变量的作用范围限制在该函数之内,使用static语句。 $g_var = 1 ; // 全局范围 function test() { global $g_var; // 这样...

    操作系统(内存管理)

    这三个变量都是全局变量: 清单 1. 我们的简单分配程序的全局变量 int has_initialized = 0; void *managed_memory_start; void *last_valid_address; 如前所述,被映射的内存的边界(最后一个有效地址)常...

Global site tag (gtag.js) - Google Analytics