Golang学习笔记汇总

本系列文章作者twowinter,转载请注明作者:http://blog.csdn.net/iotisan/

关于学习路线

对于 go 的入门学习,我比较推荐两本书:《Go程序设计语言》by Alan.A.A.Donowan、《go语言编程》by 许世伟 吕桂华。《Go程序设计语言》是谷歌工程师出品,详细描述了 Go 语言设计的一些思路;《go语言编程》是国内第一本Go语言书籍,书中参考了《Go程序设计语言》的章节排布,同时增加了一些更通俗的讲解。

这两本书章节排布让我对go语言有了清晰的体会,因此我把它也呈现到我的系列笔记中,同时增加了一些扩展,形成了一个较为完整的知识体系:

第二部分到第五部分,是go语言核心部分,介绍了顺序编程,面向对象编程,并发编程三大块内容。
第六部分到第八部分,是对 go 标准库及社区公共库 的应用,借助这些弹药,帮助我们快速开发包括网络在内的各类应用。

第一部分 开发环境

1.1 Go开发环境搭建

一个编译器安装包、一个环境变量设置,便完成了开发环境的安装。早期学习只针对 window,建议大家直接上官网。

1.2 将 VS CODE 打造成 go 开发利器

2019 年了,现在 VS CODE 已经成为 golang 最好用的编辑器。通过插件实现诸如代码关联跳转等特性。

  • GO 命令 XXX

第二部分 程序结构

2.1 第1个程序 helloworld

万事开头难,在 C:\Go\test 目录下,有一堆官方提供的示例。找到大部分教程都推荐的第1个程序,helloworld.go。运行试试效果。

2.2 这儿有包了解一下

包是Go语言中结构化代码的方式,每个程序都由包组成,可以使用自身的包或者从其它包中导入内容。同其它编程语言中的类库或命名空间的概念。这篇笔记学习了包的基础知识,包名、包的导入、包的可见性规则,通过一个实例来加深了知识点印象。

第三部分 顺序编程 - 类 C 语言

3.3.3 单引号、双引号和反引号

反引号在某些需要展示字符串字面量的场合还是很有用,比如我们要展示一个多行的函数。

第四部分 面向对象编程

OOP 的编程思想,主导位置,几乎所有广泛应用的语言都支持这种思想。

4.1 方法

4.2 接口

接口是Go语言整个类型系统的基石。它是使用方法的抽象,使当前程序可以更聚焦在方法的应用,不关心该方法的具体实现。就像是先设置了一个岗位,描述了岗位的职责,一些规章可以先根据岗位职责来制定;当应用程序开始执行的时候,需要给接口传入一个实例,相当于企业开始运营时再把一个人放到这个岗位。

第五部分 并发编程 - 互联网时代的C语言

各类基础架构软件渐渐使用 go 语言,go 越来越多被用在了 server 端。

5.1 协程 goroutine

goroutine 应该是 Go 语言最显著的特点,从它占用 go 关键字就可以看出来。只要在函数前加go关键字就可以优雅地实现并发,非常符合人类串行思维。

5.2 channel

Go语言 channel 优雅地实现了协程间的消息通信,一旦满了就阻塞写入,一旦空了就阻塞读取。

5.3 上下文 context

GO 内置的 Context 包可以在不同的 Goroutine 之间同步请求数据,还能优雅地通过 WithTimeout 设置超时及 WithCancel 设置取消信号来结束上下文。

第六部分 网络编程

从这一部分开始,我们脱离GO语言核心,开始学习 GO 的标准库和社区库,各种轮子。

我们把最重度使用的网络编程单独一章来写。除了语言核心支持并发外,go 提供了很多轮子使得网络编程变得格外轻松。

6.1 HTTP 编程
6.1.1 HTTP 客户端

Go语言标准库提供的 HTTP 客户端相当优雅,一方面可以极其简单的使用 Get、Post 方法,另一方面又具备极大的灵活性(可以详细设置业务层和传输层的细节)。

6.2 JSON 处理

encoding/json 标准库除了使用 Marshal()、Unmarshal() 进行 json 编解码之外,还支持使用 Decoder 和 Encoder 进行流式读写。

