11 Go的作用域
概述
在上一节的内容中,我们介绍了Go的映射,包括:声明映射、初始化映射、操作映射等。在本节中,我们将介绍Go的作用域。在Go语言中,作用域是指变量的可见性范围,它定义了变量在程序中的生命周期和可访问性。Go语言中的作用域可以分为以下几种:局部作用域、全局作用域、命名空间作用域,下面分别进行介绍。
局部作用域
局部作用域也称为函数作用域,是指在函数内部定义的所有变量和常量都具有局部作用域。这些变量和常量的生命周期仅限于函数内部,在函数外部是不可见的。
当在函数内部声明一个变量或常量时,它会在局部作用域中创建。在该函数或方法的执行期间,这些变量和常量是有效的,并且可以在函数或方法的代码块中使用。一旦函数或方法执行结束,这些变量和常量就会被销毁,其内存空间将被释放。
package mainimport "fmt"func main() {// 局部变量作用域 { var localVar = "Hello CSDN"// 输出:Hello CSDNfmt.Println(localVar)} // 局部变量作用域已经结束,到这里时localVar不再可见// 编译错误:undefined: localVarfmt.Println(localVar)
}
在上面的示例代码中,localVar是在main函数内部代码块定义的局部变量,它的作用域仅限于该函数内部的代码块。在main函数的代码块中,我们可以使用localVar,并且它对于外部是不可见的。一旦离开main函数的代码块,尝试访问localVar将导致编译错误,因为它已经超出了局部作用域的范围。
全局作用域
全局作用域也称为包作用域,是指变量在整个程序中都可以被访问和使用的作用域。全局变量在函数体外声明,可以在整个包的代码文件中使用。在Go语言中,所有在函数外部定义的变量都具有全局作用域,这意味着它们可以在整个程序的执行过程中被访问。
需要注意的是:如果在某个函数内部定义了与全局变量同名的变量,则函数内部的变量会覆盖全局变量,但不会影响其他函数对全局变量的访问。
package mainimport "fmt"// 全局变量声明
var globalVar = "Global CSDN"func main() {// 局部变量声明 var localVar = "Local CSDN" // 输出:Global CSDNfmt.Println(globalVar)// 输出:Local CSDNfmt.Println(localVar)// 同名局部变量覆盖全局变量func() {var globalVar = "Local CSDN 2"// 输出:Local CSDN 2fmt.Println(globalVar) }() // 函数内部访问全局变量func(x int) {// 输出:Global CSDNfmt.Println(globalVar)// 输出:66fmt.Println(x)}(66)
}
在上面的示例代码中,我们声明了一个全局变量globalVar,并在main函数内部声明了一个局部变量localVar。我们可以从main函数内部,以及嵌套的函数内部访问全局变量globalVar。当嵌套函数内部声明了同名的局部变量globalVar时,则会覆盖全局变量globalVar。
注意:在同一个包内,全局变量可以在任何函数之间共享和访问。但是,在不同的包之间,全局变量是独立的,即每个包都有自己的一套全局变量。
命名空间作用域
命名空间作用域是指代码文件中每个包所具有的独立作用域。每个包都有自己的命名空间,其中声明的变量、函数和类型等在该包的代码文件中是可见的,但在其他包中是不可见的。
命名空间作用域用于隔离不同包之间的代码,以避免命名冲突和意外访问。在同一命名空间下的代码可以自由地访问和共享变量、函数和类型等,但不同命名空间之间的代码是相互独立的。
在Go语言中,如果我们在一个包中声明了一个变量或函数,其他包无法直接访问该变量或函数,除非我们通过导入该包并使用该变量或函数的导出名进行访问。这种命名空间隔离机制有助于维护代码的清晰性和可维护性。
在下面的示例代码中,我们编写了两个go源码文件,其中一个为example1.go文件。
// 文件名:example1.go
package example1var Var1 = "Hello, CSDN"func Func1() {fmt.Println(Var1)
}
另外一个为example2.go文件。
// 文件名:example2.go
package example2import "fmt"
import "example1"func main() {// 输出:Hello, CSDNfmt.Println(example1.Var1)// 输出:Hello, CSDNexample1.Func1()
}
在上面的示例代码中,example1包和example2包分别具有独立的命名空间。在example1包中,我们声明了变量Var1和函数Func1,它们在该包的代码文件中是可见的。在example2包中,我们导入了example1包并尝试访问其中的变量和函数。通过使用导入的包的名称作为前缀,我们可以访问example1包中的变量和函数。
相关文章:
11 Go的作用域
概述 在上一节的内容中,我们介绍了Go的映射,包括:声明映射、初始化映射、操作映射等。在本节中,我们将介绍Go的作用域。在Go语言中,作用域是指变量的可见性范围,它定义了变量在程序中的生命周期和可访问性。…...
RabbitMQ之消息应答和持久化
文章目录 前言一、消息应答1.概念2.自动应答3.消息应答方法4.Multiple 的解释5.消息自动重新入队6.消息手动应答代码7.手动应答效果演示 二、RabbitMQ持久化1.概念2.队列如何实现持久化3.消息实现持久化4.不公平分发5.预取值 总结 前言 在RabbitMQ中,我们的消费者在…...
【分享】Excel“只读方式”的两种模式
查阅Excel表格的时候,担心不小心修改了内容,可以给Excel设置以“只读方式”打开,这样就算修改了内容也不能直接保存表格。Excel表格可以设置两种“只读方式”,一起来看看吧! “只读方式” 1: 打开Excel表…...
华为与美团达成合作,正式启动鸿蒙原生应用开发。
11月13日,华为宣布与美团以HarmonyOS为基础进行产业创新、技术应用、商业发展等方面展开全面合作,全力支持美团启动开发鸿蒙原生应用工作。 自9月25日华为宣布全新HarmonyOS NEXT蓄势待发、鸿蒙原生应用全面启动以来,已有金融、旅行、社交等…...
The 8th China Open Source Conference Successfully Concludes
由开源社主办的第八届中国开源年会(COSCon23)于 2023年10月29日在成都圆满收官。本次大会,为期两天,线下参会报名逾千人次,在线直播观看人数总计 168610 人,直播观看次数达 248725 次,官网累计浏…...
【星海出品】SDN neutron (四) 流分析
Neutron框架之流分析 1.控制端neutron-server通过wsgi接收北向REST API请求,neutron-plugin通过rpc与设备端进行南向通信。 2.设备端agent则向上通过rpc与控制端进行通信,向下则直接在本地对网络设备进行配置。 3.Neutron-agent的实现很多,彼…...
数据分析法宝,一个 SQL 语句查询多个异构数据源
随着企业数据量呈现出爆炸式增长,跨部门、跨应用、跨平台的数据交互需求越来越频繁,传统的数据查询方式已经难以满足这些需求。同时,不同数据库系统之间的数据格式、查询语言等都存在差异,直接进行跨库查询十分困难。 原生跨库查…...
解决:element ui表格表头自定义输入框单元格el-input不能输入问题
表格表头如图所示,有 40-45,45-50 数据,且以输入框形式呈现,现想修改其数据或点击右侧加号增加新数据编辑。结果不能输入,部分代码如下 <template v-if"columnData.length > 0"><el-table-colu…...
Android 透明度设置
目录 一、透明度对照表 二、透明度介绍 三、透明度设置 3.1 xml设置 3.2 代码设置 一、透明度对照表 注:00是完全透明,FF就是完全不透明 我们的UI小姐姐就喜欢给「不透明度」,这个需要自己判断一下。 完全透明:0% HEX: 00 透明度:1%…...
python语言的由来与发展历程
Python语言的由来可以追溯到1989年,由Guido van Rossum(吉多范罗苏姆)创造。在他的业余时间里,Guido van Rossum为了打发时间,决定创造一种新的编程语言。他受到了ABC语言的启发,ABC语言是一种过程式编程语…...
electronjs入门-编辑器应用程序
我们将在Electron中创建一个新项目,如我们在第1章中所示,名为“编辑器”,我们将在下一章中使用它来创建编辑器;在index.js中,这是我们的主要过程;请记住为Electron软件包放置必要的依赖项: npm…...
Xilinx Kintex7中端FPGA解码MIPI视频,基于MIPI CSI-2 RX Subsystem架构实现,提供工程源码和技术支持
目录 1、前言免责声明 2、我这里已有的 MIPI 编解码方案3、本 MIPI CSI2 模块性能及其优缺点4、详细设计方案设计原理框图OV5640及其配置权电阻硬件方案MIPI CSI-2 RX SubsystemSensor Demosaic图像格式转换Gammer LUT伽马校正VDMA图像缓存AXI4-Stream toVideo OutHDMI输出 5、…...
SIMCSE求相似度分数
import torch from transformers import AutoTokenizer, AutoModelForMaskedLM from sklearn.metrics.pairwise import cosine_similarity# simcse相似度分数 def simcse_similar(model, tokenizer, text_a, text_b):inputs_source tokenizer(text_a, return_tensors"pt&…...
java入门,从CK到一部分数据到mysql
一、需求 需要从生产环境ck数据库导数据到mysql,数据量大约100w条记录。 二、处理步骤 1、这里的关键词是生产库,第二就是100w条记录。所以处理数据的时候就要遵守一定的规范。首先将原数据库表进行备份,或者将需要导出的数据建一张新的表了…...
LeetCode(13)除自身以外数组的乘积【数组/字符串】【中等】
目录 1.题目2.答案3.提交结果截图 链接: 238. 除自身以外数组的乘积 1.题目 给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素…...
WPF资源,静态资源,动态资源
WPF资源介绍 在WPF(Windows Presentation Foundation)中,资源是一种可以在多个地方重复使用的对象。资源可以是任何类型的对象,比如字符串、颜色、画刷、形状、动画、数据模板、样式等。通过将这些对象定义为资源,你可…...
绘图软件 OmniGraffle mac中文版特点说明
OmniGraffle mac是一款图形绘制和图表设计软件,主要面向 macOS 和 iOS 平台。它适用于用户创建流程图、组织结构图、原型设计、网站线框图、地图等各种类型的图形。该软件的界面直观,用户友好,让用户能够轻松地创建和编辑复杂的图形。 OmniGr…...
ai批量剪辑矩阵无人直播一站式托管系统源头技术开发
一、剪辑技术开发 智能剪辑:咱们研发公司自主研发的,包括算法,算法是阶乘算法,无限产出,六大剪辑模式已经满足当下需求了,当然剪辑出的视频可以一键发布,也可以内部批量发布,都可以的…...
CCNA课程实验-14-Final_Lab
目录 实验条件网络拓朴需求 配置实现1. 配置PC1~3, DHCP_Server的vlan2. VLAN10、20的网关为MSW1对应的SVI,VLAN30、40的网关为MSW2对应的SVI;3. 配置5台交换机之间线路均为Trunk4. 配置5台交换机均启用Rapid-PVST(RSTP)5. 配置DHCP Server,创…...
Latex在图表标题里面引用参考文献时,出现参考文献顺序混乱的解决方案(适用于bibtex)
问题描述 如果你在figure环境的\caption或\captionof中使用\cite,但是参考文献的顺序仍然不正确,可能是因为LaTeX的处理流程导致了这个问题。 比如图片在第二章节但里面引用了参考文献,在文章末尾的参考文献第二章图片的参考文献顺序&#…...
Topit:macOS窗口置顶神器,让多任务处理效率翻倍
Topit:macOS窗口置顶神器,让多任务处理效率翻倍 【免费下载链接】Topit Pin any window to the top of your screen / 在Mac上将你的任何窗口强制置顶 项目地址: https://gitcode.com/gh_mirrors/to/Topit 你是否经常在macOS上同时处理多个任务时…...
Shiro RememberMe反序列化漏洞深度解析与实战利用
1. 这个漏洞不是“老古董”,而是理解Java安全边界的活教材很多人看到CVE-2016-4437,第一反应是“Shiro都淘汰了,还讲这个干啥?”——我去年在给一家做政企内部系统的客户做渗透复测时,就遇到过一个上线三年的审批平台&…...
力扣HOT100(30)两两交换链表中的节点
链表的交换要注意 “链表不断链”。前驱和后继都要连着迭代法(必学死磕!O (n) 时间,O (1) 空间)1. 为什么必须用虚拟头节点?因为交换后链表的头节点会变! 比如示例 1 中,原来的头是 1࿰…...
保姆级教程:Windows系统下Arcgis 10.2从下载、安装到汉化一次搞定(附常见License启动失败解决方案)
Windows系统下Arcgis 10.2完整安装与汉化实战指南第一次接触Arcgis的新手往往会被复杂的安装流程和神秘的License Manager搞得晕头转向。作为一款功能强大的地理信息系统软件,Arcgis在科研、城市规划、环境监测等领域有着广泛应用,但它的安装过程确实会让…...
Web渗透测试能力成长地图:从工具使用到漏洞认知跃迁
1. 这不是工具清单,而是一张Web渗透测试的“能力成长地图”你刚点开这篇文章,大概率正站在两个路口之间:一边是网上铺天盖地的“十大免费扫描器推荐”,点进去全是截图下载链接一句“一键扫漏洞”,结果装完跑两下&#…...
Windows Cleaner深度解析:5大核心模块彻底解决系统空间不足问题
Windows Cleaner深度解析:5大核心模块彻底解决系统空间不足问题 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner Windows Cleaner是一款完全免费开源的…...
深度解析网络设备权限管理工具:中兴光猫工厂模式与Telnet服务完整指南
深度解析网络设备权限管理工具:中兴光猫工厂模式与Telnet服务完整指南 【免费下载链接】zteOnu A tool that can open ZTE onu device factory mode 项目地址: https://gitcode.com/gh_mirrors/zt/zteOnu 在当今网络设备管理领域,获取设备完整控制…...
独立开发者如何利用Taotoken Token Plan,以更低成本启动AI项目
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 独立开发者如何利用Taotoken Token Plan,以更低成本启动AI项目 对于独立开发者或小型团队而言,启动一个集成…...
企业云盘签章技术方案:从数字签名原理到工程落地
背景 电子签章在企业云盘中的落地,不只是一个"上传盖章图片"的功能实现。本质上,它是一套涉及数字签名、PKI基础设施、文档完整性校验的综合性技术方案。本文从技术选型角度,说清楚企业云盘内置签章需要解决哪些问题、主流实现方案…...
NHSE终极教程:5分钟掌握动物森友会存档编辑技巧
NHSE终极教程:5分钟掌握动物森友会存档编辑技巧 【免费下载链接】NHSE Animal Crossing: New Horizons save editor 项目地址: https://gitcode.com/gh_mirrors/nh/NHSE 还在为《集合啦!动物森友会》的收集烦恼吗?想快速打造梦想岛屿却…...
