Go语言基础笔记
一角残叶
人生如逆旅,我亦是行人
展开
-
一、基础知识
1 基础知识Go程序通过package来组织的;只有package名称是main的包可以包含main函数;一个可执行程序有且仅有一个main包;通过在函数体外部使用var关键字进行全局变量的声明与赋值;通过typr关键字来进行struct或者interface的声明;2 可见性规则Go 语言中,使用大小写决定该变量、常量、类型、接口、结构或函数是否可以被外部包所调用。...原创 2018-05-19 16:14:42 · 145 阅读 · 0 评论 -
九、Go语言——interface
1 接口接口是一个或多个方法签名的集合只要某个类型拥有该接口的所有方法签名,即算实现该接口,无需显示声明实现了哪个接口,这称为 Structural Typing接口只有方法声明,没有实现,没有数据字段接口可以匿名嵌入其它接口,或嵌入到结构中将对象赋值给接口时,会发生拷贝,而接口内部存储的是指向这个复制品的指针,既无法修改复制品的状态,也无法获取指针只有当接口存储的类型和对象都为n...原创 2018-05-21 14:23:56 · 170 阅读 · 0 评论 -
四、切片 Slice
1 切片其本身并不是数组,它指向底层的数组作为变长数组的替代方案,可以关联底层数组的局部或全部为引用类型可以直接创建或从底层数组获取生成使用len()获取元素个数,cap()获取容量一般使用make()创建如果多个slice指向相同底层数组,其中一个的值改变会影响全部make([]T, len, cap)其中cap可以省略,则和len的值相同len表示存数的元素个数,cap...原创 2018-05-21 10:18:07 · 317 阅读 · 0 评论 -
八、Go语言—— method
1 methodGo 中虽没有class,但依旧有method通过显示说明receiver来实现与某个类型的组合只能为同一个包中的类型定义方法Receiver 可以是类型的值或者指针不存在方法重载可以使用值或指针来调用方法,编译器会自动完成转换从某种意义上来说,方法是函数的语法糖,因为receiver其实就是 方法所接收的第1个参数(Method Value vs. Metho...原创 2018-05-20 22:48:18 · 253 阅读 · 0 评论 -
七、Go语言——struct
1 structGo 中的struct与C中的struct非常相似,并且Go没有class使用 type struct{} 定义结构,名称遵循可见性规则支持指向自身的指针类型成员支持匿名结构,可用作成员或定义成员变量匿名结构也可以用于map的值可以使用字面值对结构进行初始化允许直接通过指针来读写结构成员相同类型的成员可进行直接拷贝赋值支持 == 与 !=比较运算符,但不支持...原创 2018-05-20 21:56:35 · 236 阅读 · 0 评论 -
六、go语言函数
1 函数Go 函数 不支持 嵌套、重载和默认参数无需声明原型、不定长度变参、多返回值、命名返回值参数 匿名函数、闭包定义函数使用关键字 func,且左大括号不能另起一行函数也可以作为一种类型使package mainimport "fmt"func main() { s1 := []int{1, 2, 3,4} A(s1) fmt.Println...原创 2018-05-20 18:48:08 · 186 阅读 · 0 评论 -
五、Go基础——map
1 Map类似其它语言中的哈希表或者字典,以key-value形式存储数据Key必须是支持==或!=比较运算的类型,不可以是函数、map或sliceMap查找比线性搜索快很多,但比使用索引访问数据的类型慢100倍Map使用make()创建,支持 := 这种简写方式make([keyType]valueType, cap),cap表示容量,可省略 超出容量时会自动扩容,但尽量提供一个...原创 2018-05-20 15:32:07 · 152 阅读 · 0 评论 -
三、Go编程基础——数组
1 数组定义数组的格式:var [n],n>=0数组长度也是类型的一部分,因此具有不同长度的数组为不同类型注意区分指向数组的指针和指针数组数组在Go中为值类型(传递到方法时,将数组进行拷贝)数组之间可以使用==或!=进行比较,但不可以使用<或>可以使用new来创建数组,此方法返回一个指向数组的指针Go支持多维数组func main() { a:=...原创 2018-05-19 19:00:37 · 199 阅读 · 0 评论 -
二、Go基础——控制语句
1 控制语句1.1 if条件表达式没有括号支持一个初始化表达式(可以是并行方式)左大括号必须和条件语句或else在同一行支持单行模式初始化语句中的变量为block级别,同时隐藏外部同名变量1.0.3版本中的编译器BUGfunc main() { a:=10; if a:=1;a>0{ fmt.Println(a) } ...原创 2018-05-19 17:17:13 · 164 阅读 · 0 评论 -
十、go语言—— 反射
1 reflection反射可大大提高程序的灵活性,使得 interface{} 有更大的发挥余地反射使用 TypeOf 和 ValueOf 函数从接口中获取目标对象信息反射会将匿名字段作为独立字段(匿名字段本质)想要利用反射修改对象状态,前提是 interface.data 是 settable, 即 pointer-interface通过反射可以“动态”调用方法pac...原创 2018-05-21 19:06:27 · 242 阅读 · 0 评论