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

写 Go 真的好爽

  •  
  •   jlak · 85 天前 via iPhone · 12171 次点击
    这是一个创建于 85 天前的主题,其中的信息可能已经有所发展或是发生改变。
    写 Go 一个月了,越写越爽,最近开始用上了 Ai 辅助后真倍爽
    自己也没搞清楚为什么写 Go 就会特别爽
    有可能是规范和提示,这点动态语言不太完善
    (但是不知道为什么 TS 就不爱用)
    即使给程序来个大改也比较轻松不容易出错
    还有代码是真的容易看懂
    自己写的也好别人写的也好从来没想过能这么容易懂
    98 条回复    2024-11-12 11:08:01 +08:00
    huangliu
        1
    huangliu  
       85 天前
    有可能是因为功能越多,写得越花哨,就越难懂
    hedwi
        2
    hedwi  
       85 天前
    go 真的挺好 不知道很多喷 go 的人都用啥先进的语言
    povsister
        3
    povsister  
       85 天前   ❤️ 1
    因为 go 最初设计就是,尽量抹平新手和老手之间的理解与认知 gap ,让一个团队里不同水平的工程师都可以互相合作。

    简单点说就是下限和上限差别很大。这点在框架开发上其实蛮牢的,你要么接受设计者的哲学,要么就自己另起炉灶。
    这可能也是 go 在社区口碑两极分化的原因,喜好的人很喜好,不喜欢的人就是不喜欢。
    cmdOptionKana
        4
    cmdOptionKana  
       85 天前   ❤️ 1
    心智负担低啊,一切都清清楚楚明明白白。

    缺点是罗嗦、不够简洁,但优点也很明显,全透明,感觉很轻。

    比如 Python 或 Java 里的类和对象,给人的感觉就很“重”,总感觉背着一大坨行李,也不透明,有时夹带魔法。
    thoo61871
        5
    thoo61871  
       85 天前   ❤️ 3
    go 是世界上最好的语言
    我支持 go ,你们可以打我了
    LieEar
        6
    LieEar  
       85 天前   ❤️ 2
    我觉得最爽的是直接生成可执行文件,方便部署。docker 镜像也不到 50MB
    jlak
        7
    jlak  
    OP
       85 天前 via iPhone
    @cmdOptionKana 用上 AI 后啰嗦也不是缺点了,就一按 Tab 的功夫
    wentx
        8
    wentx  
       85 天前
    @jlak #7 然后变成了 tab 工程师(狗头保命
    povsister
        9
    povsister  
       85 天前
    @jlak
    老实说,写 go 也五六年了,除了业务代码 AI 有点用以外,大多数情况我体感是 AI 只能帮倒忙。
    尤其在写一些很底层的部分时,由于变量名称省略较多,经常都是 1-2 个字母的变量名,然后 AI 给你写的代码光给它 debug 就要费劲很多,还容易看错。
    flytsuki
        10
    flytsuki  
       85 天前   ❤️ 6
    写过 go,还是觉得 c#舒服
    csys
        11
    csys  
       85 天前   ❤️ 2
    我自己的观点,写 go 爽一个是因为并发模型,如果之前没用过这方面做的比较好的语言(比如 java ),就能体会到比较大的进步
    另一个是 go 的多态实现,之前用的是传统 oo 语言,就会觉得很简单直接
    最后是非常简洁,就比如 if 语句不带括号,还是非常舒服的,写 python 也挺爽的

    但是 go 也会有很不爽的时候,比如错误处理,比如缺少模式匹配,比如难用的泛型和 lambda ,比如只有 interfaces 而没有 traits

    另外 go 项目大了也是挺难看懂的,go 的一个风格特点是命名非常简单,项目大了以后,一些名字使用的地方和定义的地方就会隔得比较远,到时候满眼都是 ch, g, m ,就难懂了
    henix
        12
    henix  
       85 天前
    我也觉得,心智负担低到甚至可以用记事本一遍写出可以通过编译的代码
    jlak
        13
    jlak  
    OP
       85 天前 via iPhone
    @povsister 那可能是因为你用的不是 cursor 吧,我用下来在补全方面非常精准,和其他补全有很大差距。
    基本简单的东西都不需要自己写了,比如最基础的 err!=nil 再也不用手动写了
    liuliancao
        14
    liuliancao  
       85 天前
    经常点来点去的 比较像自然语言 会好懂点
    body007
        15
    body007  
       85 天前   ❤️ 6
    写 go ,有啥不懂直接点进去看源码,清清楚楚、明明白白。我写 python 时候那真是噩梦,标准库点进去只看到一个定义,想看参数用法只能找文档,还生怕用错了。被 *args 和 **kwargs 支配的恐惧,就像 go 写函数传参是 func test(arg map[string]any) 一样蛋疼。
    jlak
        16
    jlak  
    OP
       85 天前 via iPhone
    @csys 我翻了自己几年前写的 Python oo 屎山直呼什么玩意看不懂
    还好 Go 没 this ,self

    简短的变量名官方规范好像是用在局部变量
    像 for 里临时变量里,适用范围小应该还算可以吧
    edisonwong
        17
    edisonwong  
       85 天前
    1. ai 敲 tab 出来的业务逻辑大多数不能用,排查费劲。
    2. go 如果加个 fea 能控制 goroutine 的生命周期就好了。我最近在写 python+django ,那报错信息云里雾里,好几行误导。python mysql client 还依赖底层文件。在一些老系统里装底层依赖真是要了老命;要 java 的话各种 o ,命名还贼长。
    8355
        18
    8355  
       85 天前
    我的理解同一个逻辑需求大概率只有一种写法,不是很在意是否为最佳实践,其他语言在这方面包袱很重。
    同时还有 Gofmt 自动格式化比较舒适,所有人的代码是一个格式,没有多余的无效引用和灰色的无用代码。
    jlak
        19
    jlak  
    OP
       85 天前 via iPhone   ❤️ 1
    @edisonwong 业务逻辑肯定不能交给 tab ,我觉得他适合当作 snippets ,一个自动选择的,超大 snippets 集
    vczyh
        20
    vczyh  
       85 天前   ❤️ 1
    Build 后一个可执行文件可太爽了
    dododada
        21
    dododada  
       85 天前
    一般的业务就是业务逻辑问题,复杂的业务如果不把架构图画好再下手,你就知道 ch 里面的消息飞来飞去有多痛苦了
    YunFun
        22
    YunFun  
       85 天前 via iPhone
    终于看到讨论 Go 爽点的帖了。虽然无意于语言之争,但也搞不懂为啥老是喷的。
    简洁高效,快速上手,丰富的标准库,保证下限的设计,部署 easy ,这些都是有利于工程化的…
    Chad0000
        23
    Chad0000  
       85 天前 via iPhone   ❤️ 5
    @flytsuki #10
    我先入门的 C#,现在我基本上看不上其他语言了。
    bunny189
        24
    bunny189  
       85 天前   ❤️ 1
    go 是世界上最好的语言!!!
    wsseo
        25
    wsseo  
       85 天前
    别说了。新出的仓颉也是一大箩筐。很烦杂,性能还没 go 好。
    zwzwzwzwzxt
        26
    zwzwzwzwzxt  
       85 天前
    感觉不如 rust. 理解概念之后写起来也很爽。
    maladaxia
        27
    maladaxia  
       85 天前
    @povsister 有人会不喜欢 go 吗? 除了没学过没用过的喷子
    latifrons
        28
    latifrons  
       85 天前
    写了几年 Go 之后你再让我回去写 Java 或者什么 SpringBoot ,我都不想写。
    Philippa
        29
    Philippa  
       85 天前   ❤️ 3
    Python 、PHP 等框架比如 Django 、Laraval 很多人都夸很好,其实这类框架非常抽象,而且很多状态在运行时改变,导致很难自定义,尤其是需要改它源码的时候。尤其是那种多重继承、getattr(self, '<I am string>') 这种满天飞,非常难以阅读,同时 IDE 分析也无能为力。当你使用它超出了它本身的功能范围,这类框架就是地狱。这个从我入行以来就非常厌恶 Django 这类框架,更别说 Laravel ,之前都是一直 Flask 为主。

    Go 不仅在于非常简单,而是它设计时刻意排除掉了一些可能被滥用的大坑(继承->组合,goroutine 解决并发,gofmt 避免风格之争,和 Python 一样做什么都一种方式等等),从而促进整体开发效率、可靠性很高。这也是被人攻击的点,但我觉得 feature 很足的主流语言很多,但 Go 是少有专门做减法的。虽然语言说不上设计优美,有些甚至丑陋,但功能上没有什么大的硬伤,导致开发体验良好。
    jiangzm
        30
    jiangzm  
       85 天前   ❤️ 1
    难道写个代码还能高潮不成
    chen05
        31
    chen05  
       85 天前
    go 写了 5 年
    前不久有些业务使用 python,一边写一边骂,代码追踪能追踪出几十个实现,写变量要跳转回去看看变量类型
    go 的强关联虽然麻烦,但代码读起来真的是很方便,代码追踪也很准确
    最初 php 换为 go,用了几周才习惯,毕竟 php 弱关联真的想怎么写怎么写,go 的什么都要先定义类型,

    配合上 AI ,go 真的是 tab 工程师了
    k0r4dji
        32
    k0r4dji  
       85 天前 via Android   ❤️ 2
    @Chad0000 c#的语法确实爽
    VoiceEXONE
        33
    VoiceEXONE  
       85 天前 via iPhone
    Go 应该不用过多考虑上下文吧?
    cokyhe
        34
    cokyhe  
       85 天前
    go 强制统一了风格,没有那么多的语法糖,看别人代码感觉就是自己写的一样~~
    james122333
        35
    james122333  
       85 天前 via Android
    go 的痛点在于反射 然而你要偷懒非得用反射
    TheWalkingDead
        36
    TheWalkingDead  
       85 天前
    @chen05 python 用上 typing 也挺好
    sagaxu
        37
    sagaxu  
       85 天前
    丑陋的语法 + 高效的编译 + 紧凑的运行时
    zx9481
        38
    zx9481  
       85 天前
    请问 go 可以写客户端吗
    james122333
        39
    james122333  
       85 天前 via Android
    @zx9481

    可以 你桌面端 web 端都可以写 但动态性必须得依靠反射
    jlak
        40
    jlak  
    OP
       85 天前 via iPhone
    @k0r4dji 不太了解 C#,但经常听他的好评
    局外人请问 他的爽点是在哪里?
    印象里需要额外安装 runtime 比较麻烦
    chaleaochexist
        41
    chaleaochexist  
       85 天前
    原来是些啥语言的/
    jlkm2010
        42
    jlkm2010  
       85 天前
    go 最大的缺点就是语法太丑陋,其他方面都还不错
    nikenidage1
        43
    nikenidage1  
       85 天前
    @jlak 额外安装 runtime 是啥意思?不是所有语言都需要 runtime 吗?你是指部署时吗? C#部署也可以打包成一个文件。
    至于说爽点,太多了,一时不知道从哪说起,不过别人再怎么说都没用,还是要自己试一试
    hugepizza
        44
    hugepizza  
       85 天前 via iPhone
    写了几年 go 写业务逻辑的时候语法糖少会显得很啰嗦
    现在写 ts 了 还是感觉 ts 更适合出活儿 代码写起来更行云流水
    jlak
        45
    jlak  
    OP
       85 天前 via iPhone
    @nikenidage1 比如 go 是内置 runtime ,编译好后丢哪里都是直接运行
    C#好像需要安装.Net 或 mono 才能运行吧
    Bingchunmoli
        46
    Bingchunmoli  
       85 天前 via Android
    爽的是生成文件比较小的二进制,不爽的是感觉像是在写 01 不了解生态,从 0 写如果找库比如 web 和 orm 主流的比如 gorm 感觉用着不是很舒服,感觉不如不用的感觉脱裤子放屁并没有帮助我解决快速开发反而需要因为了解框架导致不熟悉, 我觉得框架不如更进一步就像有些代码生成器一样做个插件,直接生成 crud 得了
    nikenidage1
        47
    nikenidage1  
       85 天前
    @jlak C# 也不需要了
    dcoder
        48
    dcoder  
       85 天前
    现在 Go 的错误处理方便了么?
    还是得写满屏幕的 if err != nil 么? 主要就是这个难受
    jlak
        49
    jlak  
    OP
       85 天前 via iPhone
    @nikenidage1
    是不是像打包 Python 那样把整个运行时和依赖完整塞进可执行文件
    把整个.Net 运行时塞进可执行文件内感觉还不如安装一下好。。。
    p1gd0g
        50
    p1gd0g  
       85 天前
    @flytsuki #10
    世另我。背景:unity 全栈。
    写业务 c# 起飞,比 go 不知道高到哪去了
    p1gd0g
        51
    p1gd0g  
       85 天前
    @Chad0000 #23
    先入门的 go ,后面逐渐用 c#。c# 确实强大,写业务比 go 强太多
    jlak
        52
    jlak  
    OP
       85 天前 via iPhone
    @dcoder 有 cursor 后现在方便了,err 不用再自己写,它根据项目函数自动精准生成合适的,去掉写时麻烦这个缺点后显式错误处理我觉得只有优点,对错误管理一目了然
    p1gd0g
        53
    p1gd0g  
       85 天前
    @jlak #45
    这么说吧,你要是写自己的东西,go 确实很爽,云原生。
    但是像我日常都是在公司写业务,工具链什么的又不需要我关心。写业务怎么快怎么来,光是 linq 这一点 c# 就强很多了。
    另外 go 写前端我也折腾过,只能说停留在爱好者的圈子,上不了台面。
    jlak
        54
    jlak  
    OP
       85 天前 via iPhone
    @p1gd0g 所以是强在他的标准库是吗?
    Go 确实没什么特别优秀的 orm
    arloor
        55
    arloor  
       85 天前 via Android
    说说我,本来以 java 为生。
    冲着内存占用低学了 golang ,写了点生产上的东西,
    后面冲着无 gc 又转向了 Rust ,他现在是我最爱的语言。
    今年跳槽,现在以 golang 为生了。我从不贬低我赖以谋生的语言,就像没人会砸自己的饭碗,除非蠢。我承认 golang 有很多独特的优点,但我也要说,golang 不是我认为的优秀的语言。
    最后,作为一个多语言玩家,我不会对任何语言产生非此即彼的偏执偏激的评论。所以我很讨厌论坛里出现什么 java 味太浓的评论。
    但是,就跟审美一样,我不会说服谁改变自己想法。您是对的,不要攻击我。
    年纪大了,争论没有意义
    p1gd0g
        56
    p1gd0g  
       85 天前
    @jlak #54
    已经不是 orm 能解决的问题,只能说是设计思想不同吧。
    go 加泛型这件事都有很多大佬反对呢,但是对于我们这种 crud boy 来说,泛型还是挺有用的。
    p1gd0g
        57
    p1gd0g  
       85 天前
    @dcoder #48
    想啥呢,毕竟是 errlang /doge
    如果没有 err 就不是 go 了
    jlak
        58
    jlak  
    OP
       85 天前 via iPhone
    @p1gd0g errlang 大大的好,希望不要引入 try catch
    还好官方明确表态不会引入
    p1gd0g
        59
    p1gd0g  
       85 天前
    @jlak #58
    这点我同意,改了真就不伦不类了
    tyrantZhao
        60
    tyrantZhao  
       85 天前
    毕竟 java 又臭又长
    idragonet
        61
    idragonet  
       85 天前   ❤️ 1
    @p1gd0g #50 go 没用过,一路都是 C#,用过 DELPHI 和 PHP 语法没得和 C#比。
    yb2313
        62
    yb2313  
       85 天前   ❤️ 2
    go 的少即是多

    其实是

    语言 特性少了

    我们 编译器 开发工作量少了

    听取社区意见少了

    你写 go 的时候 工作量 多了

    运行时耗时 多了
    niubiman
        63
    niubiman  
       85 天前
    @jlak 准确的说目前大部分 c#应用是需要安装运行时的, 也可以把运行时打包进应用里面自包含运行. 另外.net 8 之后在发力 AOT, 也就是不需要运行时了, 目前还不够成熟, 只能跑一些简单的应用
    fffq
        64
    fffq  
       85 天前
    php 是世界上最好的语言!谁赞成,谁反对
    niubiman
        65
    niubiman  
       85 天前
    @fffq 没有人, 没有人, 没有人, 通过
    PaulSamuelson
        66
    PaulSamuelson  
       85 天前
    go 没有那么多语法糖,学习难度低。虽然啰嗦,代码量大,但是理解起来简单。
    Python ,TS ,JS ,语法糖太多了,特别是那种,一行代码实现多行操作的那些功能、语法糖,看着这行代码我都要想半天,它到底在干嘛。
    例如:一行代码,循环一个数组,对数组内的值做 xxx ,把结果在提取出来放到变量。
    hefish
        67
    hefish  
       85 天前
    会不会是两个屏幕,一个写 go ,另一个在放毛片?
    bboring
        68
    bboring  
       85 天前
    @niubiman #65 为什么你这个有画面
    onikage
        69
    onikage  
       85 天前
    几年前刚刚学习的时候一个方法里面差不多一半都是 defer 。
    lesismal
        70
    lesismal  
       85 天前
    can't agree more
    huyiwei
        71
    huyiwei  
       84 天前
    @fffq #64 赞成
    james122333
        72
    james122333  
       84 天前 via Android
    @yb2313

    其实还好 如果你会用反射 但它的反射需要考虑该 type 是否为指标 这个做好其实还好 对代码掌控度变"多"了 被埋在地底的雷炸到变"少"了
    Vonrix
        73
    Vonrix  
       84 天前
    @body007 深有同感
    yb2313
        74
    yb2313  
       84 天前
    @james122333 #72 为了避免反射使用泛型, 然后在泛型里面使用反射;使用反射的时候无法在编译时发现潜在的空指针问题, 那跟写 unsafe 有什么区别. 是因为我掌控变多了我才能这样写而不是这样写会让我掌控变多
    qweruiop
        75
    qweruiop  
       84 天前
    学完了 rust ,golang ,java ,python ,node 不下 20 种吧。。。回顾了下,现在自己让最赚钱效率最高的还是 c++和 python 。。。
    sh3937
        76
    sh3937  
       84 天前
    请问用的啥 ide 啊
    jlak
        77
    jlak  
    OP
       84 天前 via iPhone
    @sh3937 之前用 vscode ,最近换成了 cursor
    james122333
        78
    james122333  
       84 天前 via Android
    @yb2313

    当然没办法发现 你要自己写好 这在哪个语言反射都一样 你要先用 Kind()判断它的类型 指针就是 reflect.Ptr 不是则是其它的 判断是否空用其它函数如 IsNil() 判断空值 IsZero() 没有一直用 unsafe 需求 我指的是因为有指标反射变的麻烦
    gowk
        79
    gowk  
       84 天前
    一开始学编程就是学的 C#,写过的语言里面 C# 是最舒服的,Java 也能写但是十分不爽,也可能是我菜
    Go 也写过,也非常喜欢,但是写业务还是束手束脚的,没有 C# 爽
    dif
        80
    dif  
       84 天前
    我已经看到 go 、rust 、kotlin 了。然而都在说爽,没有一个说明白为啥爽。
    nikenidage1
        81
    nikenidage1  
       84 天前
    @jlak 不是啊,aot 原生编译,不想要运行时......
    jlak
        82
    jlak  
    OP
       84 天前 via iPhone
    @dif 别混为一谈,我可说了为什么 go 爽,规范和简单
    跳转快查 bug 简单
    之前写的 python ,js 这样的动态语言,一些参数类型的修改其他地方根本不会提示,所以换到 go 后就觉得很爽,修改一处另一处直接红
    类型系统也(个人)感觉比 TS 好,这点说不清为什么,TS 类型不太会写,Go 简单明了
    还因为不是面向对象少了很多心理负担

    还有我说用 AI 辅助强不是像其他贴那样直接把业务逻辑交给 AI ,让 AI 直接搞定整个函数
    用过的人都清楚,复杂业务交给 Tab 模型简直可笑
    我对 AI 辅助感到的爽是因为他解决了 Go 的“啰嗦”
    Go 很简单,语法很明确,易懂
    但同时这点造就了啰嗦
    很多地方逻辑很少,就只是固定写法
    AI 辅助很好解决这点,像是个超大 snippets 集
    同时因为 Go 语言的简单,有需要 AI 解决方案的时候也能轻松理解逻辑,避免盲目使用 AI 给的函数埋下大雷

    对于那堆量产贴,刚开始一两还好,现在越来越多,还只写个标题毫无内容真心感觉恶心
    shiweifu
        83
    shiweifu  
       84 天前
    @jlak

    使用编译型语言相当于自带了一个简单的测试系统。

    因为有类型系统,配合各种 AI 助手后,生成的 CRUD 代码,比解释型语言体验好不少
    yangyangkej
        84
    yangyangkej  
       84 天前
    怎么突然间多了好多写 XX 好爽的帖子,哈哈。
    yb2313
        85
    yb2313  
       84 天前
    @hedwi c# rust ts
    gux928
        86
    gux928  
       84 天前 via iPhone   ❤️ 1
    @LieEar 太对了,写点小玩意很方便。用别的还要安装环境。
    pursuer
        87
    pursuer  
       84 天前
    @jlak Go 能写的类型约束 TS 都能写,TS 能写的 Go 不一定能,说“Go 类型系统比 TS 好”没道理的。当然你要说 Go 简单那确实简单,不过对我来说有 TS 的复杂度可以接受。
    Tianli0
        88
    Tianli0  
       83 天前
    怎么感觉这么多写 XX 好爽的帖子
    star574
        89
    star574  
       83 天前
    直接跨平台编译生成二进制,语法简单,生态也还可以,要是错误处理像 rust 一样就更好了
    jlak
        90
    jlak  
    OP
       83 天前 via iPhone
    @pursuer 也有可能正因为 Go 类型系统更简约让我更喜欢吧,之前主力 JS ,没怎么学就上手 TS 虽然好处是很多,但有些类型写的真的很累,开 strict 的时候很多错误根本看不懂为什么
    同样没怎么学的 Go (基本只看了官方 tour of go )就能写完整的项目,看懂别人的项目,类型也完全无压力
    codefun666
        91
    codefun666  
       83 天前   ❤️ 1
    用 C 比较多,也用 C++。

    相比 Python ,Go 性能更高,开发效率比 C/C++快不少。C/C++对我也没啥难度,只是开发效率不高。

    Rust 语法太恶心了,坚决不用;用 Rust 还不如用 C/C++。
    layxy
        92
    layxy  
       83 天前
    编译二进制文件小,启动快,语法简单,确实很爽,虽然也有槽点,但是让人感觉这个语言很轻量
    wupher
        93
    wupher  
       83 天前
    Pros:

    - 编译,尤其是跨平台编译
    - 没有坑爹的 DLL hell / Lib hell
    - memory / performance
    - simple
    - go routine

    Cons:

    - error code / exception handle
    - ORM / interfaces
    Subilan
        94
    Subilan  
       83 天前 via iPhone   ❤️ 1
    Go 的整体开发体验是好的,就是最初接触的时候总是能感到一种其设计者将他们认为好的哲学强加给开发者的感觉。但不算缺点。
    vx7298
        95
    vx7298  
       82 天前
    标题对抄啊,刚看到一个写 rust 爽的,😂,,
    twig
        96
    twig  
       52 天前 via iPhone
    @k0r4dji 写码快乐还有人发钱。比高潮快乐多了。
    twig
        97
    twig  
       52 天前 via iPhone
    @vx7298 爽归爽,编译不通过啊。
    windcode
        98
    windcode  
       19 天前
    从 C++、Python 、Java 转到 Go ,感觉很爽,语法简单够用,没有华丽的辞藻,Less is more
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2577 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 05:13 · PVG 13:13 · LAX 21:13 · JFK 00:13
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.