首页 > 其他分享 >Go语言精进之路读书笔记第8条——使用一致的变量声明形式

Go语言精进之路读书笔记第8条——使用一致的变量声明形式

时间:2024-02-01 20:45:39浏览次数:29  
标签:初始化 精进 变量 17 读书笔记 var Go 声明

Go语言常见的变量声明形式

var a int32
var s string = "hello"
var i = 13
n := 17
var (
    crlf = []byte("\r\n")
    colonSpace = []byte(": ")
)

8.1 包级变量的声明形式

1.声明并同时显式初始化

// Go编译器会自动根据等号右侧的InitExpression表达式求值的类型确定左侧所声明变量的类型
// var variableName = InitExpression
var EOF = errors.New("EOF")

// 以整型值初始化,Go编译器会将之设置为默认类型int;而以浮点值初始化的变量f,Go编译器会将之设置为默认类型float64。
var a = 17
var f = 3.14
// 如果不接受默认类型,而是要显式为包级变量a和f指定类型,那么有以下两种声明方式:
// 第一种
var a int32 = 17
var f float32 = 3.14
// 第二种
var a = int32(17)
var f = float32(3.14)

// 从一致性的角度,Go语言官方更推荐后者

2.声明的延迟初始化

// Go语言会让这些变量拥有初始的"零值"
var a int32
var f float64

3.声明聚类与就近原则

声明聚类:

  • 将同一变量声明放在一个var块中,将不同类的声明放在不同的var块中
  • 将延迟初始化的变量声明放在一个var块中,将声明并显式初始化的变量放在另一个var块中

就近原则:尽可能在靠近第一次使用变量的位置声明该变量。

8.2 局部变量的声明形式

1.对于延迟初始化的局部变量声明,采用带有var关键字的声明形式

当defer后接的闭包函数需要使用err判断函数/方法退出状态时

func Foo() {
    var err error
    defer func {
        if err != nil {
            ...
        }
    }()

    err = Bar()
    ...
}

2.对于声明且显式初始化的局部变量,建议使用短变量声明形式

a := 17
f := 3.14
s := "hello, gopher!"

a := int32(17)
f := float32(3.14)
s := string("hello, gopher!")

3.尽量在分支控制时应用短变量声明形式

如果在声明局部变量时遇到适合聚类的应用场景,也应该毫不犹豫地使用var块来声明多个局部变量

// $GOROOT/src/net/dial.go
func (r *Resolver) resolverAddrList(ctx context.Context, op, network,
	                        addr string, hint Addr) (addrList, error) {
    ...
    var (
        tcp      *TCPAddr
        udp      *UDPAddr
        IP       *IPAddr
        wildcard bool
    )
    ...
}

标签:初始化,精进,变量,17,读书笔记,var,Go,声明
From: https://www.cnblogs.com/brynchen/p/18002075

相关文章

  • RunnerGo低代码测试体验
    RunnerGo是基于go语言自研的一款企业级全栈式测试平台,采用Apache-2.0license开源协议,涵盖接口测试、性能测试、UI测试和项目管理等功能,并独创“拖拉拽”的方式快速编排真实测试场景的功能,加速产品交付周期、保证产品交付质量,为企业测试团队和产研团队提供一站式解决方案,是目前市......
  • MongoDB由浅入深(查询)
    //基础查询db.orderSlic.find();//根据ID查询db.orderSlic.find({_id:54708407});//范围查询db.orderSlic.find({"_id":{"$gte":54708407,"$lte":54708409}});//多字段分组统计db.orderSlic.aggregate([{$group:{_id:{shopId:"$......
  • laravel生成二维码,并添加背景图片,图标logo
    1、安装组件composerrequiresimplesoftwareio/simple-qrcode1.3.*在 config/app.php 注册服务提供者:SimpleSoftwareIO\QrCode\QrCodeServiceProvider::class同样在 config/app.php 添加 QrCode 门面:'QrCode'=>SimpleSoftwareIO\QrCode\Facades\QrCode::class2......
  • django 项目中,用户登录功能中间件的应用
    不是完整的Demo,简单记录下。在Django项目中,中间件(Middleware)是一个轻量级、底层的插件系统,用于全局修改Django的输入或输出。每个中间件是一个处理请求或响应的钩子,可以在视图执行之前或之后运行代码。对于用户登录功能,中间件可以用来处理多种任务,比如:验证用户的登录状态:在每......
  • Go进程内存占用那些事(一)
    为什么要探究这个问题?作为基础设施供应商,自己的服务占用多少内存,为什么要占用这么多内存,需要能说的清楚。作为一个云计算开发,这点问题都弄不清楚,说不过去。§0x01范围讨论的只限于LinuxX86平台下,因为实用第一。内存页大小为4KiB。目标:说清楚一个大型的Go进程内存消耗在了哪......
  • Mac 安装goland2023.3
    DataGrip/Goland相关工具链接:https://pan.baidu.com/s/1UTSusTKPPnIqxdKCAi1oKg提取码:9wej对应的激活码此处获取:https://docs.qq.com/doc/DZWFmak1WcVBhdENumac使用命令shxxx.sh执行如果原来有安装goland的话,需要先卸载干净访达中在资源库中清除......
  • google play(谷歌) 订阅接入 支付后台配置
    一、Google开发者平台配置回调订阅后台地址https://console.cloud.google.com/projectselector2/cloudpubsub/topic/list 新建主题   创建订阅输入回调服务端地址(付款成功后进行回调) 并且需要设置 [email protected]......
  • go build 国内 失败
    *[Go国内加速:Go国内加速镜像|Go技术论坛](https://learnku.com/go/wikis/38122) *[SECURITYERRORThisdownloaddoesNOTmatchanearlierdownloadrecordedingo.sum.Thebitsmayhavebeenreplacedontheoriginserver,oranattackermayhaveintercepte......
  • 07django
    聚合查询MySQL聚合函数:max\min\sum\count\avgfromdjango.db.modelsimportMax,Min,Sum,Avg,Countres=models.Book.objects.aggregate(Max('price'))#总计print(res)#{'price__max':Decimal('56777.98')}'''没有分组也可......
  • 程序是怎样跑起来的第二章读书笔记
    根据本章内容知道了8位=1字节,了解了用二进制数表示计算机信息的原因。只要掌握了使用二进制数来表示信息的方法及其运算机制也就自然能够了解程序的运行机制,理解了为什么计算机处理的信息要用二进制数来表示的,近一步知道用二进制数表示计算机信息的原因。计算机内部是由IC”这种......