介绍

Go语言是一种让代码分享更容易的编程语言。Go语言自带一些工具,让使用别人写的包更容易,并且分享自己写的包更容易。

Go语言对并发的支持是这门语言最重要的特性之一。goroutine很像线程,但是它占用的内存远少于线程,使用它需要的代码更少。通道(channel)是一种内置的数据结构,可以让用户在不同 的goroutine之间同步发送具有类型的消息。

术语

goroutine 是可以与其他goroutine并行执行的函数,同时也会与主程序(程序的入口)并行执行。

个人理解: 相当于其他语言的多线程

channel 一种数据结构,可以让goroutine之间进行安全的数据通信。

可以避免像其他语言里常见的共享内存访问的问题。

鸭子类型 如果它叫起来像鸭子,那它就可能是只鸭子

规范

  • 如果接口类型只包含一个方法,那么这个类型的名字以er结尾

Go语言的类型系统

  1. 类型简单
  2. Go接口对一组行为建模

空白标识符(_) 用来抛弃不想继续使用的值,如给导入的包赋予一个空名字,或者忽略函数返回的你不感兴趣的值。

init函数 每个包可以包含任意多个init函数,所有被编译器发现的init函数都在main函数之前执行。

文档

命令行获取

go doc fmt

浏览文档

godoc -http=:6060

包含所有Go标准库和你的GOPATH下Go源代码的文档

函数的文档直接写在函数声明之前,使用人类可读的句子编写。如果想给包写一段文字量比较大的文档,可以在工程里包含一个叫作doc.go的文件,使用同样的包名,并把包的介绍使用注释加在包名声明之前。

数据类型

引用类型 切片、map、channel(通道)、接口、函数, 当声明上述类型的变量时,创建的变量被称作 Header 值

数组 固定长度。用于存储一段具有相同的类型的元素的连续块

如果使用 ... 代替数组长度,则更具初始化时数组元素的数量来确定该数组的长度

  1. // 声明一个包含5个元素的整型数组
  2. var array [5]int
  3. // 用具体值初始化每个元素
  4. array := [5]int {1, 2, 3, 4, 5}
  5. // 容量由初始化值的数量决定
  6. array := [...]int {1, 2, 3, 4, 5}
  7. // 用具体值初始化索引为1,2 的元素,其余则保持0
  8. array := [5]int {1: 1, 2: 2}

切片 动态数组,可以按需自动增长和缩小。

在64位架构机器上, 一个切片需要24字节的内存: 指针字段需要8字节,长度和容量字段分别需要8字节。

  1. // 创建一个字符串切片,其长度和容量都是5个元素
  2. slice := make([]string, 5)
  3. // 长度为3个元素,容量为5个元素 不容许创建容量小雨长度的切片
  4. slice := make([]int, 3, 5)
  5. // 创建 nil 整型切片
  6. var slice []int

如果在 [] 运算符中指定了一个值,那么创建的就是数组而不是切片

  1. //创建有3个元素的整型数组
  2. array := [3]int {10, 20, 30}
  3. //创建长度和容量都是3的整型切片
  4. slice := []int {10, 20, 30}
  • 赋值和切片

    创建一个新切片就是把底层数组切出一部分
  1. //创建一个整型切片,其长度和容量都是5个元素
  2. slice := []int{1,2,3,4,5}
  3. //创建一个新切片,其长度为2个元素,容量为4个元素
  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

存储一系列无序键值对

自定义类型

  1. 使用关键字struct创建一个结构类型
  1. type User struct {
  2. ID string
  3. }
  1. 基于一个已有类型,将其作为新类型的类型说明
  1. type Duration int64
  2. // int64类型叫作Duration的基础类型。Go 并不认为 Duration 和 int64 是同一类型。这两个类型是完全不同的有区别的类型。

struct

struct 有2中方法, 值方法和指针方法

  • 值方法 调用时会使用这个值的一个副本来执行
  • 指针方法 调用时使用这个值的引用来执行

也可以使用指针来调用值方法,编译器转换后的代码

(*obj).method()

也可以使用值来调用引用方法,编译器转换后的代码

(&ojb).method()

声明一个方法时使用 值方法 还是 指针方法,取决于想得到一个新值还是想修改原有的值

接口

用来定义行为

