先说说我的看法吧,golang从某种意义来讲,和node一样,都是有缺陷的,golang的缺陷在于配套设施缺少的太多了,接触golang快2周了,第一,缺少好的包管理机制,每次写项目要写gopath,虽然有些项目比如gvp,gpm等帮助做这样的事情,但是语言的原生不支持感觉很奇葩。第二点缺少好的调试方式,除了GDB和print之外没什么好的调试方式了。第三点,他的包机制感觉很奇葩,感觉golang想把github作为管理的一种默认状态,如果私有包的话,就比较悲剧了,引用调试之类的感觉都没有node方便。不清楚为啥还有那么多人转向golang,如果说想要惠及channel的好处,那么他们是怎么解决上面的这些问题的,我觉得如果上面的问题解决不了,用golang做工程相当的难受,基本没法忍受。希望大牛们指点一二
想了解 go,因为TJ大神转go了。
@think2011 就目前来讲,自己感觉有的时候写起来挺别扭的,感觉还不成熟。
- 做tdd是可以不用调试的
- 包管理确实有问题
- go最大的问题是它不是c语系,改变了很多习惯
@i5ting tdd和调试有什么必然的关系,做TDD一眼也需要调试啊,golang的语法我觉得倒是挺简单的,问题在于怎么构建大项目。
虽然不懂,但是好像docker是golang做的。
@ringtail 测试代码写的足够多的话,是不需要调试的
@chuchangming 答对了,加5分
@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是个好东西,但是有些地方的代码真的很乱。
@tulayang 这个牛B
@i5ting 建议配合下fig或者kubernets来看,脑洞很大的。
package 机制太shit 。。。 看的那本go语言编程。官方推荐 a.go a_test.go 在一起,看见这样的就觉得shit ! 对,我是强迫症,要要要要放在 test文件夹
@magicdawn 我也是…看着有种想砸键盘的感觉…
你们太挑食了,这样不利于身体健康