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

go 怎么感觉啥都缺啊,他的定位在哪里

  •  
  •   hzjseasea · 2020-09-03 17:06:00 +08:00 · 18060 次点击
    这是一个创建于 1337 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近在学习 go,想着自己单独写个项目不大行,就去刷 leetcode 了 后面发现 这玩意

    1. 函数没有默认值,不支持重载,
    2. 时间格式化也用的不是 yyyy-MM-dd HH:mm:ss 这样的通用形式
    3. 经常会返回 err 不过我觉得是个好处。 写的我有点懵逼

    有大佬给个定位嘛

    165 条回复    2020-12-01 01:03:12 +08:00
    1  2  
    killerv
        101
    killerv  
       2020-09-04 10:28:01 +08:00
    1. 默认值这个我觉得还好吧,我比较支持这种显示的行为。
    2. 这个确实应该和其他语言的默认行为保持一致……
    3. 这个感觉还行,不算大问题
    libook
        102
    libook  
       2020-09-04 10:29:41 +08:00   ❤️ 3
    语法简单、有垃圾回收、性能好、代码风格一致性高,虽然每个方面都不是做的最好的,但在当下普遍需求情况下达到了这几个方面的平衡。
    另外就是大企业背书、以及舆论热点,国内技术圈因为危机意识太强所以普遍从众心理严重,可以单纯因为 XX 企业在用 XX 技术就全线更换技术栈,也出现了诸如“面向简历编程”等现象。

    私以为 go 的价值在于语法足够简单以至于没那么灵活,一种需求往往只有一种实现方案,于是团队合作极大减少了沟通成本,另外强类型、风格统一也尽可能避免了很多因为开发水平低而导致的潜在 Bug,所以非常适合企业生产。

    一个技术人员应该会用多种技术栈,技术选型应该考虑实际需求,如果觉得 go 不好用,大概率是不适合你现在的项目需求和团队情况(或者自己不会用)。
    tairan2006
        103
    tairan2006  
       2020-09-04 10:30:13 +08:00
    1,2,3 都不是槽点

    最大的槽点就是不支持泛型
    lewis89
        104
    lewis89  
       2020-09-04 10:35:14 +08:00
    @tairan2006 #103 问题多了去了,泛型根本不算什么, 工程项目中 不可能不用第三方的中间件,光个消息队列的 client 等玩意都得要从头造个大轮子。
    lewis89
        105
    lewis89  
       2020-09-04 10:35:42 +08:00
    @tairan2006 #103 没有泛型,大概率也就是写库的人闹心,写业务的大部分场景本来也不需要这玩意。
    scnace
        106
    scnace  
       2020-09-04 10:48:59 +08:00 via Android
    time.RFC3339 /time.RFC3339Nano 时间 format 没啥好黑的
    kiddult
        107
    kiddult  
       2020-09-04 10:50:17 +08:00
    @lewis89 碰到一堆转换格式啥的时候也超级麻烦,说白了,泛型有泛型存在的理由,随便就去掉是纯恶心人来着
    damngood
        108
    damngood  
       2020-09-04 10:54:32 +08:00 via iPhone
    @lewis89 哪个消息队列没有 go client 呀
    写过几个 go 项目了 还没发现少轮子的情况
    tairan2006
        109
    tairan2006  
       2020-09-04 10:58:59 +08:00
    @lewis89 哪个消息队列没轮子? kafka/rabbitmq 甚至 redis 都有啊…就是大部分非官方而已。老实说我写物联网感觉 go 的轮子比 Java 还强一点,Java 的 mqtt 库是真的难用。

    业务场景用泛型太多了,你没写过说明你的业务太简单。
    lewis89
        110
    lewis89  
       2020-09-04 11:00:37 +08:00
    @damngood #108 老哥 那些玩意能用吗,有经过大项目考验吗,有完善的单元测试覆盖吗,有没有完善的 CI/CD ?
    lewis89
        111
    lewis89  
       2020-09-04 11:01:39 +08:00
    @tairan2006 #109 kafka 这些都是进了 Apache 基金会的,有专人跟企业团队负责的
    lewis89
        112
    lewis89  
       2020-09-04 11:02:36 +08:00
    @tairan2006 #109 出问题了有没有人第一时间提供支援?升级版本了能不能迅速同步 client? 开源轮子不是光丢个代码出来这么简单一回事
    yf215
        113
    yf215  
       2020-09-04 11:30:34 +08:00
    @tairan2006 Go 用在嵌入式设备上性能如何,感觉 GO 在平常开发中内存占用还是比 C++高很多啊。
    damngood
        114
    damngood  
       2020-09-04 11:37:55 +08:00
    @lewis89 所以哪个消息队列的客户端需要你自己做轮子? 找不到有完善单元测试覆盖的?
    thtznet
        115
    thtznet  
       2020-09-04 11:41:53 +08:00   ❤️ 1
    不要问,问就是 C#最屌,纯看语言。
    damngood
        116
    damngood  
       2020-09-04 11:43:11 +08:00
    @damngood zeromq, rocketmq, rabbitmq, redis stream, 哪个缺单元测试覆盖完善的 client? 更别说几个本来就是 go 实现的 mq 了.
    chenqh
        117
    chenqh  
       2020-09-04 11:43:45 +08:00
    @thtznet 如果 C#早点支持 linux 的话,情况会好很多?语言再好,早期不支持 linux 是死穴呀
    tairan2006
        118
    tairan2006  
       2020-09-04 11:54:24 +08:00
    @yf215 嵌入式就算了…除非你是安卓嵌入式,或者 ram 大几百兆。嵌入式可以考虑 Rust 。
    gaius
        119
    gaius  
       2020-09-04 11:56:44 +08:00 via Android
    语法简单
    reus
        120
    reus  
       2020-09-04 12:00:52 +08:00
    @CodeCodeStudy 03 是 12 小时制,15 是 24 小时制,都是表示小时
    reus
        121
    reus  
       2020-09-04 12:01:35 +08:00
    @chengxiao 你不是连从 1 数到 6 都不会吧?
    no1xsyzy
        122
    no1xsyzy  
       2020-09-04 12:14:35 +08:00
    @mshadow 哪个 ISO 标准定义了格式化字符串了吗?
    而且 ISO8601 定义中日期和时间要用 T 分界
    reus
        123
    reus  
       2020-09-04 12:16:28 +08:00
    @mshadow 我不知道什么 iso,我只知道 mysql 写成 %Y-%m-%d %H:%i:%s,SQL Server 写成 YYYY-MM-DD hh:mm:ss,postgresql 写成 YYYY-MM-DD HH24:MI:SS,MI 可不是打错,在 postgresql 里 MM 表示的是月份!
    no1xsyzy
        124
    no1xsyzy  
       2020-09-04 12:19:25 +08:00
    @lewis89 #112 开源模式需要你也参与啊,你作修改啊,你再提交上游啊
    可不是光拿个代码用这么简单一回事
    cheng6563
        125
    cheng6563  
       2020-09-04 12:23:45 +08:00 via Android
    优点就是编译块,性能较好,有携程,比 c 好一点的语法。
    其他很多地方都不太好用。
    damngood
        126
    damngood  
       2020-09-04 12:24:26 +08:00
    @no1xsyzy 问题是他提到的这个都不需要他参与, 人家 Readme 里面都提到了 Production Ready, 而且也不乏久经考验的 Client.
    no1xsyzy
        127
    no1xsyzy  
       2020-09-04 12:26:44 +08:00
    @damngood (我是在把他的话原样丢回去,他敢反驳我就复读
    ghjacky
        128
    ghjacky  
       2020-09-04 13:04:57 +08:00
    觉得 go 不好用的大概是用惯了 python 、java,各种丰富的库和框架,拿来即用,不习惯于 go 的零散。对于语言特性都有各自的好与不好,或者说是方便与不方便。反正对我自己而言,我是更喜欢用 go,虽然有些地方用着不方便,但我反倒觉得更灵活,最是喜欢里边的 interface 、goroutine 、channel 。
    tmac33
        129
    tmac33  
       2020-09-04 13:19:42 +08:00
    上月刚入职,英国某通讯公司,视频 tv 业务,全部 go 来写,目前手里有 5-6 个项目,包括旧业务改写。清一色 grpc 调用,业务包括数据跑在 GCP 。用 go 写复杂的业务真的爽,code review 更爽,没有那么复杂的语法,业务代码一本一眼就看到底了,部署也很畅快。始料未及的是,go 可能是最短的时间,旧挤入真正干活可选的语言列队。
    dobelee
        130
    dobelee  
       2020-09-04 13:24:18 +08:00 via iPhone
    @thtznet #115 c#确实是最完美的语言。非常大气和工业化。可惜.net 鸡肋。
    waising
        131
    waising  
       2020-09-04 13:33:01 +08:00
    @tmac33 你们用 orm 了吗? 感觉 go 现在主要轮子和一些工具类的多一些 业务上不知道有没有什么不便的地方
    jeremaihloo
        132
    jeremaihloo  
       2020-09-04 13:36:17 +08:00
    @kiddult #107 老哥,泛型不是去掉,而是 golang 一开始到现在就没有呀, 后面的版本会增加泛型, 时间问题
    laminux29
        133
    laminux29  
       2020-09-04 13:39:19 +08:00
    C++导入一个库,环境要准备一年。
    DeWhite
        134
    DeWhite  
       2020-09-04 13:56:13 +08:00
    go 的语言时间的格式化不是极其容易么,time.format()加上固定时间。。
    zhuangzhuang1988
        135
    zhuangzhuang1988  
       2020-09-04 14:08:44 +08:00
    @dobelee
    .net 还鸡肋啊?
    真泛型
    值类型
    p/invoke
    zjsxwc
        136
    zjsxwc  
       2020-09-04 14:09:59 +08:00   ❤️ 1
    有 GC,且不需要额外虚拟机运行时,只有 Golang 仅此一家!
    有 GC,且不需要额外虚拟机运行时,只有 Golang 仅此一家!
    有 GC,且不需要额外虚拟机运行时,只有 Golang 仅此一家!
    有 GC,且不需要额外虚拟机运行时,只有 Golang 仅此一家!
    有 GC,且不需要额外虚拟机运行时,只有 Golang 仅此一家!
    pursuer
        137
    pursuer  
       2020-09-04 14:16:21 +08:00
    @zjsxwc dlang 有 GC 且非虚拟机运行,比 Go 出的还早。后面出的还有 kotlin native 也是
    zjsxwc
        138
    zjsxwc  
       2020-09-04 14:18:27 +08:00
    @pursuer 然而都没有 golang 流行
    Hanggi
        139
    Hanggi  
       2020-09-04 14:31:13 +08:00
    @pursuer
    就是这样,有些语言,用过的都说好,这个优雅、那个爽、支持这个功能、支持那个语法,但就是不火。

    这就像有一个搞笑演员,说学逗唱十八般武艺样样精通,但就是不搞笑。

    Golang 就是那个看似什么都不行,但是把把戳中你的笑点,
    你到底要哪个呢?
    wellsc
        140
    wellsc  
       2020-09-04 14:32:07 +08:00 via iPhone
    @zjsxwc 疯了
    ppphp
        141
    ppphp  
       2020-09-04 14:34:00 +08:00
    其实是有运行时的,就是全静态链接到二进制里面了,而且那个也不大
    zicla
        142
    zicla  
       2020-09-04 14:34:32 +08:00
    其实 go 用熟了也还好,我用 go 开源了一个云盘,是一个比较成熟的项目了,大家可以参考。 https://github.com/eyebluecn/tank
    pursuer
        143
    pursuer  
       2020-09-04 15:09:33 +08:00
    @Hanggi 呃,但是我不喜欢 Go 啊,我 Typescript 写的很爽,写 Go 的时候就比较难受,而且我的痛点:热更新,动态加载,go 实现的很不怎么样。其他的 labmda,泛型,元编程虽然说没有也能写,但有总是要爽一点
    jorneyr
        144
    jorneyr  
       2020-09-04 15:20:47 +08:00
    @zjsxwc 有 GC,且不需要额外虚拟机运行时,只有 Golang 仅此一家!
    Objective-C 也有 GC,不知道需要虚拟机运行时吗?
    reus
        145
    reus  
       2020-09-04 15:29:11 +08:00
    @zjsxwc 并不是,Haskell 也有 GC 且无虚拟机。就算缩小范围到 TIOBE 前 20,也还有 swift,并不是仅此一家。
    virusdefender
        146
    virusdefender  
       2020-09-04 15:34:05 +08:00
    除了大家说的,我想补充两点

    - 标准库友好,比如 Python 之类的标准库因为历史原因,各种混乱和奇怪
    - 自带的工具友好,比如 Python 你想生成个 prof,看下那里卡住了之类的,都得第三方库解决,而 go 直接几行代码就可以了,自带工具链也可以可视化的看;比如竞争检查、代码 format 等也能解决很多痛点。
    damngood
        147
    damngood  
       2020-09-04 15:36:29 +08:00 via iPhone
    @reus ref count 不知道可不可以算作 GC...
    应该是不算的
    leekafai
        148
    leekafai  
       2020-09-04 15:39:40 +08:00
    时间格式化 的设计真的是典型的 自觉趣
    wupher
        149
    wupher  
       2020-09-04 15:46:48 +08:00
    现在日常 golang + kotlin

    我的理解它是 C 语言的现代版,而且就不用“传统”的对象,习惯这一点后还好。

    err 那个一开始真不习惯,用多了也就那样了。而且很难说这个就比 try/catch/finally 差,那个层层套的话,也能恶心死人。

    写业务代码的话,我觉得性能有余,甜度不够(语法糖太少)
    reus
        150
    reus  
       2020-09-04 16:24:16 +08:00
    @damngood 当然算啊。python 都是 ref count 为主啊。
    bintianbaihua
        151
    bintianbaihua  
       2020-09-04 16:35:03 +08:00
    还行吧,用的挺好的
    libracloud
        152
    libracloud  
       2020-09-04 16:35:55 +08:00
    @Hanggi go 主要是有个好爸爸,要不你看它能火?
    yf215
        153
    yf215  
       2020-09-04 17:30:57 +08:00
    @tairan2006 Android 用 Go 不是更蛋疼,Go 一个编包都很大了,现在我们还是 C++为主。
    TypeError
        154
    TypeError  
       2020-09-04 17:58:49 +08:00
    https://go.dev/solutions/#case-studies

    这些大公司都不是傻子,没优势的也不会选它,反正作为一门年龄不大的语言,优缺点都很明显
    back0893
        155
    back0893  
       2020-09-04 18:12:59 +08:00
    语法简单
    性能强
    jasonwu523
        156
    jasonwu523  
       2020-09-04 21:17:02 +08:00
    满屏的
    if err != nil {
    pass
    }
    monkeyWie
        157
    monkeyWie  
       2020-09-04 21:32:18 +08:00
    除了错误处理,其它都可以接受
    darknoll
        158
    darknoll  
       2020-09-05 09:59:09 +08:00 via Android
    函数重载没有任何好处
    hzjseasea
        159
    hzjseasea  
    OP
       2020-09-05 14:37:07 +08:00
    @ytll21 主要 rust 有点劝退。。从宏观来看我感觉 go 和 rust 刚好两个反一反 go 语法是简单,但是有些东西是好是坏先不说总让人有种不全的感觉。rust 真的太细了,第一次生命周期那边被劝退了,第二次链表那边被劝退了。。。
    hzjseasea
        160
    hzjseasea  
    OP
       2020-09-05 14:39:13 +08:00
    @libook 的确,现在主用 python 做系统维护.想找第二个语言来做一点铺垫。技术栈上的规划是的做一下
    p1gd0g
        161
    p1gd0g  
       2020-09-05 14:54:54 +08:00
    @securityCoding
    ```
    func foo() (err error) {
    // ...
    }
    ->
    func foo() error {
    var error err
    // 不论有几层,都不会 shadowed error
    return err
    }
    ```
    可以参考下 time 包。
    pythonee
        162
    pythonee  
       2020-09-05 17:19:16 +08:00
    @hideokuze 现在 erlang 用的也不多的样子
    pythonee
        163
    pythonee  
       2020-09-05 17:19:58 +08:00
    @thtznet 有哪些吸引你的地方呢?
    Luoyuanlong
        164
    Luoyuanlong  
       2020-11-30 21:54:50 +08:00
    @wangyzj 问一下, 你是上海的吗?看你头像怪眼熟的.
    wangyzj
        165
    wangyzj  
       2020-12-01 01:03:12 +08:00
    @Luoyuanlong #164 no
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2261 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 09:01 · PVG 17:01 · LAX 02:01 · JFK 05:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.