摘要:
反射reflection 1. 反射可以大大的提高程序的灵活性,使得 interface{} 有更大的发挥余地 2. 反射使用 TypeOf 和 ValueOf 函数从接口中获取目标对象信息 3. 反射会将匿名字段作为独立字段(匿名字段本质) 4. 想要利用反射修改对象状态,前提是 interfac 阅读全文
摘要:
方法 method 1. Go 中虽没有 class,但依旧有 method 2. 通过显示说明 receiver 来实现与某个类型的组合 3. 只能为同一个包中的类型定义方法 4. Receiver 可以是类型的值或者指针 5. 不存在方法重载 6. 可以使用值或指针来调用方法,编译器会自动完成转 阅读全文
摘要:
接口interface 1. 接口是一个或多个方法签名的集合 2. 只要某个类型拥有该接口的所有方法签名,即算实现该接口,无需显示声明实现了哪个接口,这称为 Structural typing 3. 接口只有方法声明,没有实现,没有数据字段 4. 接口可以匿名嵌入其它接口,或切入到结构中去 5. 将 阅读全文
摘要:
结构struct 1. Go 中的struct与C中的struct非常相似,并且Go没有class 2. 使用 type <Name> struct{} 定义结构,名称遵循可见性规则(即首字母大写对外可见)。 type person struct{} 3. 支持指向自身的指针类型成员,支持匿名结构, 阅读全文
摘要:
1. map 1. 类似其它语言中的哈希表活着字典,以 key-value 形式存储数据 2. key 必须是支持 == 或 != 比较运算的类型,不可以是函数、map 或 slice 3. map 查找比线性搜索快很多,但比使用索引访问数据的类型慢100倍 4. map使用 make() 创建,支 阅读全文
摘要:
1. 判断语句if 1. 条件表达式没有括号(这点其他语言转过来的需要注意) 2. 支持一个初始化表达式(可以是并行方式,即:a, b, c := 1, 2, 3) 3. 左大括号必须和条件语句或 else 在同一行 4. 支持单行模式 5. 初始化语句中的变量为 block 级别,同时隐藏外部同名 阅读全文
摘要:
1. Go项目的目录结构 一般的,一个Go项目在GOPATH下,会有如下三个目录: project bin pkg src 其中,bin 存放编译后的可执行文件;pkg 存放编译后的包文件;src 存放项目源文件。一般,bin 和 pkg 目录可以不创建,go 命令会自动创建(如 go instal 阅读全文
摘要:
1. golang 中 json 转 struct <1. 使用 json.Unmarshal 时,结构体的每一项必须是导出项(import field)。也就是说结构体的 key 对应的首字母必须为大写。请看下面的例子: 输出的结果如下: 1 { 0} 1 { 0} 1 { 0} 1 { 0} { 阅读全文