跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • golang 语言学习有感
未分類
14 4 月 2020

golang 语言学习有感

golang 语言学习有感

資深大佬 : woahishui 61

刚开始学习 golang,越看越有 basic 语言的味道,但是有没有 basic 丰富,难道是简化的 basic 语言
大佬有話說 (58)

  • 資深大佬 : zjsxwc

    你加入 CSP 编程模式试试

  • 資深大佬 : tt67wq

    难道不是 c 语言的味道?

  • 資深大佬 : zcreg

    难道不是 c 语言的味道?

  • 資深大佬 : cmdOptionKana

    对于喜欢奇巧淫技的人来说,golang 显得不够简洁、优雅、好玩。

    但其实 golang 的精简恰到好处,当你用 golang 写了程序,过一段时间回头去修改的时候就会发现 golang 的伟大,它让一切都井井有条一目了然,并且非常容易重构和扩展。

  • 資深大佬 : lihongjie0209

    @cmdOptionKana #4 从来没听说使用了 xxx 语言就能把代码组织好的

  • 資深大佬 : pursuer

    c 语言有形成标准的 ABI (这使得 C 可以容易的热更新动态库),可以用宏,没有 GC,类型前置,类型隐式转换,不支持闭包,这些都是和 Go 不一样的地方,我觉得 go 和 C 差挺多的吧。

  • 資深大佬 : wellsc

    @cmdOptionKana 尤其是 error handler,简直独一无二

  • 資深大佬 : ytll21

    @cmdOptionKana 伟大都用上了。。。允许我吐一会儿。。。哈哈哈,抱歉,无恶意

  • 資深大佬 : d0m2o08

    golang: 我不相信你们的技术,就按我的条条框框来,别瞎鸡儿折腾

  • 資深大佬 : qq316107934

    @cmdOptionKana 除了处理 json 数据麻烦的要死

  • 資深大佬 : Hanggi

    我觉得 go 语言最大特点是在编写和编译层面都强制用户遵守他们的规则,使得 go 语言写出来的代码相比其他语言没有那么多的变种和奇葩。当其他语言在争吵这个地方要不要空格、那个地方要不要缩紧或是换行的时候,gofmt 已经给你强制格式化了。

  • 資深大佬 : cmdOptionKana

    @lihongjie0209 你误会了,我并不是说用 golang 就一定能让代码绝对组织得非常好。我的意思是,它对更好地组织代码有帮助,在我看来,帮助很大。

  • 資深大佬 : cmdOptionKana

    @qq316107934 再忍一会儿,马上就有改进了,因为那是由于缺少泛型而导致的麻烦,很快就会支持泛型。

  • 資深大佬 : lewis89

    @Hanggi #11 这些 空格 tab 换行 圣战者 都是一些根本不懂编程的初学者,好的语言根本不屑于在这上面提供一些条条框框的东西。

  • 資深大佬 : k9982874

    @wellsc #7 上来直接打脸就不好了啊

  • 資深大佬 : lihongjie0209

    @Hanggi #11 你觉得代码的问题是格式化的问题? clean code 难道是教你怎么配置 editor config? effective java 教你怎么缩进?

  • 資深大佬 : charlie21

    学了汉语拼音就开始感叹中华文化博大精深.jpg

  • 資深大佬 : cmdOptionKana

    @wellsc 刚开始我也很烦它的错误处理,烦到炸。

    但是后来发现,这其实是因为错误处理本身就是个麻烦事,try catch 那种方式企图掩盖错误处理的麻烦本质,但是并不完美,也有很多缺陷。

    golang 那样设计是为了把这个麻烦本质暴露出来,如果根据 golang 的设计思想认真处理每一个 error,就会发现这对代码 debug 带来很大帮助。

    加上最近 errors 库的小改进以及即将到来的一些改进,这个一直被很多人诟病的缺点也会得到很大改善。

  • 資深大佬 : Hanggi

    @lihongjie0209
    @lewis89
    代码格式化只是一个最直接的例子,这种设计体现在 GO 语言的方方面面,你们可以自行体会。

    简单说 GO 语言的优点有以下几点:
    强制的代码风格(仁者见仁)
    强大的标准库
    对操作系统极少的依赖
    优秀的性能

    这些东西可能其他语言也都能满足,但是合到一起就会对上某些人的胃口,自然会赞不绝口。

  • 資深大佬 : wutiantong

    为啥国内 Golang 的信徒那么多啊?

  • 資深大佬 : fanpei0121

    @cmdOptionKana 赞同

  • 資深大佬 : lihongjie0209

    @Hanggi #19 你说的这些东西只要是现代语言都满足:

    Python:

    自带电池 -> 强大的标准库
    基于解释器的 -> 不依赖操作系统
    优秀的性能 -> 要性能的就是 C 来写

    JavaScript

    npm -> 强大的标准库
    我有 V8 -> 对操作系统极少的依赖
    我有 V8 -> 优秀的性能

    Java
    我只管创建接口, 实现大厂来做 -> 强大的标准库
    我有 JVM -> 对操作系统极少的依赖
    我有 JVM -> 优秀的性能

    以上所有:
    强制的代码风格 -> editor config / ide 配置文件

  • 資深大佬 : fanpei0121

    @wutiantong 个人以为,golang 同时兼顾了开发效率与运行效率。其他语言都比较极端。

  • 資深大佬 : bbao

    @Hanggi

    强大的标准库?兄弟你再搞笑?

  • 資深大佬 : Hanggi

    @lihongjie0209
    你自己都承认了,
    java 要低系统依赖是不是要 jvm, 跑个服务器是不是还要用 tomcat、maven 之类的?
    跑 v8 你不需要装 node 吗?
    python 是不是还要借助 cpython ?
    ide 上的各种配置是不是每家公司都有些许的差异呢?

    而 GO 语言在语言层面就实现了这些。我并没有说 go 语言在所有这些方面都做到最好了,但确实给开发者带来了不一样的体验。并且出现了不少杀手级项目,其他语言也能开发出这些项目,那为什么要用 GO 语言呢?

  • 資深大佬 : lihongjie0209

    @Hanggi #25 我懂了, 你说的系统依赖是不需要虚拟机, 直接编译产生机器码的那种.

  • 資深大佬 : fiypig

    我只知道我可能我会在 go 终老了

  • 資深大佬 : VoidChen

    我以为真的写过代码或者用过 2 种或以上语言的人应该都不会说出这样的话。。。

  • 資深大佬 : wutiantong

    @fanpei0121 为啥你回复里 at 我但我没收到 unread 提醒呢?

  • 資深大佬 : guolaopi

    @lihongjie0209 孤陋寡闻了我,还没看过 go,难道 go 是直接拿记事本撸完就能跑了吗?(滑稽

  • 資深大佬 : yukiloh

    一开始觉得 defer recover 牛逼,实际写起来要依靠 ide 比如 jb 的 template,iferr 也是,如果没有快捷输入真的烦…
    还有神一样的墙,感谢七云牛
    还有包管理…现在有 module 好多了

  • 資深大佬 : smallyu

    basic 的多线程是什么写的?

  • 資深大佬 : zunceng

    关于错误处理

    https://developer.aliyun.com/article/740696

    习惯用 try catry 的, 回头好好读一下自己代码 写了多少 bug ( PS: 可能也不容易看出来)

  • 資深大佬 : lihongjie0209

    @zunceng #33 嗯, 找个机会把 JDK 源码中关于 try cache 的 BUG 找出来, 提个 issue

  • 資深大佬 : hujianxin

    @cmdOptionKana 很快支持泛型,有多快呀

  • 資深大佬 : xpresslink

    强制的代码风格(仁者见仁)
    强大的标准库
    对操作系统极少的依赖
    优秀的性能
    这些都不是语言的本质。
    @Hanggi 够浪的设计目标就是个有垃圾回收的 C 语言,减小开发难度和负担,所以比较适合 Go 的使用场景比 C 语言还要少。业务逻辑复杂度低又需要一定的性能服务后端开发,例如微服务。

  • 資深大佬 : ChristopherWu

    来让我喷一下 go:

    1. 没有高性能好用的泛型,你说 interface{}?那个连 go 作者都受不了,因此导致没有抽象库可用如 reduce, map, flitter, any 等等函数;
    2. 错误处理,就算是用`product type`,也没有设置好用的语法糖将 error 迭代下去,导致大量重复冗余的 if else
    3. 自作主张的 golint, 你要是希望自己比较严谨,希望社区统一,就不要定死那么多可有可无的东西,大括号换行这些没所谓。cpu CPU Cpu 大小写没所谓,但,if else 我就喜欢用 else 显示标注,你连这要管我?? 我 export 函数就是不喜欢写注释你给我报错???还不能自定义??
    4. 一开始没有想做好 包管理器 给开源社区的人用。。导致现在一大堆。。
    想到再补充。。

  • 資深大佬 : laravel

    我只想用 go 语言实现 raft 协议,但是现在还没有任何行动

  • 資深大佬 : alphatoad

    讲道理 讲道理
    动态语言生成二进制或者打包一个运行时也是分分钟的事
    高级语言哪有真不依赖运行时的,libc、posix 之类的算

  • 資深大佬 : lihongjie0209

    @alphatoad #39 系统调用还是要依赖的

  • 資深大佬 : charlie21

    PHP:不配有姓名?

  • 資深大佬 : dyllen

    go 可以让你专注自己的代码吧,其他的就不用管太多了。
    这语言可以这样,也可以那样,你要花费时间精力去搞呀。

  • 資深大佬 : blless

    @lihongjie0209 #34 很多人喷 go 的错误处理,实际上程序执行起来就是这么多错误,try catch 给很多人根本不知道啥时候应该 catch 啥时候 throw。go 给新人一个要求,就是好好处理每个 error。比之前我司 java c#写的程序不知道稳定了多少

  • 資深大佬 : CRVV

    @lihongjie0209

    重点当然不是格式化的问题
    举一个另外的例子

    sync.Map 上没有 length 或者 size 方法,获取元素的数量要用 sync.Map.Range 遍历
    https://github.com/golang/go/issues/20680
    这个链接有解释说为什么不加这个方法,a Len method would either be misleading or inefficient

    类似这样的例子应该还有一些,所以有人觉得拿 Go 写的代码质量会更高,因为一些 misleading 或者 inefficient 的功能直接被删掉了

    > Python:
    > 优秀的性能 -> 要性能的就是 C 来写

    几乎所有的语言都能调用 C 代码,照你这个说法,任何一个语言都有优秀的性能

    > JavaScript
    > npm -> 强大的标准库

    npm 不是标准库,而且我几乎没见过有人给 JavaScript 的标准库说过好话

    > Java
    > 我有 JVM -> 优秀的性能

    性能指的不单是执行时间,内存占用量也是性能的一部分,而 JVM 在这方面的性能很渣
    即使单说执行时间,JVM 可能也只是在吞吐量上有优势

  • 資深大佬 : blless

    go 的优势就在于取舍得当,现在写代码的人完全没有其他工程领域的严谨性。别的行业搞工程图纸工具测量规划设计年限都整得妥妥的。软件工程里面单元测试,覆盖测试,性能测试能做好的都没有几个。没错,就是看多了别人的代码,事实证明别人的代码根本不能相信!就需要 Go 这种静态编译型语言强制性约束!

  • 資深大佬 : fps23dot9999

    @cmdOptionKana 这段话好有翻译腔

  • 資深大佬 : cmdOptionKana

    @fps23dot9999 我故意的,现代汉语不用翻译腔总是感觉不够准确,容易有歧义。

  • 資深大佬 : libook

    个人感受 Go 是一个完全贴合工业化软件生产的语言,提供的特性精简、直达,让任何需求都有尽可能少的方案来实现(只有 1 种方案的话就不需要纠结了),让开发者将精力放在业务本身,把业务之外的问题都透明化解决。

    所以某种角度上来讲,“简”是 Go 的设计哲学之一。

    以上个人感受,不同人可能会有不同的感受。

  • 資深大佬 : ChristopherWu

    @libook 一个问题,你写业务的时候,没有泛型用,都 copy-paste,看着一大坨逻辑都一样的代码,不觉得有

  • 資深大佬 : huangzongzhuan

    PHP:卑微如我

  • 資深大佬 : bbao

    @blless
    try catch 给很多人根本不知道啥时候应该 catch 啥时候 throw

    那是你可能不会,并不是很多人根本不知道。

  • 資深大佬 : Evilk

    PHP:我在哪里?

  • 資深大佬 : reus

    @ChristopherWu 没有泛型你可以用反射,不是一定要用复制粘贴。

  • 資深大佬 : blless

    @bbao 得了吧,你把 java 每个 try catch throw 都处理一下照样不少,多少人直接有 catch 一下就当无事发生。你挨个处理就光数组越界空指针错误就处理不完。

  • 資深大佬 : jin7

    java python 不香….吗

  • 資深大佬 : bbao

    @blless 并没有此赶脚哦,可能你用的不好

  • 主 資深大佬 : woahishui

    @bbao 刚开始学习

  • 資深大佬 : blless

    @bbao 是我菜鸡了,用 go 的都是菜鸡 大佬无视我好吧

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具