网站首页 > 文章中心 > 其它

业界对go语言的评价

作者:小编 更新时间:2023-09-29 13:37:22 浏览量:47人看过

为什么越来越多人偏爱用Go语言做开发?慕课网也越来越多关于go的课程了?

个人认为:

①.、上手快

只要你有其会其他语言,学习go很快.

因为它开源,所以很容易找到你想要的框架,开发效率非常高.

你的一个程序可以随意部署.

业界对go语言的评价-图1

不受操作系统限制,windwos、linux、macos都能支持.

编译成一个文件就可以发布了,不需要环境支撑.

好了,全部的最基本的理由,当然这些对于.net core来说也一样,但是对比一下发布的文件大小你就知道该选择谁了.

为什么要使用 Go 语言?Go 语言的优势在哪里?

①.、简单易学.

Go语言天生支持并发,可以充分利用多核,轻松地使用并发. 这是Go语言最大的特点.

业界对go语言的评价-图2

描述

Go的语法接近C语言,但对于变量的声明有所不同.Go支持垃圾回收功能.Go的并行模型是以东尼-霍尔的通信顺序进程(CSP)为基础,采取类似模型的其他语言包括Occam和Limbo,但它也具有Pi运算的特征,比如通道传输.

与C++相比,Go并不包括如枚举、异常处理、继承、泛型、断言、虚函数等功能,但增加了 切片(Slice) 型、并发、管道、垃圾回收、接口(Interface)等特性的语言级支持.

为什么要使用 Go 语言?Go 语言的优势在哪里

①.、学习曲线

它包含了类C语法、GC内置和工程工具.这一点非常重要,因为Go语言容易学习,所以一个普通的大学生花一个星期就能写出来可以上手的、高性能的应用.在国内大家都追求快,这也是为什么国内Go流行的原因之一.

业界对go语言的评价-图3

Go拥有接近C的运行效率和接近PHP的开发效率,这就很有利的支撑了上面大家追求快速的需求.

Go语言可以说是开发效率和运行效率二者的完美融合,天生的并发编程支持.Go语言支持当前所有的编程范式,包括过程式编程、面向对象编程以及函数式编程.

这包括互联网应用、系统编程和网络编程.Go里面的标准库基本上已经是非常稳定,特别是我这里提到的三个,网络层、系统层的库非常实用.

我相信这一点是很多人选择Go的最大理由,因为部署太方便,所以现在也有很多人用Go开发运维程序.

它包含降低心智的并发和简易的数据同步,我觉得这是Go最大的特色.之所以写正确的并发、容错和可扩展的程序如此之难,是因为我们用了错误的工具和错误的抽象,Go可以说这一块做的相当简单.

Go拥有强大的编译检查、严格的编码规范和完整的软件生命周期工具,具有很强的稳定性,稳定压倒一切.那么为什么Go相比于其他程序会更稳定呢?这是因为Go提供了软件生命周期的各个环节的工具,如go

tool、gofmt、go test.

如何看待go语言泛型的最新设计?

Go 由于不支持泛型而臭名昭著,但最近,泛型已接近成为现实.Go 团队实施了一个看起来比较稳定的设计草案,并且正以源到源翻译器原型的形式获得关注.本文讲述的是泛型的最新设计,以及如何自己尝试泛型.

例子

FIFO Stack

假设你要创建一个先进先出堆栈.没有泛型,你可能会这样实现:

type?Stack?[]interface{}func?(s?Stack)?Peek()?interface{}?{

return?s[len(s)-1]

}

func?(s?*Stack)?Pop()?{

*s?=?(*s)[:

len(*s)-1]

func?(s?*Stack)?Push(value?interface{})?{

*s?=?

append(*s,?value)

但是,这里存在一个问题:每当你 Peek 项时,都必须使用类型断言将其从 interface{} 转换为你需要的类型.如果你的堆栈是 *MyObject 的堆栈,则意味着很多 s.Peek().(*MyObject)这样的代码.这不仅让人眼花缭乱,而且还可能引发错误.比如忘记 * 怎么办?或者如果您输入错误的类型怎么办?s.Push(MyObject{})+ 可以顺利编译,而且你可能不会发现到自己的错误,直到它影响到你的整个服务为止.

通常,使用 interface{} 是相对危险的.使用更多受限制的类型总是更安全,因为可以在编译时而不是运行时发现问题.

泛型通过允许类型具有类型参数来解决此问题:

type?Stack(type?T)?[]Tfunc?(s?Stack(T))?Peek()?T?{

func?(s?*Stack(T))?Pop()?{

func?(s?*Stack(T))?Push(value?T)?{

这会向 Stack 添加一个类型参数,从而完全不需要 interface{}.现在,当你使用 Peek() 时,返回的值已经是原始类型,并且没有机会返回错误的值类型.这种方式更安全,更容易使用.(译注:就是看起来更丑陋,^-^)

此外,泛型代码通常更易于编译器优化,从而获得更好的性能(以二进制大小为代价).如果我们对上面的非泛型代码和泛型代码进行基准测试,我们可以看到区别:

type?MyObject?struct?{

X?

int

var?sink?MyObjectfunc?BenchmarkGo1(b?*testing.B)?{

for?i?:=?0;?i?b.N;?i++?{

var?s?Stack

s.Push(MyObject{})

s.Pop()

sink?=?s.Peek().(MyObject)

var?s?Stack(MyObject)

sink?=?s.Peek()

结果:

在这种情况下,我们分配更少的内存,同时泛型的速度是非泛型的两倍.

合约(Contracts)

上面的堆栈示例适用于任何类型.但是,在许多情况下,你需要编写仅适用于具有某些特征的类型的代码.例如,你可能希望堆栈要求类型实现 String() 函数

Go语言怎么样?

Go语言是谷歌推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性.谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发Go,是因为过去10多年间软件开发的难度令人沮丧.

Go Logo

谷歌资深软件工程师罗布-派克(Rob Pike)表示,"Go让我体验到了从未有过的开发效率."派克表示,和今天的C++或C一样,Go是一种系统语言.他解释道,"使用它可以进行快速开发,同时它还是一个真正的编译语言,我们之所以现在将其开源,原因是我们认为它已经非常有用和强大."

派克表示,编译后Go代码的运行速度与C语言非常接近,而且编译速度非常快,就像在使用一个交互式语言.现有编程语言均未专门对多核处理器进行优化.Go就是谷歌工程师为这类程序编写的一种语言.它不是针对编程初学者设计的,但学习使用它也不是非常困难.Go支持面向对象,而且具有真正的闭包(closures)和反射 (reflection)等功能.

在学习曲线方面,派克认为Go与Java类似,对于Java开发者来说,应该能够轻松学会 Go.之所以将Go作为一个开源项目发布,目的是让开源社区有机会创建更好的工具来使用该语言,例如 Eclipse IDE中的插件.

在谷歌公开发布的所有网络应用中,均没有使用Go,但是谷歌已经使用该语言开发了几个内部项目.派克表示,Go是否会对谷歌即将推出的Chrome OS产生影响,还言之尚早,不过Go的确可以和Native Client配合使用.他表示"Go可以让应用完美的运行在浏览器内."例如,使用Go可以更高效的实现Wave,无论是在前端还是后台.

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章