Golang

Go语言学习资料

《Go程序设计语言》—机械工业出版社

https://golang.org

Go文档

Go语言高性能编程手册(万字长文)https://mp.weixin.qq.com/s/wUrRQYz9rueAC8A4ugBYaQ

Go语言精进之路
https://golang.coding3min.com/

《Go程序语言设计》章节内容概述】
第1章是关于Go的基础结构的综述,通过十几个完成日常任务(包括读写文件、格式化文本、创建图像,以及在Internet客户端和服务器之间通信)的程序来介绍这门语言。

第2章讲述Go程序的组成元素——声明、变量、新类型、包和文件,以及作用域。

第3章讨论数值、布尔量、字符串、常量,还解释如何处理Unicode。

第4章描述复合类型,即使用简单类型构造的类型,形式有数组、map、结构体,还有slice(Go中动态列表的实现)。

第5章概述函数,并讨论错误处理、宕机(panic)和恢复(recover),以及defer语句。

余下的章节重点讨论Go语言中与惯常做法有一定区别的内容,包括方法、接口、并发、包、测试和反射。

第6章讲述方法,第7章讲述接口。

第8章介绍Go的并发性处理途径,它基于CSP思想,采用goroutine和通道实现。

第9章则讨论并发性中基于共享变量的一些传统话题。

第10章讨论包,也就是组织库的机制。该章也说明如何高效地利用go工具,仅仅这个工具,就提供了编译、测试、性能基准测试、程序格式化、文档,以及完成许多其他任务的功能。

第11章讨论测试,在这里Go采取了显著的轻量级途径,避免了重重抽象的框架,转而使用简单的库和工具。测试库提供了一个基础,在其之上根据需要可以构建更复杂的抽象。

第12章讨论反射,即程序在执行期间考察自身表示方式的能力。反射是一种强大的工具,不过要慎重使用它,该章通过演示如何用它来实现某些重要的Go库,解释了如何统筹兼顾。第13章解释低级程序设计的细节(它运用unsafe包来绕过Go的类型系统),以及什么时候适合这样做。

Go,基础知识

Go 是编译型的语言

它没有隐式数值类型强制转换,没有构造或析构函数,没有运算符重载,没有形参默认值,没有继承,没有泛型,没有异常,没有宏,没有函数注解,没有线程局部存储。这门语言成熟而且稳定,并且保证兼容更早版本:在旧版本的 Go 中写的程序,可以在新版本的编译器和标准库下编译与运行

Go以一种不同寻常的方式来诠释面向对象程序设计。它没有类继承,甚至没有类。较复杂的对象行为是通过较简单的对象组合(而非继承)完成的。方法可以关联到任何用户定义的类型,而不一定是结构体。具体类型和抽象类型(即接口)之间的关系是隐式的,所以一个具体类型可能会实现该类型设计者没有意识到其存在的接口

Go 程序的组成元素一一声明、变量、新类型、包和文件,以及作用域

数值 布尔量 字符串 常量,还解释如何处理 nicode

