瑞客论坛

 找回密码
 立即注册
查看: 3800|回复: 14

go语言合集(入门到实战,Google资深工程师深度讲解,go语言与区块链开发)

[复制链接]

金币2907  第571名

28

主题

432

回帖

4272

积分

论坛元老

Rank: 8Rank: 8

威望
688
贡献
677
热心值
0
金币
2907
注册时间
2019-10-12
发表于 2021-10-12 10:35 | 显示全部楼层 |阅读模式


go语言与区块链开发,链接:
游客,本付费内容需要支付 15金币 才能浏览, 赞助VIP全站免费下载支付

Google资深工程师深度讲解Go语言,链接:
游客,本付费内容需要支付 15金币 才能浏览, 赞助VIP全站免费下载支付

JKSJ-GO语言从入门到实战【完结】,链接:
游客,本付费内容需要支付 15金币 才能浏览, 赞助VIP全站免费下载支付



Go的优势

原因 1:性能

图0:Go语言的9大优势和3大缺点
Go 极其地快。其性能与 Java 或 C++相似。在我们的使用中,Go 一般比 Python 要快 30 倍。以下是 Go 与 Java 之间的基准比较:

图1:Go语言的9大优势和3大缺点
图2:Go语言的9大优势和3大缺点
图3:Go语言的9大优势和3大缺点
图3:Go语言的9大优势和3大缺点
原因 2:语言性能很重要

对很多应用来说,编程语言只是简单充当了其与数据集之间的胶水。语言本身的性能常常无关轻重。

但是 Stream 是一个 API 提供商,服务于世界 500 强以及超过 2 亿的终端用户。数年来我们已经优化了 Cassandra、PostgreSQL、Redis 等等,然而最终抵达了所使用语言的极限。

Python 非常棒,但是其在序列化/去序列化、排序和聚合中表现欠佳。我们经常会遇到这样的问题:Cassandra 用时 1ms 检索了数据,Python 却需要 10ms 将其转化成对象。

原因 3:开发者效率&不要过于创新

