最近在弄golang,实在搞不懂,为啥那么多人现在就从node转向golang
发布于 7 年前 作者 ringtail 12658 次浏览 最后一次编辑是 6 年前 来自 问答

先说说我的看法吧,golang从某种意义来讲,和node一样,都是有缺陷的,golang的缺陷在于配套设施缺少的太多了,接触golang快2周了,第一,缺少好的包管理机制,每次写项目要写gopath,虽然有些项目比如gvp,gpm等帮助做这样的事情,但是语言的原生不支持感觉很奇葩。第二点缺少好的调试方式,除了GDB和print之外没什么好的调试方式了。第三点,他的包机制感觉很奇葩,感觉golang想把github作为管理的一种默认状态,如果私有包的话,就比较悲剧了,引用调试之类的感觉都没有node方便。不清楚为啥还有那么多人转向golang,如果说想要惠及channel的好处,那么他们是怎么解决上面的这些问题的,我觉得如果上面的问题解决不了,用golang做工程相当的难受,基本没法忍受。希望大牛们指点一二

16 回复

想了解 go,因为TJ大神转go了。

@think2011 就目前来讲,自己感觉有的时候写起来挺别扭的,感觉还不成熟。

  1. 做tdd是可以不用调试的
  2. 包管理确实有问题
  3. go最大的问题是它不是c语系,改变了很多习惯

@i5ting tdd和调试有什么必然的关系,做TDD一眼也需要调试啊,golang的语法我觉得倒是挺简单的,问题在于怎么构建大项目。

虽然不懂,但是好像docker是golang做的。

@ringtail 测试代码写的足够多的话,是不需要调试的

@chuchangming 是的,但是很好奇docker是怎么写出那几万行的,有没有大神能够指导一下。

@i5ting 刚才一个前辈也这样说,可能我体会不是很深。

我来找下喷:Golang and Docker are full of shit! 顺便留下一段可以静态编译成C的语言代码:(这才有未来语言的意思,Go is shit)

type
    NodeObj[T] = object {.acyclic.}
    byte: int
    otherbits: char
    case isLeaf: bool
    of false: 
        child: array[0..1, ref NodeObj[T]]
    of true:
        key: string
        when T isnot void:
            val: T

proc len*[T](c: CritBitTree[T]): int =
    result = c.count
    
proc rawGet[T](c: CritBitTree[T], key: string): Node[T] =
    var it = c.root
    while it != nil:
        if not it.isLeaf:
            let ch = if it.byte < key.len: key[it.byte] else: '\0'
            let dir = (1 + (ch.ord or it.otherBits.ord)) shr 8
            it = it.child[dir]
        else:
            return if it.key == key: it else: nil

iterator itemsWithPrefix*[T](c: CritBitTree[T], prefix: string): string =
    for x in leaves(allprefixedAux(c, prefix)): yield x.key

@tulayang docker是个好东西,但是有些地方的代码真的很乱。

@i5ting 建议配合下fig或者kubernets来看,脑洞很大的。

package 机制太shit 。。。 看的那本go语言编程。官方推荐 a.go a_test.go 在一起,看见这样的就觉得shit ! 对,我是强迫症,要要要要放在 test文件夹

@magicdawn 我也是…看着有种想砸键盘的感觉…

你们太挑食了,这样不利于身体健康

回到顶部