学习GO语言的笔记
文章平均质量分 84
最主要的参考书是:<GO>, 可以说是<GO>的学习笔记, :)
诸葛老刘
生命短暂,我用python
展开
-
学习《GO语言学习笔记》的学习笔记之8.1 并发之定义 (详解)
本文适合初学者阅读只须在函数调用前添加go 关键字即可创建并发任务.关键字go并非执行并发操作, 而是创建一个并发任务单元.与defer一样, goroutine也会因"延迟执行"而立即计算并复制执行参数.package mainimport ( "log" "time")var c intfunc counter() int { c++ return c}...原创 2019-03-12 19:17:16 · 208 阅读 · 0 评论 -
学习《GO语言学习笔记》的学习笔记之7 接口 (详解)
本文适合初学者阅读7.1 定义接口代表一种契约, 是多个方法声明的集合.go接口实现机制很简洁, 只要目标类型方法集内包含接口声明的全部方法, 就视为实现了该接口,无须做显式声明. 当然, 目标类型可实现多个接口.从内部实现来看,接口自身也是一种结构类型, 只是编译器会对其做出很多限制.- 不能有字段- 不能定义自己的方法- 只有声明方法,不能实现- 可嵌入其他接口类型接口通常...原创 2019-03-11 18:42:58 · 170 阅读 · 0 评论 -
学习《GO语言学习笔记》的学习笔记之6.4 方法之表达式 (详解)
表达式方法和函数一样, 除直接调用外, 还可赋值给变量, 或作为参数传递, 依照具体这条方式的不同, 可分为experssion 和value两种状态Method Expression通过类型引用的method expression 会被还原为普通函数样式, receiver是第一函数, 调用时须显式传参. 至于类型, 可以T或*T, 只要目标方法存在于该类型方法集中即可.packa...原创 2019-03-11 16:32:06 · 172 阅读 · 0 评论 -
学习《GO语言学习笔记》的学习笔记之6.3 方法之方法集 (详解)
本文初学者阅读6.3 方法集类型有一个与之相关的方法集(method set), 这决定了它是否实现某个接口.- 类型T方法集包含所有receiver T 方法- 类型 *T方法集包含所有receiver T + *T方法.可利用反射(reflet)测试这些规则package mainimport ( "fmt" "reflect")type S struct{}...原创 2019-03-11 15:45:20 · 216 阅读 · 0 评论 -
学习《GO语言学习笔记》的学习笔记之6.2 方法之匿名字段 (详解)
本文适合初学者阅读6.2 匿名字段可以像访问匿名字段成员那样调用其方法,由编译器负责查找.type data struct { sync.Mutex buf [1024]byte}func main() { d := data d.lock() // 编译器处为sync.(*Mutex).Lock()调用 defer d.unlock...原创 2019-03-11 15:43:15 · 126 阅读 · 0 评论 -
学习《GO语言学习笔记》的学习笔记之6.1 方法 之定义 (详解)
本文适合初学者阅读什么是方法?普通函数则专注于算法流程, 通过接收参数来完成特定逻辑运算, 并返回最终结果. 方法是有关联状态, 而函数通常没有在GO中, 方法与函数定义语法区别的在于前者有前置实例接收参数(receiver), 编译器以此确定方法所属类型.package mainimport "fmt"type N intfunc (n N) toString() str...原创 2019-03-11 15:04:28 · 125 阅读 · 0 评论 -
学习《GO语言学习笔记》的学习笔记之5.5 数据之结构 (详解)
本文适合初学者阅读结构结构体(struct)将多个不同类型的命名字段(field)序列打包成一个复合类型.字段名必须唯一, 可用"_"补位, 支持使用自身指针类型成员. 字段名, 排列顺序属类型组成部分.除对齐外, 编译器不会优化,调整内存布局.package mainimport "fmt"type node struct { _ int id int nex...原创 2019-03-08 19:13:17 · 158 阅读 · 0 评论 -
学习《GO语言学习笔记》的学习笔记之5.4 数据之字典 (详解)
本文适合初学者阅读5.4 字典字典是一种使用频率极高的数据结构.字典是引用类型, 使用make函数或初始化表达语句来创建package mainimport ( "fmt")func main() { m := make(map[string]int) m["c"] = 3 m["d"] = 4 m2 := map[int]struct { x int }..原创 2019-03-08 14:23:01 · 232 阅读 · 0 评论 -
学习《GO语言学习笔记》的学习笔记之5. 3 数据之切片 (详解)
本文适合初学者阅读5.3 切片切片本身并非动态数组或数组指针. 它内部通过指针引用底屋数组, 设定相关属性将数据读写操作限定在指定区域内.切片本身是只只读对象, 其工作机制类似数据指针的一种包装.可基于数组或数组指针创建切片, 以开始和结束索引位置确定所引用的数组片段. 不支持反向索引, 实际范围是个右半开区间.属性cap表示切片所引用数组片段的真实长度, len用于限定可读写的元素数...原创 2019-03-05 15:21:41 · 220 阅读 · 0 评论 -
学习《GO语言学习笔记》的学习笔记之5. 2 数据之数组 (详解)
本文适合初学者阅读5.2数组定义数组类型时,数组长度必须是非负整型常量表达式, 长度是类型组成部分. 也就是说,元素类型相同, 但长度不同的数组不属于同一类型.灵活的初始化方式package mainimport "fmt"func main() { var a [4]int //元素自动初始化为0 var b = [4]int{2, 3} // 未提供初始值的元素自动初...原创 2019-03-04 20:23:11 · 133 阅读 · 0 评论 -
学习《GO语言学习笔记》的学习笔记之5.1 数据之字符串 (详解)
本文适合初学者阅读5.1 字符串字符串是不可变字节序列, 其本身是一个复合结构.头部指针指向字节数组,但没有NULL结尾字符串默认是"", 不是nil使用"`"(tab键上面那个键)定义不做转义处理的原始字符串,支持跨行.package mainfunc main() { s := `test\r\n, line2` println(s)}结果输出:test...原创 2019-03-04 19:40:02 · 208 阅读 · 0 评论 -
学习《GO语言学习笔记》的学习笔记之4.4 函数之匿名函数及错误处理 (详解)
本文适合初学者阅读匿名函数是指没有定义名字符号的函数除没有名字外, 匿名函数和普通函数完全相同.匿名函数可直接调用, 保存到变量,作为参数或返回值直接执行:package mainfunc main() { func (s string){ println(s) } ("hello")}// 输出结果: hello赋值给变量:package mainfunc...原创 2019-03-04 14:53:59 · 517 阅读 · 0 评论 -
学习《GO语言学习笔记》的学习笔记之4.3 函数之返回值 (详解)
本文适合初学者阅读有返回值的函数,必须有明确的return 终止语句.除非有panic 或者无break 的死循环, 则无须return终止语句.可以返回更多状态, 尤其是error模式.package mainimport ( "errors" "fmt")func div(x, y int) (int, error) { // 多个返回状态, 必须使用()包起...原创 2019-03-02 15:18:10 · 146 阅读 · 0 评论 -
学习《GO语言学习笔记》的学习笔记之4.2 函数之参数 (详解)
本文适合初学者阅读Go对参数的处理偏向保守, 不支持有默认值的可选参数, 不支持命名实参调用时,必须按签名顺序传递指定类型和数量的实参, 就算以"_"命名的参数也不能忽略在参数列表中,相邻的同类型参数可合并func test(x, y int, s string, _bool) *int { return nil}func main() { test(1,2, "abc") ...原创 2019-03-02 12:09:58 · 271 阅读 · 0 评论 -
学习《GO语言学习笔记》的学习笔记之4.1 函数之定义 (详解)
本文适合初学者阅读定义package mainfunc hello() { println("hello, world")}func exec(f func()) { f()}func main() { f := hello exec(f)}函数属于第一类对象, 具体相同签名的视作同一类型.第一类对象是指可在运行期创建, 可用作函数参数或返回值, 可存入...原创 2019-03-02 11:05:23 · 154 阅读 · 0 评论 -
学习《GO语言学习笔记》的学习笔记之3.3 流控制 (详解)
本文适合初学者阅读GO精简了流控制语句, 不如python 便捷, 但够用了if … else …条件表达式值必须是布尔类型, 可以省略括号, 且左花括号不能另起一行func main() { x := 3 if x &gt; 5 { println("x大于5了") } else if x &lt; 5 &amp;&amp; x &gt原创 2019-03-01 17:24:51 · 616 阅读 · 0 评论 -
学习《GO语言学习笔记》的学习笔记之3. 2 表达式初始化 (详解)
本文适合初学者阅读对复合类型(数组, 切片,字典, 结构体)变量初始化时,有一些语法限制初始化表达式必须含类型标签左花括号必须在类型的尾部, 不能另起一行多个成员初始值以逗号分隔允许多行, 但每行必须以逗号或花括号结束正确示例type data struct { x int z string}var a data = data{1, "test"} //多...原创 2019-02-19 20:22:18 · 182 阅读 · 0 评论 -
学习《GO语言学习笔记》的学习笔记之3.1 表达式 (详解)
本文适合初学者阅读运算符- 没有乘幂和绝对值运算符, 对应的是标准库math里的Pow, Abs函数- 自增,自减不再是运算符, 只能作为独立语句, 不能用于表达式.- 表达式通常是求值代码, 可作为右值或参数使用.- 表达式可以作为语句使用, 但语句不能当作表达式- 语句完成一个行为的,比如 if else 代码块.指针- 不能将内存地址与指针混为一谈.- 内存地址是内存中...原创 2019-02-18 20:14:20 · 180 阅读 · 0 评论 -
学习《GO语言学习笔记》的学习笔记之2.7 自定义类型 (详解)
本文适合初学者阅读使用关键字type 定义用户自定义类型, 包括基于现有基础类型创建, 或者是结构体,函数类型等.package mainimport ( "fmt")type flags byteconst ( read flags = 1 << iota write exec)func main() { f := ...原创 2019-02-15 20:13:31 · 219 阅读 · 0 评论 -
学习《GO语言学习笔记》的学习笔记之2.6 类型转换 (详解)
本文适合初学者阅读隐式转换造成的问题远大于它带来的好处.除常量, 别名类型以及未命名类型外, GO 强制要求使用显式类型转换.GO不支持操作符重载, 所以我们总是能确定语句及表达式的明确含义a := 10b := byte(a)c := a + int(b) // 混合类型表达式必须确保类型一致同样不能将非bool类型结果当作true/false使用.(python中是可以的)...原创 2019-02-14 19:12:08 · 141 阅读 · 0 评论 -
学习《GO语言学习笔记》的学习笔记之2.5 引用类型(详解)
本文适合初学者阅读所谓引用类型(referece type) 特指slice, map, channel 这三种预定义类型.相比数字, 数组等类型, 引用类型拥有更复杂的存储结构. 除分配内存外, 它们还须初始化一系列属性, 诸如指针, 长度, 甚至包括哈希分布, 数据队列等.内置函数 new 按指定类型长度分配零值内存, 返回指针, 并不关心类型内部构造和初始化方式, 而引用类型则必须使...原创 2019-02-14 18:35:08 · 125 阅读 · 0 评论 -
学习《GO语言学习笔记》的学习笔记之2.4 基本类型(详解)
本文适合初学者阅读GO语言的数据类型类型长度默认值说明bool1falsebyte10uint8int, unint4, 80默认整数类型,依据目标平台, 32或64位int8, unit810-128~127, 0~ 255int16, unit1620-32768~32767, 0~65535int32, ...原创 2019-02-14 17:38:05 · 137 阅读 · 0 评论 -
学习《GO语言学习笔记》的学习笔记之2.3 枚举(详解)
本文适合初学者阅读Go 没有明确意义上的enum定义 不过可以借助iota标识符实现一组自增常量值来实现枚举类型.const ( x = iota // 0 y // 1 z //2)const ( _ = iota //0 KB = 1 &lt;&lt;(10**iota) //1 &lt;&...原创 2019-01-24 11:31:50 · 207 阅读 · 0 评论 -
学习《GO语言学习笔记》的学习笔记之2.2 常量(详解)
本文适合初学者阅读关键字var用于定义变量var x int // 自动初始化为 0var z = false // 自动推断为bool类型可以一次定义多个变量var x, y int // 相同类型的多个变量var a, b = 100, &quot;xyz&quot; // 不同类型初始化值依照惯例, 建议以组的方式整理多行变量定义...原创 2019-01-22 14:07:39 · 116 阅读 · 0 评论 -
学习《GO语言学习笔记》的学习笔记之2.1 变量(详解)
本文适合初学者阅读关键字var用于定义变量var x int // 自动初始化为 0var z = false // 自动推断为bool类型可以一次定义多个变量var x, y int // 相同类型的多个变量var a, b = 100, "xyz" // 不同类型初始化值依照惯例, 建议以组的方式整理多行变量定义...原创 2019-01-17 12:30:45 · 126 阅读 · 0 评论 -
学习《GO语言学习笔记》的学习笔记之1.3 数据的使用(概述)
本文适合对GO的基本语法有所了解的人阅读切片(slice)的使用package mainimport ( &quot;fmt&quot;)func main() { x := make([]int, 0, 5) // 创建容量为5个元素的切片 for i := 0; i &amp;lt; 10 ; i++ { x = a...原创 2019-01-15 19:17:34 · 118 阅读 · 0 评论 -
学习《GO语言学习笔记》的学习笔记之1.2 函数使用(概述)
本文适合对GO的基本语法有所了解的人阅读函数的使用定义多个返回值,甚至对其命名package mainimport ( &quot;fmt&quot; &quot;errors&quot;)func div(a, b int) (int, error) { if b == 0 { return 0, errors.New(&quot;division by zer原创 2019-01-15 17:27:28 · 140 阅读 · 0 评论 -
学习《GO语言学习笔记》的学习笔记之1.1 流程控制语法(概述)
本文适合对GO的基本语法有所了解的人阅读流程控制语句if使用package mainimport &quot;fmt&quot;func main() { x := 0 if x &amp;gt; 0 { fmt.Println(&quot;big one&quot;) } else if x &amp;lt; 0 { fmt.Pr原创 2019-01-15 16:57:56 · 195 阅读 · 1 评论