热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

可见性与scope的命名规范和变量生命周期

本文介绍了在Go语言中可见性与scope的规则,包括在函数内外声明的可见性、命名规范和命名风格,以及变量声明和短变量声明的语法。同时,还介绍了变量的生命周期,包括包级别变量和局部变量的生命周期,以及变量在堆和栈上分配的规则和逃逸分析的概念。

可见性与scope

  • 如果在函数中声明,则仅在函数内有效;

  • 如果在函数外声明且小写开头,则在包内可见,即,在当前文件内可见,以及在同一个包内的其它源文件内可见;

  • 如果在函数外声明且大写开头,则设为export,对于包外可见和可用。

没有所谓的public/private之类的关键字了。

命名风格

可见性越大,则命名可以越长越详细,可见性越小,命名越简单。

使用驼峰命名法,例如 userName, 而不是 user_name

对于专用名词的缩写,常使用相同的大小写来表示,比如 htmlEscape, HTMLEscapeescapeHTML,而不是使用escapeHtml

变量声明

语法:

var name type = expression

通常类型和表达式可以省略一个,但不能全省略。如果省略类型,则根据expression来推断类型,如果省略表达式,则根据类型自动初始化为零值。数字的零值是0,字符串的零值是"",布尔类型的零值是false,接口和引用类型的零值是nil,数组和结构体的零值是其所有元素的零值。

var i int // 初始化为0
var i = 0 // 推断为int类型
var i, j, k int // 三个int,初始化为0
var i, j, k = true, 2.3, "hello" // 推断为bool类型、float64类型和string类型

短变量声明

短变量的声明可以省去var,并使用expression来推断类型,语法如下:

name := expression

使用短变量声明的形式,通常说明它本身不重要,属于临时变量。

注意: :=是短变量声明,=是赋值。

type和expression可以二选一,var和:可以二选一。 :经常与expression组合。

变量的生命周期

生命周期就是值变量存在的时间段。

包级别的变量的生命周期是永久,有点类似java的静态属性。

局部变量的生命周期是从创建到不可被访问。当它不可达时,就等着被GC。GC的理念跟java差不多,GCRoot是包级别的变量+当前执行函数的局部变量,从GCRoot找不到的东西就会被回收。

变量可能会创建在堆上或栈上,依据是根据编译器的逃逸分析,如果生命周期很短,则在栈上分配,出栈时可以直接清空内存,如果生命周期很长,比如包级别的变量,或者成功逃逸的变量(将内存地址赋值给了包级别的变量),则在对上分配内存。


推荐阅读
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
author-avatar
MrSydi2u_604
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有