这个调查显示 Go 竟然是 2020 年最受欢迎的编程语言

大家好,我是站长 polarisxu。 今天看到一个 2020 年开发者调查报告,看到了 Go 的前景,忍不住想跟大家分享一下。 01 这份调查报告来自 HackerEarth 。简单介绍下它。 HackerEarth 的口号是:远程雇用最优秀的技术人才。拥有 400 万+ 开发人员(注册用户),上千家企业信赖,他们帮助公司准确评估,面试和雇用顶尖技术人才。 他们提供编程练习、黑客挑战,号称能够进行准确的编码评估并远程聘用最好的技术人才。根据

AI 和 数据科学领域,Go 语言可能很快会取代 Python。最后的原因有点迷

30 年前,Python 首次出现。但是花了 20 年时间才能获得开发人员的赏识。快进到 2019 年,它成为开发人员中第二受欢迎的语言。(来自 Stackoverflow 开发人员 2019 调查结果 ) 过去,尤其是在过去的 5 年中,它的增长是巨大的。Python 成为机器学习和数据科学开发人员的首选语言。 在接下来的几年中,Python 在这些领域的主导地位无疑会持续。但是与更新的语言相比,它具有一些严重的缺点。对于 21 实际

闲聊昨晚极客时间的直播

昨天晚上(10 月 25 日)极客时间进行了一场直播,主题是:《未来 5 年将是 Go 语言的天下》。 客观说,这个主题还是挺唬人的,而直播的内容跟这个主题关系不大。有三个嘉宾,只有左耳朵耗子谈了 Go 的未来,他的判断,Go 会成为主流,只会 PHP 肯定行不通。 在提问环节,有人问到耗子哥关于 Python 的看法,他直言:Python 会成为新手语言。不管你认不认同,耗子哥的一些观点还是有一定道理的。 耗子

Go error 打印灾难 — CockroachDB errors 库(第3篇)

这篇文章是关于 “CockroachDB errors 库” 的系列文章的第 3 篇,“CockroachDB errors 库”实际上是 Go 的标准 errors 包的通用、开放源码的替代品。 Go 1.13 的标准库采用了 Dave Cheney 自 2015 年以来对错误处理的主要贡献:将 Go 错误对象构造为链表的想法。 唉,这种方式给 Go 开发人员造成了巨大的障碍:使打印错误对象变得困难、几乎不可能。 这就是我所说的 “Go error 打印灾难",下面我们将准确

Go 格式化 API — CockroachDB errors 库(第2篇)

这篇文章是关于 “CockroachDB errors 库” 的系列文章的第 2 篇,“CockroachDB errors 库”实际上是 Go 的标准 errors 包的通用、开放源码的替代品。 以下面的代码为例: import "fmt" type T struct { x int } func main() { v := T{123} fmt.Println(v) } 这个程序打印 {123},尽管我们没有教 Go 如何打印我们的 T 类型。它是如何做到这一点的? printer 的等效性 fmt 包中的逻辑在所有 printer 之间共享,因此以下调用都保证等效: fmt.Print(x) fmt.Printf("%v", x) os.Stdout.Write([]byte(fmt.Sprint(x))) os.Stdout.Write([]byte(fmt.Sprintf("%v", x))) 换句话说

Go 标准错误 API — CockroachDB errors 库(第1篇)

这篇文章是关于 “CockroachDB errors 库” 的系列文章的第 1 篇,“CockroachDB errors 库”实际上是 Go 的标准 errors 包的通用、开放源码的替代品。 那本篇文章主要谈论什么呢? 基本的 Go 错误:error 是值 Go 生态有一些非常流行、也非常基本的学习资源(文档): A Tour of Go: Errors 。这是 Go 的官方教程。 Go By Example: errors 。Go By Example 是一些系列文章,推荐给那些希望通过示例学习 Go 的朋友们。 Goland Docs: Errors and Exception handling

一道关于 json 和 slice 的题难倒了 80% 的人

昨天在 Go语言爱好者周刊:第 65 期 刊首语发了一道题,以下代码输出什么? package main import ( "encoding/json" "fmt" ) type AutoGenerated struct { Age int `json:"age"` Name string `json:"name"` Child []int `json:"child"` } func main() { jsonStr1 := `{"age": 14,"name": "potter", "child":[1,2,3]}` a := AutoGenerated{} json.Unmarshal([]byte(jsonStr1), &a) aa := a.Child fmt.Println(aa) jsonStr2 := `{"age": 12,"name": "potter", "child":[3,4,5,7,8,9]}` json.Unmarshal([]byte(jsonStr2), &a) fmt.Println(aa) } 结果 80% 的人都答错了。 结果为什么是 [1 2 3] [3 4 5] 呢? 这道题涉及到两个知识点: json 解析; slice; 1、json 解析 关于 json.Unmarshal 的文档,不少人可能没认真看。借此机会正好一起看下。https://docs.st

你喜欢的 Go 第三方库:一步为系统集成可视化实时运行时统计

大家好,我是站长 polarisxu。 掌握系统运行状态,知道系统哪些地方可能存在问题,方便进行优化,这是一个实际系统必备的。裸奔,对系统一无所知,迟早是要出大事的。 在 Go 语言中,官方标准库提供了方法,让我们能够获得内存分配、GC 和 Goroutine 等情况。比如内存、GC 等情况,可以通过 runtime.MemStats 获取:https://docs.studygolang.com/pkg/runtime/#M

Go Playground 还能这么玩?

大家好,我是 polarisxu。 之前我为大家推荐过 Playground,对比了三款 Go Playground 。今天发现了另外一款 Playground,它最核心的特点是,可以多人协同编辑。 协同编辑,目前是很流行的一种多人协作模式。GitHub 的编辑器 Atom 就有这方面的支持。 简介 先简单看看这款 Playground:gpgsync。这是 syumai 开发的一款多人协同编辑的 Go Playground,他是

终于找到了一款我喜欢的安装和管理 Go 版本的工具

一直以来,我都习惯通过源码安装 Go。我是这么做的: 1)Git clone Go 源码 $ git clone https://github.com/golang/go 2)需要安装什么版本就切换到对应的分支,比如安装 1.15.x $ git checkout -b release-branch.go1.15 origin/release-branch.go1.15 如果本地之前已经存在该分支,直接 git checkout release-branch.go1.15 即可。 3)将 go 整个目录复制到 /usr/local/go1.15,编译安装 4)创建软链: ln -s go1.15 go 之后加上环境变量等。 如果想要切换版本,只需要做类似上面的步骤,最后将 go 这个软链指向要切换的