首页 > 其他分享 >go-shadowsw问题小记

go-shadowsw问题小记

时间:2023-06-02 13:11:06浏览次数:32  
标签:shadows return 变量 err shadowsw go buf 小记

Golang shadows是指在Go语言中,一个变量在内部作用域中被另一个同名同类型的变量声明而隐藏的情况。这种情况可能导致一些意想不到的结果,比如返回错误的值或者引用错误的变量。

 1 func BadRead(f *os.File, buf []byte) err error {
 2   for {
 3     n, err := f.Read(buf) // shadows the function variable 'err'
 4 
 5     if err != nil {
 6       //break // causes return of wrong value
 7       return err     
 8     }
 9     foo(buf)
10   }
11   return err
12 }

 

 for循环中的 err 被主函数在出参中已经声明过,而for循环内,进行了二次同名声明。

 且同时进行了返回,这种情况下,会触发shadows的报错。

 这个函数中,内部循环中的err变量隐藏了外部函数中的err变量,导致最后返回的是未定义的错误值。正确的做法是使用=而不是:=来赋值给已经声明的err变量。

 为了检测和避免Golang shadows,可以使用一些工具或者规范来辅助。例如:

 使用go vet -shadow命令来检测可能存在的变量隐藏。

 注意事项

 使用不同的命名风格或者前缀来区分不同作用域中的变量。

 避免在函数参数或者返回值中使用和全局变量同名的变量。

 避免在循环或者条件语句中使用:=来声明新变量,除非必要。

标签:shadows,return,变量,err,shadowsw,go,buf,小记
From: https://www.cnblogs.com/supermarx/p/17451494.html

相关文章

  • pytorch 训练 RuntimeError Unable to find a valid cuDNN algorithm to run convolut
    pytorch训练RuntimeError:UnabletofindavalidcuDNNalgorithmtorunconvolutionpytorch训练RuntimeError:UnabletofindavalidcuDNNalgorithmtorunconvolution#问题描述:python:3.95pytorch:1.10.2pythontrain.py--img640--batch64--epochs600--da......
  • Go 开源库运行时依赖注入框架 Dependency injection
    Dependencyinjection一个Go编程语言的运行依赖注入库。依赖注入是更广泛的控制反转技术的一种形式。它用于增加程序的模块化并使其具有可扩展性。实例展示(HighAPI):typeAstruct{ Namestring}funcNewA()*A{ r:=rand.New(rand.NewSource(time.Now().UnixNano())......
  • ssh远程redhat6报错:Unable to negotiate with *.*.*.* port 22: no matching host key
    报错:Unabletonegotiatewith*.*.*.*port22:nomatchinghostkeytypefound.Theiroffer:ssh-rsa,ssh-dss分析:openssh觉得ssh-rsa加密方式不安全,直接从8.8开始默认不允许这种密钥用于登陆了 解决:cat/etc/ssh/ssh_config.d/redhat6.confHost*PubkeyAcceptedKe......
  • golang实现设计模式之享元模式总结-代码、优缺点、适用场景
    享元模式是一种结构型的设计模式,通过共享细粒度对象实现对象的复用,从而达到减少对象创建与销毁,减少内存消耗,其本质是本质是缓存共享对象,降低内存消耗。享元模式的定义提出了两个要求,细粒度和共享对象。因为要求细粒度,所以不可避免地会使对象数量多且性质相近,此时我们就将这些对象......
  • STL algorithm算法
    Functionsin<algorithm>Non-modifyingsequenceoperations:all_ofTestconditiononallelementsinrange(functiontemplate)any_ofTestifanyelementinrangefulfillscondition(functiontemplate)none_ofTestifnoelementsfulfillconditi......
  • golang依赖注入工具digo
    golang依赖注入工具digo工具地址:https://github.com/werbenhu/digo特性使用注释中的注解自动代码生成自动检测循环依赖编译时期依赖注入自动初始化支持实例组的管理快速开始更多示例请参考:examples编写代码和注解packagemainimport( "log" "github.com/werbe......
  • gorm查询时间去掉时区问题
    gorm查询的时间格式是2022-03-03T14:32:05+08:00,这种格式不符合我们日常使用习惯,尤其是前端展示会额外占用单元格宽度gorm不提供时间格式的配置,只能自定义个一个类型,继承time.Time,上代码,这个是网上一搜一堆的代码,没啥可以说的packageutilsimport("database/sql/drive......
  • go helloworld 部署到k8s
    打包容器shutdown_Dockerfile同级目录执行sudodockerbuild-thello:v0.01-fshutdown_Dockerfile. 导出docker容器AAA:8.2,8.2表示镜像版本号dockersave-otar名称.tarAAA:8.2BBB:5.6 推送到其它node节点[email protected]:/home/deployscp导......
  • 记一次go项目踩坑记录
    错误描述在go项目中创建了一个脚本,编写了一个main函数其中用到了一个modelgithub.com/link1st/go-stress-testing/stressimport("fmt"//"github.com/dji/go-stress-testing/stress" "github.com/link1st/go-stress-testing/stress""net/http&......
  • C温故补缺(十七):动态链接(ELF,PIC,GOT,PLT)
    动态链接(PIC,GOT,PLT,ELF)参考:51CTO通过静态链接,可以生成一个可执行文件,这个可执行文件既可以是完全链接的也可以是部分链接的,对于部分链接的可执行文件,有些符号引用需要等到可执行文件加载时甚至是运行时才会进行符号解析和重定位。动态链接与静态链接一样包括符号解析和重......