|
|
|
|
移动端

百盛娱乐现金网址导航:爱上 Go 语言的10个理由

本文来源:http://www.2233122.com/www_zvod_net/

太阳城娱乐网最快登入,  杨晶、吉炳轩、王勇、王钦敏参加。  为规避发行市盈率“红线”,今年以来发行的新股不约而同地将发行市盈率定位于23倍以下。陈冰表示,自己看新闻听说过裸贷,但完全没有想到,女儿竟然会沾上。  意见针对天然气下游消费领域多个板块提出了推进天然气利用的四大重点任务。

  对今天的俄罗斯来说,那场事变怎么评价都是一场地缘政治灾难。一审法院查明,2008年10月至2012年3月,黄璋宝以承诺高息回报为诱饵,通过推介会的方式对外宣传,非法集资49亿余元,并造成损失7亿余元。游戏的名字叫做挑战。  新华社华盛顿12月7日电(记者李博闻)因为在2016年里约奥运会上的杰出表现,美国篮协7日宣布,卡梅隆·安东尼和凯文·杜兰特被联合授予2016年最佳男球员称号。

编辑:庭审过程将通过互联网全程直播。如今,自动机床可以高速制造零件,而且只需要很少像他那样受过高等教育的工程师对机器进行维护。  梁斌还特别指出,我们提倡见义勇为,更提倡见义智为,倡导公民个人在确保自身安全的情况下,勇于站出来,不当旁观者。

这个月 Go 语言就将迎来它的10岁生日了,于是我们特地列出了10条让你可以开心使用 Go 语言的理由。

作者:4bytes来源:今日头条|2019-11-12 16:44

这个月 Go 语言就将迎来它的10岁生日了,于是我们特地列出了10条让你可以开心使用 Go 语言的理由。

Map 集合/映射默认使用0值

在 Go 中使用映射时,即使你尚未为特定的键插入任何值,也可以查询该键,并且它所对应的值为0还不是nil,除非存储的是指针。

因此如果你有这样一个映射 m:=map[string]int然后你想得到 m["hello"],返回的结果将是 0,即使该位置并没有值。

这允许我们写代码时不需要再检查该键是否存在,从而使代码更加整洁。想象如果我们想要保存某个字符串中一个字符出现的频率,我们只需要这样做:

  1. func count(input string) (map[string]int) { m := map[string]int{}for _,s := range input { m[string(s)]++ / 这一步永远都会是安全的}return m} 

上面的代码中,我们无需在递增之前事先判断该键是否已经有值。

不变值

默认情况下,当向一个方法或者函数传递值时,你无法对它进行更改。当你确实需要更改这个值时,你需要向这个值传递一个指针。它不像 Rust 那么严格,后者在初始化变量时就需要标记它是可变变量。尽管如此,这仍然意味着如果你调用了一个不接收指针的函数,你可以确定它不会和你的结构所混淆。

值默认不会是 nil

不管在哪种语言里,我都不是很喜欢 Null,因此我很高兴在 Go 里,默认情况下你的结构或者基本类型绝对不会指向 Nil,这就消除了错误检查——当然有一个例外,就是在使用指针的情况下,因此在此情况中我们应该有错误处理机制。就算是 Tony Hoare 这个发明了 Null的人也曾经将它形容为一个“价值百万美元的错误”。

  1. type myStruct struct{}func magic(m myStruct) {/ 无指针,此情况下不会出现 Nil}func magicp(m *myStruct) {/ 可能出现空指针!} 

Nil 切片 == 空切片

是的,这一点再次和 Nil 相关,因为我真的很不喜欢 Nil 值。所以另一个让我爱上 Go 语言的原因就是如果你有一个 nil 切片,它和一个空切片其实没什么区别,因此你就不需要分开判断一个切片是否为 nil然后再判断它是否为 empty。刚好这也是我喜欢 Common Lisp 的理由之一,当时我很意外 Go 语言也能有这个功能。

  1. func main() {var s []intif len(s) == 0{ fmt.Println("hello")}} 

轻松发布相关库