看一下绝佳的入门教程《开始学习 Go 语言》(http://howistart.org/posts/go/1/)中的一小段代码:

package main
type openWeatherMap struct{}func (w openWeatherMap) temperature(city string) (float64, error) {
   resp, err := http.Get("http://api.openweathermap.org/data/2.5/weather?APPID=YOUR_API_KEY&q=" + city)
   if err != nil {
       return 0, err
   }
   defer resp.Body.Close()
   var d struct {
       Main struct {
           Kelvin float64 `json:"temp"`
       } `json:"main"`
   }
   if err := json.NewDecoder(resp.Body).Decode(&d); err != nil {
       return 0, err
   }
   log.Printf("openWeatherMap: %s: %.2f", city, d.Main.Kelvin)
   return d.Main.Kelvin, nil}
如果你是一个新手,看到这段代码你并不会感到吃惊。它展示了多种赋值、数据结构、指针、格式化以及内置的 HTTP 库。

当我第一次编程时,我很喜欢使用 Python 的高阶功能。Python 允许你创造性地使用正在编写的代码,比如,你可以:

在代码初始化时,使用 MetaClasses 自行注册类别
置换真假
添加函数到内置函数列表中
通过奇妙的方法重载运算符
毋庸置疑这些代码很有趣,但也使得在读取其他人的工作时,代码变得难以理解。

Go 强迫你坚持打牢基础,这也就为读取任意代码带来了便利,并能很快搞明白当下发生的事情。

注意:当然如何容易还是要取决于你的使用案例。如果你要创建一个基本的 CRUD API,我还是建议你使用 Django + DRF,或者 Rails。

原因 4:并发性&通道

Go 作为一门语言致力于使事情简单化。它并未引入很多新概念,而是聚焦于打造一门简单的语言,它使用起来异常快速并且简单。其唯一的创新之处是 goroutines 和通道。Goroutines 是 Go 面向线程的轻量级方法,而通道是 goroutines 之间通信的优先方式。

创建 Goroutines 的成本很低,只需几千个字节的额外内存,正由于此,才使得同时运行数百个甚至数千个 goroutines 成为可能。你可以借助通道实现 goroutines 之间的通信。Go 运行时间可以表示所有的复杂性。Goroutines 以及基于通道的并发性方法使其非常容易使用所有可用的 CPU 内核,并处理并发的 IO——所有不带有复杂的开发。相较于 Python/Java,在一个 goroutine 上运行一个函数需要最小的样板代码。你只需使用关键词「go」添加函数调用:

package main
import (
   "fmt"
   "time")func say(s string) {
   for i := 0; i < 5; i++ {
       time.Sleep(100 * time.Millisecond)
       fmt.Println(s)
   }}func main() {
   go say("world")
   say("hello")}
Go 的并发性方法非常容易上手,相较于 Node 也很有趣;在 Node 中,开发者必须密切关注异步代码的处理。

并发性的另一个优质特性是竞赛检测器,这使其很容易弄清楚异步代码中是否存在竞态条件。下面是一些上手 Go 和通道的很好的资源:

https://gobyexample.com/channels
https://tour.golang.org/concurrency/2
http://guzalexander.com/2013/12/06/golang-channels-tutorial.html
https://www.golang-book.com/books/intro/10
https://www.goinggo.net/2014/02/the-nature-of-channels-in-go.html
原因 5:快速的编译时间

当前我们使用 Go 编写的最大微服务的编译时间只需 6 秒。相较于 Java 和 C++呆滞的编译速度,Go 的快速编译时间是一个主要的效率优势。我热爱击剑,但是当我依然记得代码应该做什么之时,事情已经完成就更好了。

图4:Go语言的9大优势和3大缺点
Go 之前的代码编译

原因 6:打造团队的能力

首先,最明显的一点是:Go 的开发者远没有 C++和 Java 等旧语言多。据知,有 38% 的开发者了解 Java,19.3% 的开发者了解 C++,只有 4.6% 的开发者知道 Go。GitHub 数据表明了相似的趋势:相较于 Erlang、Scala 和 Elixir,Go 更为流行,但是相较于 Java 和 C++ 就不是了。

幸运的是 Go 非常简单,且易于学习。它只提供了基本功能而没有多余。Go 引入的新概念是「defer」声明,以及内置的带有 goroutines 和通道的并发性管理。正是由于 Go 的简单性,任何的 Python、Elixir、C++、Scala 或者 Java 开发者皆可在一月内组建成一个高效的 Go 团队。

原因 7:强大的生态系统

对我们这么大小的团队(大约 20 人)而言,生态系统很重要。如果你需要重做每块功能,那就无法为客户创造收益了。Go 有着强大的工具支持,面向 Redis、RabbitMQ、PostgreSQL、Template parsing、Task scheduling、Expression parsing 和 RocksDB 的稳定的库。

Go 的生态系统相比于 Rust、Elixir 这样的语言有很大的优势。当然,它又略逊于 Java、Python 或 Node 这样的语言,但它很稳定,而且你会发现在很多基础需求上,已经有高质量的文件包可用了。

原因 8:GOFMT,强制代码格式

Gofmt 是一种强大的命令行功能,内建在 Go 的编译器中来规定代码的格式。从功能上看,它类似于 Python 的 autopep8。格式一致很重要,但实际的格式标准并不总是非常重要。Gofmt 用一种官方的形式规格代码,避免了不必要的讨论。

原因 9:gRPC 和 Protocol Buffers

Go 语言对 protocol buffers 和 gRPC 有一流的支持。这两个工具能一起友好地工作以构建需要通过 RPC 进行通信的微服务器(microservices)。我们只需要写一个清单(manifest)就能定义 RPC 调用发生的情况和参数,然后从该清单将自动生成服务器和客户端代码。这样产生代码不仅快速,同时网络占用也非常少。

从相同的清单,我们可以从不同的语言生成客户端代码,例如 C++、Java、Python 和 Ruby。因此内部通信的 RESET 端点不会产生分歧,我们每次也就需要编写几乎相同的客户端和服务器代码。

使用 Go 语言的缺点

缺点 1:缺少框架

Go 语言没有一个主要的框架,如 Ruby 的 Rails 框架、Python 的 Django 框架或 PHP 的 Laravel。这是 Go 语言社区激烈讨论的问题,因为许多人认为我们不应该从使用框架开始。在很多案例情况中确实如此,但如果只是希望构建一个简单的 CRUD API,那么使用 Django/DJRF、Rails Laravel 或 Phoenix 将简单地多。

缺点 2:错误处理

程序员专用礼品杯,生日礼物Go 语言通过函数和预期的调用代码简单地返回错误(或返回调用堆栈)而帮助开发者处理编译报错。虽然这种方法是有效的,但很容易丢失错误发生的范围,因此我们也很难向用户提供有意义的错误信息。错误包(errors package)可以允许我们添加返回错误的上下文和堆栈追踪而解决该问题。

另一个问题是我们可能会忘记处理报错。诸如 errcheck 和 megacheck 等静态分析工具可以避免出现这些失误。虽然这些解决方案十分有效,但可能并不是那么正确的方法。

缺点 3:软件包管理

Go 语言的软件包管理绝对不是完美的。默认情况下,它没有办法制定特定版本的依赖库,也无法创建可复写的 builds。相比之下 Python、Node 和 Ruby 都有更好的软件包管理系统。然而通过正确的工具,Go 语言的软件包管理也可以表现得不错。

我们可以使用 Dep 来管理依赖项,它也能指定特定的软件包版本。除此之外,我们还可以使用一个名为 VirtualGo 的开源工具,它能轻松地管理 Go 语言编写的多个项目。
回复

使用道具 举报

金币6809  第163名

53

主题

5236

回帖

1万

积分

论坛元老

Rank: 8Rank: 8

威望
6740
贡献
5762
热心值
5
金币
6809
注册时间
2019-5-28

最佳新人活跃会员灌水之王一年荣誉奖章在线达人

发表于 2021-10-12 13:12 | 显示全部楼层
强烈支持楼主ing……
回复

使用道具 举报

金币409  第3562名

0

主题

649

回帖

7036

积分

论坛元老

Rank: 8Rank: 8

威望
3014
贡献
3613
热心值
0
金币
409
注册时间
2021-6-25
发表于 2021-10-12 15:31 | 显示全部楼层
强烈支持楼主ing……
回复

使用道具 举报

金币779  第2088名

8

主题

366

回帖

3474

积分

论坛元老

Rank: 8Rank: 8

威望
1353
贡献
1342
热心值
0
金币
779
注册时间
2021-9-25
发表于 2021-10-12 16:32 | 显示全部楼层
强烈支持楼主ing……
回复

使用道具 举报

金币180  第5963名

24

主题

9544

回帖

1万

积分

论坛元老

Rank: 8Rank: 8

威望
6406
贡献
6207
热心值
7
金币
180
注册时间
2019-7-22
发表于 2021-10-12 18:01 | 显示全部楼层
感谢楼主分享谢谢了看看这个
回复

使用道具 举报

金币1281  第1328名

9

主题

2228

回帖

1万

积分

永久会员

Rank: 8Rank: 8

威望
6747
贡献
5475
热心值
0
金币
1281
注册时间
2020-11-2
发表于 2021-10-12 18:44 | 显示全部楼层
楼主加油,我们都看好你哦。
回复

使用道具 举报

金币4532  第313名

3

主题

2846

回帖

1万

积分

论坛元老

Rank: 8Rank: 8

威望
8441
贡献
5511
热心值
0
金币
4532
注册时间
2021-8-24

活跃会员一年荣誉奖章灌水之王在线达人三年荣誉奖章

发表于 2021-10-13 09:22 | 显示全部楼层
不错不错,谢谢楼主分享!
回复

使用道具 举报

金币2907  第571名

28

主题

432

回帖

4272

积分

论坛元老

Rank: 8Rank: 8

威望
688
贡献
677
热心值
0
金币
2907
注册时间
2019-10-12
 楼主| 发表于 2021-10-15 17:07 | 显示全部楼层
lf1988103 发表于 2021-10-12 13:12
强烈支持楼主ing……

能帮到最好
回复

使用道具 举报

金币2907  第571名

28

主题

432

回帖

4272

积分

论坛元老

Rank: 8Rank: 8

威望
688
贡献
677
热心值
0
金币
2907
注册时间
2019-10-12
 楼主| 发表于 2021-10-18 10:59 | 显示全部楼层
lf1988103 发表于 2021-10-12 13:12
强烈支持楼主ing……

能帮到你最好
回复

使用道具 举报

金币2907  第571名

28

主题

432

回帖

4272

积分

论坛元老

Rank: 8Rank: 8

威望
688
贡献
677
热心值
0
金币
2907
注册时间
2019-10-12
 楼主| 发表于 2021-10-20 13:43 | 显示全部楼层
slxmjrk 发表于 2021-10-13 09:22
不错不错,谢谢楼主分享!

能帮到最好
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|瑞客论坛 |网站地图

GMT+8, 2024-11-26 13:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表