加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

爱上 Go 说话的10个来由

发布时间:2019-11-14 16:01:03 所属栏目:建站 来源:4bytes
导读:【线上直播】11月21日晚8点贝壳技能总监侯圣文《数据安详之数据库安详黄金法例》 这个月 Go 说话就将迎来它的10岁生日了,于是我们专程列出了10条让你可以开心行使 Go 说话的来由。 Map 荟萃/映射默认行使0值 在 Go 中行使映射时,纵然你尚未为特定的键插入
【线上直播】11月21日晚8点贝壳技能总监侯圣文《数据安详之数据库安详黄金法例》

这个月 Go 说话就将迎来它的10岁生日了,于是我们专程列出了10条让你可以开心行使 Go 说话的来由。

爱上 Go 说话的10个来由

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 说话的这种简朴性,它的甜头之一就是闪开拓者可以敏捷把握该说话,而在一个团队中也险些不会呈现这种你的同事行使了你从未见过的措施布局的也许。

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读