第一百一十七期:爱上 Go 语言的10个理由

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

作者:4bytes

这个月 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 语言的这种简单性,它的好处之一就是让开发者可以迅速掌握该语言,而在一个团队中也几乎不会出现这种你的同事使用了你从未见过的程序结构的可能。

阅读目录(置顶)(长期更新计算机领域知识)

阅读目录(置顶)(长期更新计算机领域知识)

阅读目录(置顶)(长期科技领域知识)

歌谣带你看java面试题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/424129.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

第一百一十八期:运行 JavaScript 代码片段的 20 种工具

运行 JavaScript 代码片段的 20 种工具 前端日常开发中,我们使用喜爱的 IDE 调试 JavaScript 代码,比如我喜欢的代码编辑器有两个,Sublime Text 3 和 VS Code,前几年还使用过 Atom,偶尔我们会遇到临时需要快速分享给同…

spring mvc学习(25):Eclipse设置代码自动提示

Eclipse只需几步简单的设置就可以像idea那样代码自动提示了,喜欢的小伙伴可以赶紧动手设置,提升效率。 第一步:打开Eclipse --> Window --> Preferences 第二步:点击Java --> 打开Editor --> 点击Content Assist 第…

spring mvc学习(26):处理数据模型--从表单到controller传输数据

创建maven项目就不说了&#xff0c;需要的找我前面的博客 pom.xml文件 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http…

第一课 回归问题与应用

本系列是七月算法机器学习课程笔记 文章目录1 不同类型的学习2 基本术语与概念3 线性回归模型3.1 什么是线性回归3.2 损失函数3.3 最小化损失函数-梯度下降3.4 学习率有什么影响3.5 过拟合与欠拟合4 逻辑回归4.1 为什么要有逻辑回归4.2 什么是逻辑回归4.3决策边界线性边界判定非…

[推荐] TechNet 广播 SQL Server 2000完结篇

TechNet中文网络广播在之前已经推出了SQL Server 2000的基础系列和管理专家系列&#xff0c;使广大听众认识并掌握了SQL Server 2000的管理技巧。本次系列作为前两次系列课程的完结篇&#xff0c;将会从性能调优及维护的角度为广大听众提供了一道实用而精致的大餐&#xff0c;本…

spring mvc学习(28):get乱码解决

get请求乱码情况 编写一个RegistServlet处理用户的Get请求数据 View Code 运行结果发现输入中文提交后显示结果为乱码&#xff1a; jsp页面中 <meta http-equiv"content-type" content"text/html; charsetUTF-8">通知浏览器以utf-8解码 get请求…

第二课 决策树与随机森林

本系列是七月算法机器学习课程笔记 文章目录1 从LR到决策树1.1 决策树1.2 决策树的终止条件1.3 决策树划分依据1.3.1 信息熵1.3.2 信息增益1.3.3 ID3模型1.3.4 信息增益率1.3.5 基尼指数1.3.6 信息熵与基尼指数1.3.7 连续值属性2 回归树2.1 回归树构建方法3 从决策树到随机森林…

spring mvc学习(27):处理数据模型--从表单到controller传输数据续

创建maven项目就不说了&#xff0c;需要的找我前面的博客 pom.xml文件 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http…

第三课 SVM

本系列是七月算法机器学习课程笔记 文章目录1 问题2 key idea 13 key idea 24 key idea 35 key idea46 拉格朗日乘子求解7 核函数的发现学习SVM不要先看数学公式&#xff0c;这样把SVM的精华都丢掉了。学习SVM学习作者是如何构建出这样一个算法的过程。1 问题 无论线性分类、逻…

spring mvc学习(29):modelandview向页面传输数据

创建maven项目就不说了&#xff0c;需要的找我前面的博客 pom.xml文件 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http…

RESTORE DATABASE命令还原SQLServer 2005 数据库

今天在sqlServer20005 的management studio里使用bak文件还原数据库的时候,总是失败!Restore failed for Server ADANDELI. (Microsoft.SqlServer.Smo)An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfoThe bac…