6.3 RPC 编程之 gRPC

本篇笔记演示了如何使用 gRPC 框架,包括 proto 文件定义服务,使用 pb 编译器产生代码,最后使用 gRPC API 编写 client 和 server 代码。

6.3.1 gRPC 使用 metadata 自定义认证

gRPC 可用 metadata 自定义认证信息。客户端使用 WithPerRPCCredentials 方法,服务端使用 metadata.FromIncomingContext 方法从 RPC 消息的上下文中获取 metadata。

6.3.2 gRPC 认证

6.4 JSON Web Tokens (JWT)

本篇笔记介绍 JWT 库的 DEMO 应用,还实现了一个比较常用的 gRPC JWT 认证的示例。具体使用方法:在 jwt 生成时使用 jwt.NewWithClaims 方法,需传入 header claim实例 和 密钥;在 jwt 解析时使用 jwt.ParseWithClaims 方法,需传入 claim 结构体 和 密钥,可返回解析是否正确,及 token 是否有效。

6.4 Socket 编程

第七部分 常用库 - 充足的弹药库

不管是标准库,还是社区开源库,都是很好的轮子。以往在C语言领域,一般都是各家自己储备自己的弹药库,而 go 则希望借助社区的力量,让每个人都拥有这样的弹药库。

除了上面网络编程的轮子,还有其他常见的轮子值得学习。

格式化IO

在格式化 IO 时,%v,打印变量的具体数值,这是万能打印,会根据变量的类型做调整。%T,打印变量的类型。

日志库 logrus

Logrus 最大的特色是结构化日志记录,可以携带field;另外结合 hook 可以实现非常灵活的日志分发和内容调整。

[文件操作]

https://www.cnblogs.com/flash55/p/11110008.html

系统信号 os signal

时间处理 time

命令行处理 cobra

配置管理 viper

DB连接库 mysql

DB连接库 redigo

工具 uuid

uuid 包支持 5 种 uuid 的生成及解析,最广泛使用的就是生成一个V4版本的 uuid:u1 = uuid.Must(uuid.NewV4())

第八部分 常用工具及框架

测试框架 goconvey

go trace

第九部分 性能调优

第十部分 源码分析

END


  • 6
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GoLang学习笔记主要包括以下几个方面: 1. 语法规则:Go语言要求按照语法规则编写代码,例如变量声明、函数定义、控制结构等。如果程序中违反了语法规则,编译器会报错。 2. 注释:Go语言中的注释有两种形式,分别是行注释和块注释。行注释使用`//`开头,块注释使用`/*`开头,`*/`结尾。注释可以提高代码的可读性。 3. 规范代码的使用:包括正确的缩进和空白、注释风格、运算符两边加空格等。同时,Go语言的代码风格推荐使用行注释进行注释整个方法和语句。 4. 常用数据结构:如数组、切片、字符串、映射(map)等。可以使用for range遍历这些数据结构。 5. 循环结构:Go语言支持常见的循环结构,如for循环、while循环等。 6. 函数:Go语言中的函数使用`func`关键字定义,可以有参数和返回值。函数可以提高代码的重用性。 7. 指针:Go语言中的指针是一种特殊的变量,它存储的是另一个变量的内存地址。指针可以实现动态内存分配和引用类型。 8. 并发编程:Go语言提供了goroutine和channel两个并发编程的基本单位,可以方便地实现多线程和高并发程序。 9. 标准库:Go语言提供了丰富的标准库,涵盖了网络编程、文件操作、加密解密等多个领域,可以帮助开发者快速实现各种功能。 10. 错误处理:Go语言中的错误处理使用`defer`和`panic`两个关键字实现,可以有效地处理程序运行过程中出现的错误。 通过以上内容的学习,可以掌握Go语言的基本语法和编程思想,为进一步学习和应用Go语言打下坚实的基础。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Golang学习笔记](https://blog.csdn.net/weixin_52310067/article/details/129467041)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [golang学习笔记](https://blog.csdn.net/qq_44336275/article/details/111143767)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值