摘要:
接口定义 接口代表一种调用契约,是多个方法声明的集合 Go接口实现机制很简洁,只要目标类型方法集合包含接口声明的全部方法,就被视为实现了该接口,无须做显式声明。 目标类型可实现多个接口 接口的限制 不能有字段 不能定义自己的方法 只能声明方法,不能实现 可嵌入其他接口类型 接口通常以er作为名称后缀 阅读全文
摘要:
方法和函数一样,可以直接调用,还可以赋值给变量,或作为参数传递。依照具体引用方式的不同,可分为expression和value两种状态 method expression(方法表达式) 通过类型引用的 method expression 会被还原为普通函数样式,receiver是第一参数,调用时须显 阅读全文
摘要:
方法是与对象实例绑定的特殊函数 方法和函数定义语法区别的在于前者有前置实例接收参数(receiver),编译器以此确定方法所属类型。 可以为当前包,以及除接口和指针以外的任何类型定义方法 type N int func (n N) toString() string { return fmt.Spr 阅读全文
摘要:
结构体(struct)将多个不同类型命名字段序列打包成一个复合类型 字段名唯一,可用"_"补位,字段名排列顺序属于类型组成部分 type node struct { _ int name string age byte } func main() { n1 := node{ name: "wang" 阅读全文
摘要:
字典(map) 字典要求key必须是支持相等运算符(==、!=)的数据类型,比如:数字、字符串、指针、数组、结构体、接口类型 字典是引用类型,创建字典有两种方式:a-make函数 b-初始化表达式 func main() { //make函数方式创建map m := make(map[string] 阅读全文
摘要:
字符串 字符串是不可变字节(byte)序列 字符串默认值是"",而不是nil 使用反引号"`"定义不做转义处理的原始字符串,支持跨行 func main() { s := `hello \r\n, line 2` println(s) /* hello \r\n, line 2 */ } 编译器不会 阅读全文
摘要:
go函数特点 无须前置声明 不支持命名嵌套定义 不支持同名函数重载 不支持默认参数 支持不定长变参 支持多返回值 支持命名返回值 支持匿名函数和闭包 func只能判断其是否为nil,不支持其它比较操作 package main func main() { println(a == nil) //fa 阅读全文
摘要:
硬件的方向是物理,软件的结局是数学 go语言仅25个保留关键字 无显式类型声明的常量,那么该常量操作数会自动转型 package main import "fmt" func main() { const v = 20 //无显式类型声明的变量 fmt.Printf("%T,%v\n", v, v) 阅读全文
摘要:
我们声明的变量是一个易于阅读的名字,用来表示这段内存。实际上,编译后的机器码不使用变量名,而是直接通过内存地址来访问目标数据。 函数外声明变量,不能使用简短模式(go a:=10 )。 简短模式并不总是重新定义变量,也可能部分退化成赋值操作,前提是最少有一个新变量被定义,且必须是同一作用域。在处理函 阅读全文
摘要:
第一章概述了go的简单用法 值得看的就是CSP(Communicating Sequential Process 通信顺序进程)模型 package main import "time" func main() { //阻塞主进程 done := make(chan bool) //数据传输 dat 阅读全文