在知道 Go 语言中发布库有多么容易之前,我好像从来就没意识到这件事的重要性。我自己写了一些 Go 库,而我唯一需要做的事就是把它们 push 到 GitHub 上,之后别人可以直接在项目中引用这个项目 gogetgithub.com/4byte/{lib}。现在你也可以把它们添加成 go模块,但这和往 GitHub 上发布库一样简单。

Go 拥有强烈的语法偏好

强制代码格式这一点有人喜欢就有人讨厌,但 Go 确实是一门有着强烈语法偏好的语言。个人而言我很喜欢它的风格,因为在代码审查上它移除了很多没用的部分。借 Rob Pike 的原话:

Gofmt 不会是某个人的最爱,但它也是每个人的最爱。

多范式编程

你所看到的很多 Go 代码都是偏向面向对象型的,但它不一定非得是面向对象。实际上,尽管 Go 在一些地方缺少某些语法和功能,但 Go 其实是可以成为一门不错的函数式编程语言的。举个例子,Go 语言可以满足柯里化(Function Currying)或者延续传递 CPS 风格的编程。

虽然你不一定要让整个代码库都呈现函数式编程的风格,但在项目中的某些部分可以用到它。

Go 社区

不管是在 IRC 上的 freenode/go-nuts还是在 gophers.slack.com上你都能找到很多真正关心着这门语言的开发者。并且这些社区对刚刚转向 Go 的新人都很友好。更拉好感的是,Go 社区在多样性和包容性上做出了很大努力,比如 Git 上的 GoBridge 项目和"Women Who Go"项目等。

处处运行

Go 基本上在哪里都能运行,并且只要能提供正确的 GOOS,GOARCH,CGO_ENABLED 或 GOARM 标记等,你可以在任何平台上构建它。这使 Go 也得以在多种架构上运行,比如 amd64,386 和 arm 等。

除开这些,Go 也是第一门拥有内置 WebAssembly 的语言。除了这些已经能支持的平台外,还有类似 TinyGo 这样的项目在推进 Go 更强大的跨平台型和便携性。

Go 被特意设计为一门简单的语言

Go 从诞生之初就以简单性为目标,到目前位置,它的简单性保持得会很成功。Go 的语言规范是你从头到尾看一遍(花不了多少时间)就能完全看懂的东西,这也意味着有些在别的语言中能够找到的特性在 Go 里它就是不存在的,其中一个争议比较大的就是 Go 缺少泛型。

我个人非常支持 Go 语言的这种简单性,它的好处之一就是让开发者可以迅速掌握该语言,而在一个团队中也几乎不会出现这种你的同事使用了你从未见过的程序结构的可能。

【编辑推荐】

  1. 阿里最后一面:请设计一个秒杀系统
  2. Go语言出现后,Java还是好选择吗?
  3. 全解 Google(谷歌)基础设施架构安全设计
  4. 架构设计常用到的10种设计模式,你都知道吗?
  5. 思考 | 一文说透秒杀系统如何设计
【责任编辑:华轩 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

骨干网与数据中心建设案例

骨干网与数据中心建设案例

高级网工必会
共20章 | 捷哥CCIE

372人订阅学习

中间件安全防护攻略

中间件安全防护攻略

4类安全防护
共4章 | hack_man

135人订阅学习

CentOS 8 全新学习术

CentOS 8 全新学习术

CentOS 8 正式发布
共16章 | UbuntuServer

282人订阅学习

读 书 +更多

软件工程:实践者的研究方法

20多年以来,《软件工程:实践者的研究方法》一书是最受学生和行业专业人员欢迎的软件工程指南。它在全面而系统、概括而清晰地介绍软件工程...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO官微

申博代理管理网登入 www.999sun.com 太阳城申博娱乐城登入 申博线路检测 申博直营现金网 申博代理直营网
申博游戏端登入 太阳城现金网登入 www.msc66.com 申博138直营网 菲律宾太阳娱乐网址登入 申博会员登入
申博娱乐开户登入 菲律宾太阳网娱乐 www.7788shenbo.com 申博游戏注册登入 www.3158msc.com 申博官网代理登入