go语言的看(te)点(se)在哪里( 二 )



■网友
Go 语言的指针一旦分配,就没办法修改,除非重新分配,好像是为了照顾快速编译,因为要标记所有变量会拖累编译速度,再者也和 C 语言不一样,指向数组的指针不是第一个元素。是一个描述数组的 slice. 这样解决了操作数组时的一些性能消耗。再者,为什么要指针,是因为如果像 Java 和 C# 一样,很难控制内存中的数据结构,Go 语言是奔着系统去的,Google 本身就是性能和速度的狂热者。Go 语言在学术上确实乏善可陈,已经有很多国内外高手做了很多分析,但它就是为了照顾一些非常聪明,又不太熟悉编程的人,集体协作做出来的语言。在工程上它有很多优点。 隐式转换,还不是编译器或者虚拟机在看不见的地方做了很多事,这些事带来了很多便利的同时也很多坑,填坑的时间可能要更麻烦。但 Go 语言确实有很多让人不爽的地方。ksimka/go-is-not-good · GitHubGitHub 上,已经出现了集体批评 Go 语言的声音。但如果觉得用 C 和 C++ 过于麻烦,用 Python 又很难满足性能。这时候 Go 语言是不错的选择。Go 语言没有那么神。但的的确确是一些超级牛逼的人设计出来的。学一学,肯定有价值。如果从自身的体验和经验来总结 Go 语言的特点的话:在很多地方,最大化了执行性能和编写效率这两个矛盾的存在。
■网友
嗯,没有特色就是最大的特色,基本21天都不用就能精通的语言
■网友
最大的特色是简单。体现在以下几个方面:1. 语法简单,继承至c语言,相对于cplus,没有太多坑等你踩,用着舒心2. 并发使用超级爽,无需异步编程就能做到超高并发,而且语言层面做的哦,不需要使用乱七八糟的各种库3. 同步方式优雅,写过多线程的你肯定懂4. interface,这个你自己琢磨吧 反正我是很爱用小白一枚,泛泛而谈,如有不足,请多指教
■网友
个人认为最大的特色在于在它是一门静态语言却有GC能力(当然这直接导致了编译出一个空程序都有1M多的体积),其次是轻量级线程(协程)。
■网友
(1) 隐式转换隐式转换还带来了无须有的复杂规则,还带来了隐晦的坑:\t规则一:Integer Promotion, char类型在做算术操作时,提升为int。\tchar c = 1;\tint i = c + 2; // i的值是2\t规则二:Arithmetic Conversion,如果操作符两边操作数类型不一致,会自动转换成相同的类型。\tunsigned int i1 = 10;\tint i2 = -1;\tdouble d3 = i1 * i2; // bug,d3的值是4294967286.000000 -_-!! \t规则三:赋值类型转换,等号两边类型不一致发生的转换。\tint a = 5, b = 2; \tdouble d = a / b; // bug,d的值是2\t还有一个隐晦的坑:\tchar c = getchar(); // 这句有bug\tc++提供的static_cast一方面就是让我们显式的进行转换。\t另外,如果c++没有隐式转换的话,那么explict关键字也不会出现在世人面前。(2) 自动类型识别,不太清楚,可能对于封装json来说很有用:\tBoolean values encode as JSON booleans.Floating point, integer, and Number values encode as JSON numbers.(3) go语言肯定需要指针。指针运算可以用代替。\tjava是引用语义的,传递对象时,传递的只是对象的引用。\tgo语言、c语言是值语义的,传递struct时,就是实打实的copy一个struct出来。所以这时候指针就是必需的罗。(4) 多返回值很好用。。。gc不了解==============go的亮点是:goroutine、channel、select:Don\u0026#39;t communicate by sharing memory, share memory by communicating,下面的例子很好的阐释了这个原则。interface:比如,我的解析json的函数,可以不管传进来是什么流(文件流、网络流、或者是buff),只要实现io.Read接口,就能被我解析。还有,interface{}可以hold住任何类型,加上type assertssion,可以实现一个map存任何类型的value,从map取值时,还能还原value的原本类型。一个例子,来自golang官方:loop线程周期性地调用s.fetcher.Fetch()获取rss条目,然后发送到s.updates这个channel。


推荐阅读