Go数据结构
发布于2009年11月24日星期二。
基本类型
结构和指针
类型Point结构{X,Y int}
类型Rect1结构{Min,Max Point} 类型Rect2结构{Min,Max*Point}
串
片
新建和制作
马上就来。。。
-
蒂瓦杰 (2009年11月24日下午12:57) 那么与C、C++相比,Go的性能如何呢; Java还是C#? 预计降解约-5%?
-
杜布黑德 (2009年11月24日下午6:22) 谢谢你的文章,它重新安排了我对这个主题的理解。 两种可能的修正: 在“Slices”中,“x[0:4]是有效的切片表达式”应该类似于“如果y:=x[1:3],那么y[0:4]是有效的片段表达式”。 在“新建并生成”图中,new(Rect)应该是new(Rect1)。
-
阿特约姆·沙尔卡科夫 (2009年11月24日下午7:28) 您已经展示了Go中的类型规定了数据的内存布局。 我想知道是否可以使用Go类型系统来描述某些不变量?
-
塔夫 (2009年11月24日下午7:49) 此帖子已被作者删除。
-
塔夫 (2009年11月24日下午7:51) 嘿Russ, 谢谢你的这篇内容丰富的文章。 作为即将加入Go的Python程序员,我想知道您是否会考虑在未来的文章中使用一系列“最佳Go模式”? 我——可能还有很多其他人——在内存分配、优化等问题上相当无知。因此,通过比较Go中解决同一问题的“好”和“坏”方法,学习更好的方法将非常有帮助… 无论如何,我期待着您关于地图、界面和频道的后续帖子。 谢谢! -- tav@espians.com
-
朱利安·莫里森 (2009年11月25日2:07 AM) 不允许索引超出切片,但允许新切片达到容量,这有什么用处? 它是要给出一些近似于Java的Buffer接口的填充指针的东西吗?
-
俄罗斯考克斯 (2009年11月29日10:07 PM) @蒂瓦吉:这当然是目标。 你可以在枪战网站上查看真实的对比。 请注意,在这些基准测试中,C或C++通常会有大量的asm。 @都柏林:谢谢; 固定的。 @Artyom:你想知道什么样的不变量? @tav:已经有一个文档尝试这样做: http://golang.org/doc/effective_go.html。 @朱利安:见 http://golang.org/doc/effective_go.html。 它有助于捕获要禁止的边界外错误 索引超过len,因为在大多数情况下 len后面的数据不包含任何有用的内容。
-
阿特约姆·沙尔卡科夫 (2009年12月3日11:35 PM) @rsc:例如,我想让我的编译器为我检查一个数组的out-of-bounds访问。有一些研究原型(例如ATS),但如果能用实际的编程语言实现这一点就太棒了
-
MikeZ公司 (2009年12月5日上午7:00) 关于字符串垃圾收集的问题。 假设我们有一个字符串和它的一部分: s:=“hello”//ptr到“hello“ t:=s[2:2]//ptr到“llo” s=“再见”//“你好”现在是垃圾吗? 如果当前垃圾收集器在最后一次分配给s之后收集,t会发生什么情况? 当前GC是否足够智能,能够识别t指向“hello”的内部,因此不应该收集“hello“?
-
布赖恩·布尔科夫斯基 (2009年12月6日下午4:06) 我认为“枪战”网站对于我使用语言的目的来说是一个糟糕的衡量标准。 我希望能自由使用字符串、散列和列表; 这些测试避免了这些结构,并将重点放在循环和读写上。 话虽如此,枪战声称围棋与二郎处于同一水平,与C相去甚远。 我看了几个C程序; 没有包含asm()语句。 Go中的二叉树功能比C慢20倍。 我愿意相信围棋是不成熟的,需要努力,但当它比C慢20倍(而不是20%)时,听到人们说“围棋就是达到目标”让我感到兴奋。
-
俄罗斯考克斯 (2009年12月6日下午4:51) @布莱恩: 二叉树shootout不是一个二叉树基准测试。它是一个垃圾收集基准测试,Go的垃圾收集器速度非常慢。 另一方面,它有一个,不像C,它会变得更好。 如果你看一下实际的计算,而不是库,Go是用等效的C代码保持自己的。 反向补码现在几乎与等效的C程序捆绑在一起(还没有在网站上,但在Go存储库中),mandelbrot慢了10%,nbody慢了50%,只是因为它没有内联对sqrt的调用。 还有,谁说围棋达到了它的表现目标? 我认为对于一个粗略的实现来说,它做得很好,但仍有很大的改进空间和许多低垂的成果。
-
格雷格 (2011年4月4日11:19 PM) 非常棒的描述,谢谢Russ。