golang 读书笔记
介绍
Go语言是一种让代码分享更容易的编程语言。Go语言自带一些工具,让使用别人写的包更容易,并且分享自己写的包更容易。
Go语言对并发的支持是这门语言最重要的特性之一。goroutine很像线程,但是它占用的内存远少于线程,使用它需要的代码更少。通道(channel)是一种内置的数据结构,可以让用户在不同 的goroutine之间同步发送具有类型的消息。
术语
goroutine 是可以与其他goroutine并行执行的函数,同时也会与主程序(程序的入口)并行执行。
个人理解: 相当于其他语言的多线程
channel 一种数据结构,可以让goroutine之间进行安全的数据通信。
可以避免像其他语言里常见的共享内存访问的问题。
鸭子类型 如果它叫起来像鸭子,那它就可能是只鸭子
规范
- 如果接口类型只包含一个方法,那么这个类型的名字以
er
结尾
Go语言的类型系统
- 类型简单
- Go接口对一组行为建模
空白标识符(_) 用来抛弃不想继续使用的值,如给导入的包赋予一个空名字,或者忽略函数返回的你不感兴趣的值。
init函数 每个包可以包含任意多个init函数,所有被编译器发现的init函数都在main函数之前执行。
文档
命令行获取
go doc fmt
浏览文档
godoc -http=:6060
包含所有Go标准库和你的GOPATH下Go源代码的文档
函数的文档直接写在函数声明之前,使用人类可读的句子编写。如果想给包写一段文字量比较大的文档,可以在工程里包含一个叫作doc.go的文件,使用同样的包名,并把包的介绍使用注释加在包名声明之前。
数据类型
引用类型 切片、map、channel(通道)、接口、函数, 当声明上述类型的变量时,创建的变量被称作 Header 值
数组 固定长度。用于存储一段具有相同的类型的元素的连续块
如果使用...
代替数组长度,则更具初始化时数组元素的数量来确定该数组的长度
// 声明一个包含5个元素的整型数组
var array [5]int
// 用具体值初始化每个元素
array := [5]int {1, 2, 3, 4, 5}
// 容量由初始化值的数量决定
array := [...]int {1, 2, 3, 4, 5}
// 用具体值初始化索引为1,2 的元素,其余则保持0
array := [5]int {1: 1, 2: 2}
切片 动态数组,可以按需自动增长和缩小。
在64位架构机器上, 一个切片需要24字节的内存: 指针字段需要8字节,长度和容量字段分别需要8字节。
// 创建一个字符串切片,其长度和容量都是5个元素
slice := make([]string, 5)
// 长度为3个元素,容量为5个元素 不容许创建容量小雨长度的切片
slice := make([]int, 3, 5)
// 创建 nil 整型切片
var slice []int
如果在
[]
运算符中指定了一个值,那么创建的就是数组而不是切片
//创建有3个元素的整型数组
array := [3]int {10, 20, 30}
//创建长度和容量都是3的整型切片
slice := []int {10, 20, 30}
- 赋值和切片
创建一个新切片就是把底层数组切出一部分
//创建一个整型切片,其长度和容量都是5个元素
slice := []int{1,2,3,4,5}
//创建一个新切片,其长度为2个元素,容量为4个元素
newSlice := slice[1:3]
对于底层数组容量是k的切片
slice[i:j]
来说
长度: j - i
容量: k - i
切片增长
append
总是增加新切片的长度,而容量则有可能会改变,容量改变取决于被操作的切片的可用容量创建切片时的第3个索引
第三个索引可以用来控制新切片的容量,其目的并不是要增加容量,而是要限制容量
slice[i:j:k]
长度 j - i
容量 k - i
- 迭代
range
返回两个值。第一个值是 索引 第二个对应位置元素值的一份副本
map
存储一系列无序键值对
自定义类型
- 使用关键字struct创建一个结构类型
type User struct {
ID string
}
- 基于一个已有类型,将其作为新类型的类型说明
type Duration int64
// int64类型叫作Duration的基础类型。Go 并不认为 Duration 和 int64 是同一类型。这两个类型是完全不同的有区别的类型。
struct
struct 有2中方法, 值方法和指针方法
- 值方法 调用时会使用这个值的一个副本来执行
- 指针方法 调用时使用这个值的引用来执行
也可以使用指针来调用值方法,编译器转换后的代码
(*obj).method()
也可以使用值来调用引用方法,编译器转换后的代码
(&ojb).method()
声明一个方法时使用 值方法 还是 指针方法,取决于想得到一个新值还是想修改原有的值
接口
用来定义行为
channel
unbuffered := make(chan int) //无缓冲通道
buffered := make(chan int, 10)
- 无缓冲的通道 在接收前没有能力保存任何值的通道
总结
- Go语言是现代的、快速的、带有一个强大的标准库。
- Go语言内置对并发的支持。
- Go语言使用接口作为代码复用的基础模块。
- 每个代码文件都属于一个包,而包名英国与代码文件所在的文件夹同名
- Go语言提供了多种声明和初始化变量的方式。如果变量的值没有显式初始化,编译器会将变量初始化为零值。
- 使用指针可以在函数间活着goroutine间共享数据。
- 通过启动goroutine和使用通道完成并发和同步
- Go语言提供了内置函数来支持Go语言内部的数据结构。
- Go语言中包是组织代码的基本单位
- 环境变量GOPATH决定了Go源代码在磁盘上被保存、编译和安装的位置。
- 可以为悲歌工程设置不同的GOPATH,以保持源代码和依赖的隔离。
- Go工具是在命令行上工作的最好工具
- 开发人员可以使用go get 来获取别人的包并将其安装到自己的GOPATH指定目录
- 要为别人创建包很简单,只要吧源代码放到公用代码库,并遵守一些简单的规则就可以了。
- Go语言在设计时将分享代码作为语言的核心特性和驱动力。
- 推荐使用依赖管理工具来管理依赖 如 godep, vender, gb
- 数组结构是切片和map的基石
- Go语言里切片经常用来处理数据的集合,map用来处理具有简直对结构的数据
- 内置函数make可以创建切片和map,并指定原始的长度和容量。也可以直接使用切片和map字面量,活着使用字面量的初始值。
- 切片有容量限制,不过可以使用内置的append函数扩展容量。
- map的增长没有容量或者任何限制
- 内置函数len可以用来获取切片或者map的长度
- 内置函数cap只能用于切片 (cap()函数返回的是数组切片分配的空间大小)
- 通过组合,可以创建多维组和多维切片。也可以使用切片或者其他map作为map的值。但是切片不能用作map的键
- 将切片或者map传递给函数成本很小,并且不会复制底层的数组结构。
- 使用关键字 struct 或者指定已经存在的类型,可以声明用户定义的类型。
- 方法提供了一种给用户定义的类型增加行为的方式。
- 设计类型时需要去人类型的本质是原始的,还是非原始的。
- 接口是声明了一组行为并支持多态的类型。
- 嵌入类型提供了扩展类型的能力,而无需使用继承。
- 标识符要么是从包里公开的,要么是在包里未公开的。
golang 读书笔记的更多相关文章
- [golang][gui]Hands On GUI Application Development in Go【在Go中动手进行GUI应用程序开发】读书笔记03-拒交“智商税”,解密“GUI”运行之道
和老外的原文好像没多大联系了,哈哈哈,反正是读书笔记,下面的内容也是我读此书中的历程,也写进来吧.不过说实话,这框架的作者还挺对我脾气的,哈哈哈. 拒交“智商税”,解密“GUI”运行之道 我很忙 项目 ...
- React 读书笔记
序言: 领导安排部门同事本月内看一本跟自己职业相关的书籍, 根基类的书籍已经看过了,重复阅读的意义不大,所以我平时看的都是视频,也许是视频作者没有出书的条件,也许是现在出书看的人越来越少了,也许有其他 ...
- 《Go并发编程实战》读书笔记-初识Go语言
<Go并发编程实战>读书笔记-初识Go语言 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在讲解怎样用Go语言之前,我们先介绍Go语言的特性,基础概念和标准命令. 一. ...
- 读书笔记汇总 - SQL必知必会(第4版)
本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...
- 读书笔记--SQL必知必会18--视图
读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...
- 《C#本质论》读书笔记(18)多线程处理
.NET Framework 4.0 看(本质论第3版) .NET Framework 4.5 看(本质论第4版) .NET 4.0为多线程引入了两组新API:TPL(Task Parallel Li ...
- C#温故知新:《C#图解教程》读书笔记系列
一.此书到底何方神圣? 本书是广受赞誉C#图解教程的最新版本.作者在本书中创造了一种全新的可视化叙述方式,以图文并茂的形式.朴实简洁的文字,并辅之以大量表格和代码示例,全面.直观地阐述了C#语言的各种 ...
- C#刨根究底:《你必须知道的.NET》读书笔记系列
一.此书到底何方神圣? <你必须知道的.NET>来自于微软MVP—王涛(网名:AnyTao,博客园大牛之一,其博客地址为:http://anytao.cnblogs.com/)的最新技术心 ...
- Web高级征程:《大型网站技术架构》读书笔记系列
一.此书到底何方神圣? <大型网站技术架构:核心原理与案例分析>通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计 ...
随机推荐
- FTP文件上传并支持断点续传(一)—— win10 本地环境 ftp站点构建
由于之前项目开发是采用是采用的FTP文件上传,就一直想学习,但由于FTP服务器是公司的,为了方便就像把本地变成ftp站点,其实很简单,但也有很多坑 这里简单介绍一下自己遇到的坑 一:开通本地的ftp权 ...
- 属性的get、set
以年龄为例,通过属性,控制年龄的输入范围. 静态调用非静态时,需要通过对象来调用. namespace ConsoleApplication1 { class Program { private in ...
- 第二周java学习总结
学号 20175206 <Java程序设计>第二周学习总结 教材学习内容总结 第二章是基本数据类型与数组,第三章是运算符.表达式和语句的内容.如果说第一章是让我们了解JAVA,那么第二章和 ...
- 洛伦兹曲线(Lorenz curve)提升指数、提升表和提升图
sklearn实战-乳腺癌细胞数据挖掘 https://study.163.com/course/introduction.htm?courseId=1005269003&utm_campai ...
- QPS从0到4000请求每秒,谈达达后台架构演化之路
达达是全国领先的最后三公里物流配送平台. 达达的业务模式与滴滴以及Uber很相似,以众包的方式利用社会闲散人力资源,解决O2O最后三公里即时性配送难题(目前达达已经与京东到家合并). 达达业务主要包含 ...
- Swagger Edit 安装和使用教程
Swagger Edit介绍Swagger是专门用来管理接口一个工具.在开发过程中,接口一直是纷争的聚焦点,能有效管理接口(保存好记录.及时更新.方便查看.接口测试).会让整个项目开发效率提升很大. ...
- Android AVD启动报错:emulator: ERROR: x86_64 emulation currently requires hardware acceleration! Please ensure Intel HAXM is properly installed and usable.
打开Android SDK manager查看安装发现HAXM在windows上无法安装 可以去 http://www.androiddevtools.cn/index.html 下载 Android ...
- Python 面试总结
公司面试: 1,说说项目都用到了什么技术? 2,mysql索引的种类? 3,索引建多有什么不好? 4,mysql的引擎有什么? 5,redis是单线程还是多线程的? 6, redis的持久化机制? 7 ...
- ‘Host’ is not allowed to connect to this mysql server
‘Host’ is not allowed to connect to this mysql server mysql 数据库不允许远程连接 方法一:修改 host 表 进入mysql数据库,选择m ...
- python基本面试题
https://www.cnblogs.com/changwentao/p/9432166.html