第一百一十九期:支付宝历年双十一背后的技术揭秘

和过去10年一样&#xff0c;2019年天猫双11又创造了一个全新的纪录。这个数字背后&#xff0c;是数代支付宝工程师们殚精竭虑、不断突破技术难关。 作者&#xff1a;蚂蚁金服科技 自从有了双十一这个电商节日&#xff0c;很多技术人的生命轨迹都改变了&#xff0c;这种年度高…

第五课 机器学习中的特征工程

本系列是七月算法机器学习课程笔记 文章目录1 特征工程与意义2 数据与特征处理2.1数据采集2.2 数据清洗2.3 数据采样2.4 特征处理2.4.1 数值型2.4.2 类别型2.4.3 时间型2.4.3 文本型2.4.4 统计特征3 特征选择3.1 为什么做特征选择3.2 特征选择的方法3.2.1 过滤型3.2.2 包裹型3.…

局域主机做服务器,安装DNN,外网访问的解决办法

局域主机做服务器,安装DNN&#xff0c;外网访问的解决办法 问题&#xff1a; 如图&#xff1a;局域网主机IIS安装了DotNetNuke 4.0.x版本&#xff0c;设置虚拟目录为&#xff1a;dnn &#xff0c;安装好之后&#xff0c;内网用户通过http://192.168.19.9/dnn访问是没问题…

第一百二十期:终于有篇看的懂的B树文章了!

索引&#xff0c;相信大多数人已经相当熟悉了&#xff0c;很多人都知道 MySQL 的索引主要以 B 树为主&#xff0c;但是要问到为什么用 B 树&#xff0c;恐怕很少有人能把前因后果讲述完整。本文就来从头到尾介绍下数据库的索引。 作者&#xff1a;安静的boy 索引&#xff0c;…

csharp:Nhibernate Procedure with CreateSQLQuery and GetNamedQuery

<?xml version"1.0" encoding"utf-8"?> <hibernate-mapping assembly"Domain" namespace"Domain" xmlns"urn:nhibernate-mapping-2.2"><class name"DuCardType" table"DuCardType" la…

第六课 多算法组合与模型调优

本系列是七月算法机器学习课程笔记 文章目录1 前序工作流程1.1 数据处理1.2 特征工程1.3 模型选择1.4 交叉验证1.5 寻找最佳超参数2 模型优化2.1 模型状态2.2 模型优化12.3 模型优化22.4 模型优化32.5 模型优化4&#xff1a;模型融合2.5.1 bagging2.5.2 staking2.5.3 adaboost2…

第一百二十一期:当新闻报道用上AR 技术,能为读者带来什么?

「有一种名为记忆宫殿的记忆术&#xff0c;要点就是在人脑内建立起虚拟的空间场景&#xff0c;并把各种信息与空间产生联系。如果我们也能为每一起新闻建立起空间的概念&#xff0c;显然也会给读者带来更深刻的印象。」 作者&#xff1a;木斯 大部分新闻都拥有不同的切入视角…

第七章 scikit-learn与机器学习实战

文章目录1 scikit-learn2 一个项目实战2.1 项目目标2.2 划定问题2.3 选择性能指标2.4 核实假设2.5 获取数据2.6 数据探索和可视化、发现规律2.7 为机器学习算法准备数据2.8 选择并且训练模型2.9 模型微调2.10 测试集上测试1 scikit-learn 导航页与算法指南 API&#xff1a;数据…

Erlang注册进程名称-tut16.erl

作 w3cschool erlang 的练习 --------- 1 -module(tut16).2 3 -export([start/0, ping/1, pong/0]).4 5 %% Erlang 注册进程名称6 7 %% ping 进程必须通过某种途径 获得 pong 进程的进程标识符后 8 %% 才能将消息发送给 pong 进程9 10 %% Erlang 提供了 为每个进程提供一个名称…