channel

  1. unbuffered := make(chan int) //无缓冲通道
  2. 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 读书笔记的更多相关文章

  1. [golang][gui]Hands On GUI Application Development in Go【在Go中动手进行GUI应用程序开发】读书笔记03-拒交“智商税”,解密“GUI”运行之道

    和老外的原文好像没多大联系了,哈哈哈,反正是读书笔记,下面的内容也是我读此书中的历程,也写进来吧.不过说实话,这框架的作者还挺对我脾气的,哈哈哈. 拒交“智商税”,解密“GUI”运行之道 我很忙 项目 ...

  2. React 读书笔记

    序言: 领导安排部门同事本月内看一本跟自己职业相关的书籍, 根基类的书籍已经看过了,重复阅读的意义不大,所以我平时看的都是视频,也许是视频作者没有出书的条件,也许是现在出书看的人越来越少了,也许有其他 ...

  3. 《Go并发编程实战》读书笔记-初识Go语言

    <Go并发编程实战>读书笔记-初识Go语言 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在讲解怎样用Go语言之前,我们先介绍Go语言的特性,基础概念和标准命令. 一. ...

  4. 读书笔记汇总 - SQL必知必会(第4版)

    本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...

  5. 读书笔记--SQL必知必会18--视图

    读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...

  6. 《C#本质论》读书笔记(18)多线程处理

    .NET Framework 4.0 看(本质论第3版) .NET Framework 4.5 看(本质论第4版) .NET 4.0为多线程引入了两组新API:TPL(Task Parallel Li ...

  7. C#温故知新:《C#图解教程》读书笔记系列

    一.此书到底何方神圣? 本书是广受赞誉C#图解教程的最新版本.作者在本书中创造了一种全新的可视化叙述方式,以图文并茂的形式.朴实简洁的文字,并辅之以大量表格和代码示例,全面.直观地阐述了C#语言的各种 ...

  8. C#刨根究底:《你必须知道的.NET》读书笔记系列

    一.此书到底何方神圣? <你必须知道的.NET>来自于微软MVP—王涛(网名:AnyTao,博客园大牛之一,其博客地址为:http://anytao.cnblogs.com/)的最新技术心 ...

  9. Web高级征程:《大型网站技术架构》读书笔记系列

    一.此书到底何方神圣? <大型网站技术架构:核心原理与案例分析>通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计 ...

随机推荐

  1. FTP文件上传并支持断点续传(一)—— win10 本地环境 ftp站点构建

    由于之前项目开发是采用是采用的FTP文件上传,就一直想学习,但由于FTP服务器是公司的,为了方便就像把本地变成ftp站点,其实很简单,但也有很多坑 这里简单介绍一下自己遇到的坑 一:开通本地的ftp权 ...

  2. 属性的get、set

    以年龄为例,通过属性,控制年龄的输入范围. 静态调用非静态时,需要通过对象来调用. namespace ConsoleApplication1 { class Program { private in ...

  3. 第二周java学习总结

    学号 20175206 <Java程序设计>第二周学习总结 教材学习内容总结 第二章是基本数据类型与数组,第三章是运算符.表达式和语句的内容.如果说第一章是让我们了解JAVA,那么第二章和 ...

  4. 洛伦兹曲线(Lorenz curve)提升指数、提升表和提升图

    sklearn实战-乳腺癌细胞数据挖掘 https://study.163.com/course/introduction.htm?courseId=1005269003&utm_campai ...

  5. QPS从0到4000请求每秒,谈达达后台架构演化之路

    达达是全国领先的最后三公里物流配送平台. 达达的业务模式与滴滴以及Uber很相似,以众包的方式利用社会闲散人力资源,解决O2O最后三公里即时性配送难题(目前达达已经与京东到家合并). 达达业务主要包含 ...

  6. Swagger Edit 安装和使用教程

    Swagger Edit介绍Swagger是专门用来管理接口一个工具.在开发过程中,接口一直是纷争的聚焦点,能有效管理接口(保存好记录.及时更新.方便查看.接口测试).会让整个项目开发效率提升很大. ...

  7. 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 ...

  8. Python 面试总结

    公司面试: 1,说说项目都用到了什么技术? 2,mysql索引的种类? 3,索引建多有什么不好? 4,mysql的引擎有什么? 5,redis是单线程还是多线程的? 6, redis的持久化机制? 7 ...

  9. ‘Host’ is not allowed to connect to this mysql server

    ‘Host’ is not allowed to  connect to this mysql server mysql 数据库不允许远程连接 方法一:修改 host 表 进入mysql数据库,选择m ...

  10. python基本面试题

    https://www.cnblogs.com/changwentao/p/9432166.html