复合类型,即使用简单类型构造的类型,形式有数组、 map、 结构体,还有 slice (Go 中动态列表的实现

函数,并讨论错误处理、宕机( panic )和恢复( ecove ,以及 defef语句

Go 中与惯常做法有一 定区别的内容,包括方法、接口、并发、包、测试和反射

Go 种不同寻常的方式来诠释面向对象程序设计 它没有类继承,甚至没有类。
较复杂的对象行为是通过较简单的对象组合(而非继承)完成的

Go以一种不同寻常的方式来昵释面向对象程序设计。它没有类继承,甚至没有类。较复杂的对象行为是通过较简单的对象组合(而非继承)完成的。方法可以关联到任何用户定义的类型,而不一定是结构体。具体类型和抽象类型(即接口)之间的关系是隐式的,所以一个具体类型可能会实现该类型设计者没有意识到其存在的接口。第6章讲述方法,第7章讲述接口。

Go代码是使用包来组织的,包类似于其他语言中的库和模块,一个包由一个或多个.go源文件组成,放在一个文件夹中,该文件夹的名字描述了包的作用。每一个源文件的开始都用package声明,例子里面是package main,指明了这个文件属于哪个包。后面跟着它导人的其他包的列表,然后是存储在文件中的程序声明。
我们需要告诉编译器源文件需要哪些包,用package声明后面的import来导入这些包。你必须精确地导入需要的包。在缺失导入或存在不需要的包的情况下,编译会失败,这种严格的要求可以防止程序演化中引用不需要的包。import声明必须跟在package声明之后。import 导入声明后面,是组成程序的函数、变量、常量、类型(以func、var、const、type开头)声明。大部分情况下,声明的顺序是没有关系的。
package和import声明,它们存在于源文件中,并且编译时必不可少。

Go的标准库中有100多个包用来完成输人、输出、排序、文本处理等常规任务。例如,fmt包中的函数用来格式化输出和扫描输人。Println是fmt中一个基本的输出函数,它输出一个或多个用空格分隔的值,结尾使用一个换行符,这样看起来这些值是单行输出。
名为main 的包比较特殊,它用来定义一个独立的可执行程序,而不是库。在main包中,函数main也是特殊的,不管在什么程序中,main做什么事情,它总是程序开始执行的地方。当然,main通常调用其他包中的函数来做更多的事情,比如 fmt.Println。

Go不需要在语句或声明后面使用分号结尾,除非有多个语句或声明出现在同一行。事实上,跟在特定符号后面的换行符被转换为分号,在什么地方进行换行会影响对Go代码的解析。例如,“{”符号必须和关键字func在同一行,不能独自成行,并且在x+y这个表达式中,换行符可以在+操作符的后面,但是不能在+操作符的前面。

Go对于代码的格式化要求非常严格。gofmt工具将代码以标准格式重写,go工具的fmt子命令使用gofmt工具来格式化指定包里的所有文件或者当前文件夹中的文件(默认情况下)。本书中包含的所有Go源代码文件都使用gofmt运行过,你应该养成对自己的代码使用gofmt工具的习惯。定制一个标准的格式,可以省去大量无关紧要的辩论,更重要的是,如果允许随心所欲的格式,各种自动化的源代码转换工具将不可用。许多文本编辑器可以配置为每次在保存文件时自动运行gofmt,因此源文件总可以保持正确的形式。此外,一个相关的工具 goimports可以按需管理导入声明的插入和移除。它不是标准发布版的一部分,可以通过执行命令获取到。

Go项目不仅包括该语言本身及其工具和标准库,还有决不能忽视的一点,就是它保持极端简单性的行为文化。在高级语言中,Go出现得较晚,因而有一定后发优势,它的基础部分实现得不错:有垃圾回收、包系统、一等公民函数、词法作用域、系统调用接口,还有默认用UTF-8编码的不可变字符串。但相对来说,它的语言特性不多,而且不太会增加新特性了。比如,它没有隐式数值类型强制转换,没有构造或析构函数,没有运算符重载,没有形参默认值,没有继承,没有泛型,没有异常,没有宏,没有函数注解,没有线程局部存储。这门语言成熟而且稳定,并且保证兼容更早版本:在旧版本的Go语言中写的程序,可以在新版本的编译器和标准库下编译与运行。

Go的类型系统足可以使程序员避免在动态语言中会无意犯下的绝大多数错误,但相对而言,它在带类型的语言中又算是类型系统比较简单的。其实现方法有时候会导致类型框架林立却彼此孤立的“无类型”程序设计风格,并且Go程序员在类型方面不会像C++或Haskell程序员那样走极端——反复表达类型安全性以证明语言是基于类型的。但在实际工作中,Go却能为程序员提供只有强类型的系统才能实现的安全性和运行时性能,而不让程序员承担其复杂性。

Go 代码是使用包来组织的,包类似于其他语言中的库和模块, 一个包由一个或多个 go 源文件组成,放在一个文件夹中,该文件夹的名字描述了包的作用 ,每一个源文件的开始都用 package 声明,例子里面是 package main ,指明了这个文件属于哪个包,后面跟着它导人的其他包的列表,然后是存储在文件中的程序声明。

go命令

Go的工具链将程序的源文件转变成机器相关的原生二进制指令,这些工具可以通过单一的go命令配合其子命令进行使用。

run命令
最简单的子命令是run,它将一个或多个以.go为后缀的源文件进行编译、链接,然后运行生成的可执行文件。

build命令
如果这个程序不是一次性的实验,那么编译输出成一个可复用的程序比较好。这通过go build来实现,这条命令生成了一个叫作 二进制程序,它可以不用进行任何其他处理,随时执行。

Go语言特性

注释

注释:我们已经在程序或包的开始提到文档注释。在声明任何函数前,写一段注释来说明它的行为是一个好的风格,这个约定很重要,因为它们可以被go doc和 godoc工具定位和
作为文档显示(参考10.7.4节)。
对于跨越多行的注释,可以使用类似其他语言中的//注释。这样可以避免在文件的开始有一大块说明文本时每一行都有//。注释不能嵌套。

在这里插入图片描述

指针

第二章cache

《Go程序语言设计》

2.1:命名规则
2.2 :声明(变量var、常量const、类型type、函数func)
2.3:var声明变量、短变量声明name:= expression;指针;用new函数创建变量;变量的声明周期
2.4:=表示赋值;多重赋值;
2.5:用type进行类型声明
2.6:Go语言中的包;package关键字;用import导入;包内的初始化;声明的作用域

Go 函数

一个函数的声明由func关键字、函数名、参数列表(main函数为空)、返回值列表(可以为空)、放在大括号内的函数体组成,函数体定义函数是用来做什么的。

方法

接口

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Abner_iii

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值