本文介绍: 关于 go 的起源,特点以及学习建议

背景

一直有在零散的时间go写点代码,正好借着最近比较时间写东西的契机,给这个看着年轻,实际也已经发展10几年,并在当下众多开发领域都有不可忽视作用语言做个介绍

golang 的起点

golang 的诞生可以说是时代造就了它,它也成就了研发工具、云原生高性能服务开发百花齐放的时代

本节主要参考文章:

Go at Google: Language Design in the Service of Software Engineering
翻译-Google 里的 Go 语言:服务于软件工程的语言设计

煎鱼-为什么要开发 Go 这门新语言?

开发痛点

ced by multicore processors, networked systems, massive computation clusters, and the web programming model

译者注: 结合原文之后的内容来看,最主要的两类问题就是 大规模的 C++ 项目编译时间长,以及多种语言维护成本高的问题

发明者

Robert Griesemer: 参与过谷歌 V8 引擎开发Sawzall 语言谷歌内部用的日志分级打印库,之后被 go日志库替代)、JVM 和 strongtalk 系统用于类型检查,现在不维护了

Rob Pike:Unix 开发者之一,为 Unix 编写终端,后续编写sam、acme 文本编辑器,再之后和 Ken Thompson 一起创造了 UTF-8

Ken Thompson: Unix 开发者之一,B语言(C语言的前身)的发明者,后面 Dennis Ritchie 基于 B 语言开发了 C语言。1983 年 Ken 和 Dennis 一同获得了图灵奖

扩展: Russ Cox,你可以golang 的很多 issue看到他的身影,他也是go代码提交次数最多的

在这里插入图片描述

推荐阅读: 图灵奖历届得主、golang talk

吉祥物

名字: Gopher(囊地鼠)

由 Rob Pike 的妻子 Renee French 创作官网甚至还有细节描述

在这里插入图片描述

在这里插入图片描述

go 是什么样的语言

为了解决前面说的问题,go 必须有下面的特点:

时间版本

golang 版本来源: 从 1.10 到最新

在这里插入图片描述

go 语言特点

go 语言特点

本节中,笔者将结合自己平时开发过程使用到的 go 比较核心特性进行基本介绍,这些也是 go 和其他编程语言最不同的地方,包括 基本语法、基本指令函数关键字、基本类型打包方式

语法

执行

debug

函数

错误处理

基本类型关键字

原生库和方法

反射

并发

运行时(Runtime)

管理

工具

以上就是自己常接触的原生库了,可以从 go源码的src目录 更多的实现细节

自己写的和go有关的博客

golang 编程规范查漏补缺

golang-使用 go test 输出单元测试覆盖率

golang-单元测试和mock框架的介绍和推荐

golang-使用 godoc 工具编写代码注释

golang-文章翻译-go高效编程

golang-文章翻译-go常见的10种错误

vscode 使用技巧(vscode+go插件的开发环境)

go 学习方法总结

官网

Go 的官网其实是最好的学习资料教程博客社区动态都有,绝对适合作入门资料的第一位

下面说明官网中右上角各个栏目内容

在这里插入图片描述

为什么使用 Go(Why Go)

大体就是 Go 在一些通用领域使用场景,以及在大厂使用情况

Case Studies: 大厂使用场景,如 Google、CloudFare、Meta、Netflix

Use Cases: 在云服务网络通信命令行工具网页/客户端应用运维和可持续开发(DevOps、SRE)领域应用
一个领域下都有比较流行的开源项目的推荐

Security: 如何提升自己工程安全性,如通过 govulncheck 检查项目存在哪些已知漏洞

Learn

非常适合上手的 go tour,几乎覆盖了 go,可以说练习完所有示例就会写 go 代码了

Docs

所有官方文章: 可以挑讲原理文章看,如 Using and understanding Go 中的 A Guide to the Go Garbage Collector 以及 References 中的 The Go Memory Model

Effective Go: 上手之后,进一步了解 go 编程风格的必读文章

std: 标准库文档

faq: 囊括了从其他语言迁到 go 语言的常见问题,也体现了 go 的设计思想

社区

blog: go 博客社区新动态

开源项目和代码推荐

go

go 本身的源码就很好阅读,也和 go 本身语法比较简洁有关。如果你想了解 go 的基础库的原理,大可不用搜一堆博客,一点点地消化别人的总结,读go源码就是最好的学习go原理的方法
包括: sync, runtime, context, reflect,这些都是 go 的核心

web 应用

开发后台必须要掌握的就是 web 框架,当然不同公司对它的定制化也会不同,如果想从简单的入手,使用官方推荐的 gin 就行。想参考大厂实际用的,可参考国内开发者开源的 web 框架功能比较全),如字节hertz、go-zero、goframe

中间件

gorm: 数据库 orm
redis: redigo
kafka: sarama

云原生和监控

如 Kubernetes、Istio、Prometheus、Grafana 等,也能接触到当下比较流行的项目

命令行工具

以往我们需要用工具进行文档格式转换爬虫文件批量下载场景可能会主要以 python 项目作参考,因为它语法简单,执行方便,你需要的只是一个 python 环境

现在,拥有类似特性的 go 让我们多了一个选项,同样的需求,也可以看 go 社区有没有现成的方案。甚至 go 只需要编译好的可执行文件,更加方便

具体用哪个工具因需求而异,可以参考别人的整理这里列几个可能比较常用的:

hugo: 博客网站生成,类似 hexo

buffalo: 快速生成 web 项目

vhs: 终端录制

pget: 并发下载

fsnotify: 系统文件监听

lux: 网站视频下载工具(不能下载需要登录才能下的超高画质)

migrate: 跨不同类型数据库迁移

博客推荐

golang国内大厂实践还是比较多的,因此国内开发者写的博客也不会缺少。本着技术学习方法来说,这里推荐两个博主 分别对应前沿动态,和深度剖析原理

煎鱼: go 语言开发者,对 go 社区动态、新版本特性跟踪比较及时,类似的博主还有 polarisxu

go语言设计与实现: go 原理设计思想,这个博客技术的思考方式值得应用到所有技术学习上: 从为什么这么设计问题基础上,去理解技术实现细节

原文地址:https://blog.csdn.net/xiaoliizi/article/details/134160923

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_27950.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注