golang的命名风格、声明、可见性和生命周期

本文介绍了Go语言中的变量声明和作用域规则,包括函数内部和外部的声明方式,以及大小写字母开头对包内包外可见性的区别。同时,讲解了变量的生命周期、类型推断以及短变量声明的使用场景。此外,还提到了变量可能在栈上或堆上分配的情况,以及GC(垃圾回收)的基本原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

可见性与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找不到的东西就会被回收。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值