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

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • go 怎么感觉啥都缺啊,他的定位在哪里
未分類
2 9 月 2020

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

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

資深大佬 : hzjseasea 3

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

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

有大佬给个定位嘛

大佬有話說 (100)

  • 資深大佬 : coderxy

    2 的话确实是槽点,每次写的时候我都想喷。3 的话一般般吧,虽然确实难用但是官方的说法好像也有道理。 1 的话只能说别拿别的语言的一些特性来要求 go 吧,每个语言设计就是不同的。

    另外说 go 的前景,我觉得除了 java 外在后端领域 go 应该是最有前景的了。

  • 資深大佬 : pigmen

    确实 每次用时间都想骂,这么随便真的好吗。。

  • 資深大佬 : wellsc

    空降架构师刷 kpi

  • 資深大佬 : vevlins

    c/c++ 易用版

  • 資深大佬 : rimutuyuan

    2. 2006 – 01 – 02 15(3): 04:05 612345 时间格式化还是比较好记的

    3. err 除了比较占地方,其他挺好的

  • 資深大佬 : caryqy

    第二点 只需要记住是 06 年的 然后后面是 1 2 3 4 5, 2006-01-02 15:04:05 我觉得比你说的那个形式好记多了

  • 資深大佬 : Vegetable

    20060102150405 无力吐槽…

  • 資深大佬 : wzw

    反正越用越喜欢了

  • 主 資深大佬 : hzjseasea

    @pigmen 真的好随便,就感觉这个是他们自家语言一样 太任性了

  • 主 資深大佬 : hzjseasea

    我感觉用来写中间件会好点把,这个要是拿来写 web,会不会全屏都是 if err != nil {} ….

  • 主 資深大佬 : hzjseasea

    @coderxy 我感觉用来写中间件会好点把,这个要是拿来写 web,会不会全屏都是 if err != nil {} ….

  • 資深大佬 : bk201

    @rimutuyuan 这么随意的么…

  • 資深大佬 : Maboroshii

    我倒是感觉时间格式化很好用。。
    可能是我用的少的原因 MMmm 的大小写我每用一次就要查一次。。

  • 資深大佬 : coderxy

    @hzjseasea 很不幸,我们就是拿 go 写的业务, 中型项目。 还行吧,虽然 if err!=nil 多了点,但是还在忍受范围内。

  • 資深大佬 : damngood

    时间格式不用记
    time 包里面很多预设的 const 值,很多可以直接用,不适合拿过来改一下就好.

  • 主 資深大佬 : hzjseasea

    @wzw 爽是真的爽,这几天下来爽的时候贼开心,碰到有些槽点的时候,就有种说不出的憋屈

  • 主 資深大佬 : hzjseasea

    @caryqy 主要第一种写惯了

  • 主 資深大佬 : hzjseasea

    @wellsc 这应该只是一个梗吧

  • 資深大佬 : kiracyan

    少用 GO 写业务 不然烦死了

  • 資深大佬 : damngood

    函数没重载确实是个痛点…
    方法签名和参数无关,有点小不爽.

  • 主 資深大佬 : hzjseasea

    @kiracyan 嗯呢一开始学的时候就是打算拿来写组件的,业务后面有需求再用

  • 資深大佬 : zdt3476

    第一点确实开发的时候不够舒服。但是第二点我觉得是优点,非常好记

  • 資深大佬 : securityCoding

    @kiracyan 写写中间件还不错 ,业务的话泛型出来就好了,我一直在等…

  • 資深大佬 : AngryPanda

    2 这正是你的机会啊小老弟,写个 package 来这里推广。

  • 資深大佬 : fishCatcher

    用 go 刷 leetcode 本身就是不对的,go 对标的是 c 而不是 cpp

  • 資深大佬 : isayme

    第 2 个问题提供一个解决思路: 在 docker build 前, 把 $GOROOT/src/time/time.go 里的 MarshalJSON 方法给换掉了. 格式化为 2006-01-02T15:04:05.000Z 这种格式.

  • 主 資深大佬 : hzjseasea

    @fishCatcher 习惯了,学个新的语言都回去刷一会熟悉一下语法 那像 rust 这种对标 CPP 的也很难写 leetcode 啊,链表都很难写。

  • 資深大佬 : mingsz

    612345

  • 主 資深大佬 : hzjseasea

    @isayme 好的谢谢,我去试试

  • 資深大佬 : windfarer

    大道至简(狗头

  • 資深大佬 : 676529483

    其实每次写 go 难受的时候,我就回去看看 c/c++,再回来就真香

  • 資深大佬 : cmdOptionKana

    哪个语言是完美的找不出几个槽点?你说的 Go 的这几个问题,有一说一都是小问题,不管做项目还是刷算法,就你举出的这几个问题,有实质性影响吗?

    正好隔壁在骂 swoole,你去看看,都在说转 Go https://v2ex.com/t/703874

  • 資深大佬 : superrichman

    被 go 的执行效率吸引,然后被 err 地狱劝退

  • 資深大佬 : kidlj

    上说的有道理。我读过好几篇对比 Go 和其它语言的文章 /评论,包括王垠的那篇,都是找到几个相对审美角度的小问题开始吐槽,这也说明 Go 没什么大的问题。

    Go 社区调查中报告的最想解决的三个问题:

    – 包管理
    – 范型
    – 错误处理

    第一个已经解决了;第二个也快解决了;第三个还在探索。

  • 主 資深大佬 : hzjseasea

    @superrichman 心声!

  • 資深大佬 : SurfaceView

    你好 其实 go 里面比你说的这 3 个更坑的 更多, 哈哈哈

  • 資深大佬 : SurfaceView

    -> 接上 我说的是实际开发中.

  • 資深大佬 : wzw

    @superrichman 错误全部管到,不好?

  • 資深大佬 : neoblackcap

    @hzjseasea 链表还行,你不追求零抽象就还好

  • 資深大佬 : wzw

    @hzjseasea 世界公平,有好就有坏,看你要什么,go 的优点我喜欢

  • 資深大佬 : neoblackcap

    @wzw 错误强制检查没什么问题,关键是,你怎么处理错误。有些直接就返回一个字符串,本应该可以处理的没法处理。这个才是最大的槽点。
    关键不是每个 error 都是字符串,有些又是另外的类型。究其原因还是 error 这个接口太弱了,并不好用。

  • 資深大佬 : MrTreasure

    难用的包管理已经解决了,还解决了 proxy 问题。泛型提上日程了,接下来就是错误处理

    用 go 写开发简单很多,特别是前端过来的同学

  • 主 資深大佬 : hzjseasea

    @cmdOptionKana 大佬莫激动,go 是个好语言,只是有些地方用的怪怪的

  • 主 資深大佬 : hzjseasea

    @neoblackcap 对的就是这个问题,写的很憋屈。

  • 資深大佬 : kidlj

    补一句,我爱 errlang !❤️

  • 資深大佬 : chenqh

    return error 简直了都, 最关键的是 80-90%的 error 都是 return, 那么为什么不学 exception, 默认上抛?

  • 資深大佬 : dalibaxiaoliba

    我 C++和 Go 两边切,一直觉得 Go 比较爽,没心智负担

  • 資深大佬 : fishofcat

    go 的确最大的特点就是心智没那么大负担。库的话和 c 差不多,肯定比 c++,java 这些老牌差的多

  • 資深大佬 : pengjay

    直接 panic,外面 recover

  • 資深大佬 : ylsc633

    最近做 B 端结算

    多渠道 多数据计算

    启动多个协程 一起处理

    管道塞数据 另一头多协程处理,别提多爽了..

    以前要执行半个小时的 现在 20s 我就执行完了…

  • 資深大佬 : securityCoding

    @ylsc633 优秀 , 话说这个场景有多线程+队列就能处理了吧?

  • 資深大佬 : xcp3555

    我其实一直不觉得 Go 有某些人说的那么好用… 在我看来它只是有自己的特点而已,并不是有什么先进的优势,甚至这些特点也可以成为缺点,毕竟特点是中性的,有特点不代表都是优点。

  • 資深大佬 : zengming00

    go 的强硬是为了更好的明天

  • 資深大佬 : stevefan1999

    @wzw 我和你相反 越用越發現他其實有很多缺陷 越來越噁心了

  • 資深大佬 : stevefan1999

    首先是 err 其次是 shadowing 再之後就是沒有泛型 和沒有 iterator/generator

    goroutine 的設計也是挺反人類的 這點 rust 做得很好

  • 資深大佬 : stevefan1999

    *name shadowing 導致了我不能這樣寫
    “`golang
    func (b *Builder) BootstrapClient() (ret *Client, err error) {
    args, err := b.Config.String()
    if err != nil {
    return
    }
    …
    return
    }
    “`
    這裏的 err 是被重載了 所以如果第二行有 err return 的真 err 依然是 nil

  • 資深大佬 : CoderGeek

    go 还年轻

  • 資深大佬 : inframe

    从日常使用角度看,静态语言 go 除了错误处理和泛型,基本上没有结构性的问题了;
    部署上是最大的优点,编译完直接丢上去就可以跑了

  • 資深大佬 : swulling

    除了错误处理外,其他两个只能说是小问题。那就证明这个语言没啥大问题

  • 資深大佬 : swulling

    Go 最大的问题还是比较年轻导致生态还需要建设,很多包都没有或者质量不高。

  • 資深大佬 : Macolor21

    @dalibaxiaoliba c++太复杂了

  • 資深大佬 : yxcoder

    Go 的错误处理好像是作者故意为之的。作者受不了现在项目 try catch 乱用

  • 資深大佬 : minami

    你站在 C 语言角度看就啥都不缺了,doge

  • 資深大佬 : cmdOptionKana

    @hzjseasea “go 是个好语言,只是有些地方用的怪怪的”

    我想了一下,貌似找不到一个语言用起来不怪的,每个语言都有怪怪的地方……

  • 資深大佬 : catcn

    @hzjseasea 不会都是 if err!=nil 的,可以包个 recover

  • 資深大佬 : cmdOptionKana

    @yxcoder java 为了弥补 try catch 的缺陷,弄出个 Checked Exception,但也不完美。其实 try catch 那一套如果有强迫症想处理得完美一点,结果麻烦程度和 Go 的 err 也差不多。

  • 資深大佬 : ConradG

    go 是且只是挂载了一个不错协程库和杂揉了若干不统一语法糖的 extend C
    go 在使用方面最主要的问题之一是为了语法简洁牺牲了太多语义表达能力。和 C 对比的时候问题不大,但和其他常用的高级语言相比,go 的语言抽象能力就是没入门级别的。

  • 資深大佬 : hideokuze

    定位在容易和有个好爹,要不然 Erlang 更好用(

  • 資深大佬 : firefox12

    @ylsc633 这绝对不是 go 牛逼,而是你原来写的太 sb

  • 資深大佬 : reus

    yyyy-MM-dd HH:mm:ss 通用?笑死个人,你还是多接触几门语言,多接触几种数据库,再来判断下,是不是通用。

    妈的每次用到这种格式化字符串都要查文档,从来都没有统一的标准,你认为通用,只是你不知道有多少变种而已。

  • 資深大佬 : reus

    @stevefan1999 错,因为 err 已经在返回值定义了,所以 args, err := … 这行,err 就是指返回的 err,不会覆盖,这种写法完全没问题。如果覆盖的话,编译器直接就报错了。

    不信你自己看: https://play.golang.org/p/vD3nZ95D9-r

  • 資深大佬 : joesonw

    @pengjay stack 不要钱的?

  • 資深大佬 : jinliming2

    Go 的时间不是有常量吗?日常用的几种规范都提供常量了啊?
    time.Now().Format(time.RFC3339)
    正常这样就行了啊,要其他格式也都有内置定义。
    需要 HTTP 的时间格式,可以用
    time.Now().Format( http.TimeFormat)
    除非是要非标准的的格式才需要手写……

  • 資深大佬 : reus

    @joesonw 标准库就有这样的写法: https://github.com/golang/go/search?q=catchError&type=Code

  • 資深大佬 : lancelock

    我工作用 java,最近用 go 写了一个个人项目(做业务的)。感觉是不太方便,但直接,部署也简单。之前有些功能感觉比较难实现,但后来修修补补也能搞出来。就那样把,感觉还是.net core 更优秀

  • 資深大佬 : wangyzj

    哈哈哈,几乎没啥轮子
    各种奇葩设计
    需要习惯一下下下下下下下下下下下下下下下

  • 資深大佬 : upupddd

    scala 路过

  • 資深大佬 : j2gg0s

    吐槽都吐槽不到点上,时间的通用型式,
    通用是哪个标准下的通用
    rfc3339?ios 8601?还是设计的通用时间格式? :dog

  • 主 資深大佬 : hzjseasea

    @cmdOptionKana 大佬莫激动 ,go 是个好语言,用起来真的爽,只是有些地方写着写着有点迷,但细想他这样的设计也的确有他的道理
    @cmdOptionKana 那可能个人使用上不同的把 我觉得 python java .net 这些都蛮正常的,rust 虽然复杂了点,但写起来也蛮舒服的

  • 主 資深大佬 : hzjseasea

    @catcn 谢谢 我去看看这方面的

  • 資深大佬 : crclz

    go 缺 java 的特性。java 和 c#都发展成非常相似的样子; spring 和 asp.net 也发展成非常相似的样子。这就说明,webapp 的框架和语言的最优解已经收敛到了 spring 和 asp.net 附近。

  • 主 資深大佬 : hzjseasea

    @reus 可以举例几个嘛,至少我写过的几个都是这种形式的

  • 資深大佬 : buffzty

    1. 我觉得挺好的,java 功能太多 封装太严重我很不喜欢. 再说了可以弄默认值的 你不会而已
    2. 2006 01 02 15:04:05 很好记
    3. 跟 c 语言处理方式一模一样 哪来的懵逼
    这三个都不是坑 泛型才是最急的

  • 資深大佬 : ccav

    从 0.9 等泛型等到 2.0~~

    无 runtime 还是太方便了.

  • 資深大佬 : reus

    @hzjseasea 形式是一样,但有的用 yyyy,有的用 YYYY,有的用 MM,有的用 mm,你难道还要一个个记住? go 的根本不用记,就是 123456

  • 資深大佬 : jhdxr

    go 也就大陆用的多。。。

    回过头来还是得要么 java,要么 rust/c/c++

  • 資深大佬 : wzw

    @stevefan1999 你用 rust ?

  • 資深大佬 : fox0001

    @chenqh #46 记得是出于性能的考虑。抛 exception 很占资源

  • 資深大佬 : admirez

    go 本来可以大发展的,但是这个时间格式就看出来小格局了

  • 資深大佬 : chengxiao

    @reus 拉倒吧 确实不用记 每次用我都得去查一次~

  • 資深大佬 : p1gd0g

    shadowed error 也有人吐槽。
    把定义在返回值里的 error 挪到函数里不就解决了~

  • 資深大佬 : securityCoding

    @p1gd0g 没理解挪到函数 , 方便贴个代码吗?

  • 資深大佬 : anjianshi

    只有我想吐槽 go 官方推荐用 tab 做缩进吗…. 明明主流都倾向空格,且空格兼容性更好

  • 資深大佬 : tikazyq

    golang 简单,上手快,天生并发,这点优势 java 还是略欠缺。话说大家为啥不用.Net ,个人觉得比 java 香

  • 資深大佬 : vone

    .NET 天下第一

  • 資深大佬 : CodeCodeStudy

    @reus 小时为什么用 15,而不是 03 ?

  • 資深大佬 : huiyifyj

    @coderxy #14
    if err!=nil 实在是太多了,蛋疼的错误处理

  • 資深大佬 : mshadow

    @reus yyyy-MM-dd HH:mm:ss 是 ISO 标准

  • 資深大佬 : Pythondr

    @CodeCodeStudy 15 是 24h 制,03 是 12h 制

  • 資深大佬 : ytll21

    go 只是好学门槛低,说到可玩性,rust 能甩出它 10 条街。。。

文章導覽

上一篇文章
下一篇文章

AD

其他操作

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

51la

4563博客

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