V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
zhwguest
V2EX  ›  Go 编程语言

恨死 go 的导出变量命名规则了

  •  
  •   zhwguest · 2023-08-21 21:25:49 +08:00 · 7830 次点击
    这是一个创建于 486 天前的主题,其中的信息可能已经有所发展或是发生改变。

    是否包导出居然是靠首字母大小写来区分,写着写着,一个变量想修改为包外可见,居然要修改几十上百个文件。

    这是一种什么样的思想....

    第 1 条附言  ·  2023-08-22 10:39:25 +08:00
    各位大佬们,欢迎大家来拍。但大家先看清如下几行哈,不看也行,毕竟没几个人会仔细看,但我还是写出来哈。

    1) 我有一个 Person.id 字段,是包内引用,几十个文件引用,如果觉得引用太多了的我不做反驳;
    2) 现在外面有人想访问该 id 了,说以前没设计好的,是设计问题的我也不反驳;
    3) 认为我现在把 Person.id 修改为 Person.Id 只需要在包外新需求的地方修改的,我也无法反驳;
    4) 大多数语言,public/private/protect 是在变量定义的时候说明一次就行了,后续要修改,只在这个地方修改一次即可。现在 go 是用变量名大写来到处说明自己的 public 特性,不仅仅是在定义的地方说明的。这就造成了修改可见性得对所有引用修改(毕竟 Id = public id ,如果这句话不同意的,我也无法反驳)。说改文件很轻松的我想说你 review 代码 cr 的时候,一个小需求,把依赖包全部文件修改了一边,觉得很舒服吧。
    4) go 很多东西都很好,特别是工程化很平易近人,这也是我在服务器端用了快十年的原因,但是这并不妨碍我吐槽其中一个点吧,并且稍微搞个吸引人的标题就被人说性格缺陷、抑郁,好吧,没问题;
    5) 很多现代化的语言,比如 rust/kotlin 在语法方面比 go 优美一万倍,我一直用来做客户端的底层库开发,但是并不影响我吐槽它的一些问题,
    6) 有一些回复者都在通过改变设计原则(比如默认为 public) 来适应这个问题了,难道不值得思考下?
    111 条回复    2023-08-23 16:45:21 +08:00
    1  2  
    sherlockwhite
        101
    sherlockwhite  
       2023-08-22 14:53:29 +08:00
    GetId 可破
    iosyyy
        102
    iosyyy  
       2023-08-22 15:02:33 +08:00
    @voya #100 那建议反驳楼主说的话不要老是扯什么懒得去了解和思考 另外你要真觉得 error 没问题那我没话说你说的是对的
    Yoock
        103
    Yoock  
       2023-08-22 17:01:36 +08:00
    又不是不能用 🐶
    kiripeng
        104
    kiripeng  
       2023-08-22 17:10:37 +08:00
    一般来说这玩意跟苹果一样,你不用那规则使用,你就会很难受。每个语言都有这种类似大病。但是我感觉加个函数不就行了。
    ganbuliao
        105
    ganbuliao  
       2023-08-22 18:23:19 +08:00
    ide 有修改变量名 这个功能
    ikaros
        106
    ikaros  
       2023-08-22 19:15:24 +08:00
    就不说有没有 IDE 了,vscode 配置一下不是都可以 rename 吗?
    realpg
        107
    realpg  
       2023-08-22 23:45:21 +08:00
    @zhwguest #13
    就看帖子的时候,我就改了一个 golang 的可见性
    修改了 44 个文件
    不过我只在 VSCode 重构了一次
    没觉得有啥麻烦的
    magnetar
        108
    magnetar  
       2023-08-23 01:22:54 +08:00
    这不是 ide 一键重构的事儿嘛,直接重构连相关的注释都能给你改过来
    buffzty
        109
    buffzty  
       2023-08-23 08:24:18 +08:00
    @jorneyr 你前两个说的对,但第三个是什么鬼? if err !=nil 不是跟 C 语言 c++一样吗?这怎么影响业务逻辑的流畅程度了? 再说了 go 也有类似 try catch 模式
    largezhou
        110
    largezhou  
       2023-08-23 14:41:40 +08:00
    这个最坑的其实是,如果你想用中文做变量名函数名的时候(狗头
    lttzzlll
        111
    lttzzlll  
       2023-08-23 16:45:21 +08:00
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1037 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 20:28 · PVG 04:28 · LAX 12:28 · JFK 15:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.