骏马金龙 (新博客:www.junmajinlong.com)

网名骏马金龙,钟情于IT世界里的各种原理和实现机制,强迫症重症患者。爱研究、爱翻译、爱分享。特借此一亩三分田记录自己成长点滴!!!

随笔分类 -  Golang

摘要:Go channel系列 : "channel入门" "为select设置超时时间" "nil channel用法示例" "双层channel用法示例" "指定goroutine的执行顺序" 双层通道的解释见 "Go的双层通道" 以下是一个双层通道的使用示例。注意下面的示例中使用了"信号通道"(Si 阅读全文
posted @ 2018-11-21 13:32 骏马金龙 阅读(2900) 评论(0) 推荐(0) 编辑
摘要:Go channel系列 : "channel入门" "为select设置超时时间" "nil channel用法示例" "双层channel用法示例" "指定goroutine的执行顺序" channel基础 channel用于goroutines之间的通信,让它们之间可以进行数据交换。像管道一样 阅读全文
posted @ 2018-11-19 22:50 骏马金龙 阅读(12180) 评论(3) 推荐(5) 编辑
摘要:fmt包中提供了3类读取输入的函数: Scan家族:从标准输入os.Stdin中读取数据,包括Scan()、Scanf()、Scanln() SScan家族:从字符串中读取数据,包括Sscan()、Sscanf()、Sscanln() Fscan家族:从io.Reader中读取数据,包括Fscan( 阅读全文
posted @ 2018-11-11 23:27 骏马金龙 阅读(17746) 评论(0) 推荐(4) 编辑
摘要:空接口 空接口是指没有定义任何接口方法的接口。 没有定义任何接口方法,意味着Go中的任意对象都可以实现空接口(因为没方法需要实现),任意对象都可以保存到空接口实例变量中 。 空接口的定义方式: 通常会简写为 。 更常见的,会直接使用 作为一种类型,表示空接口。例如: 再比如函数使用空接口类型参数: 阅读全文
posted @ 2018-11-11 09:52 骏马金龙 阅读(5853) 评论(0) 推荐(4) 编辑
摘要:接口用法简介 接口(interface)是一种类型,用来定义行为(方法)。 但这些行为不会在接口上直接实现,而是需要用户自定义的方法来实现。所以,在上面的Namer接口类型中的方法 都是没有实际方法体的,仅仅只是在接口Namer中存放这些方法的签名( )。 当用户自定义的类型实现了接口上定义的这些方 阅读全文
posted @ 2018-11-10 22:15 骏马金龙 阅读(4868) 评论(2) 推荐(3) 编辑
摘要:接口转回成具体类型 接口实例中可以存放各种实现了接口的类型实例,在有需要的时候,还可以通过 或`ins.( Type)`的方式将接口实例ins直接转回Type类型的实例。 但注意,这时候的i和x在底层不是同一个对象,它们的地址是不同的。 输出: 注意,接口实例转回时, 接口实例中存放的是什么类型,才 阅读全文
posted @ 2018-11-01 23:27 骏马金龙 阅读(8186) 评论(0) 推荐(3) 编辑
摘要:Go方法简介 Go中的struct结构类似于面向对象中的类。面向对象中,除了成员变量还有方法。 Go中也有方法,它是一种特殊的函数,定义于struct之上(与struct关联、绑定),被称为struct的receiver。 它的定义方式大致如下: 这表示 函数是绑定在mytype这个struct t 阅读全文
posted @ 2018-11-01 17:36 骏马金龙 阅读(8744) 评论(1) 推荐(6) 编辑
摘要:struct的导出和暴露问题 关于struct的导出 struct的属性是否被导出,也遵循大小写的原则:首字母大写的被导出,首字母小写的不被导出。 所以: 1. 如果struct名称首字母是小写的,这个struct不会被导出。连同它里面的字段也不会导出,即使有首字母大写的字段名 。 2. 如果str 阅读全文
posted @ 2018-11-01 08:32 骏马金龙 阅读(7656) 评论(6) 推荐(2) 编辑
摘要:struct struct定义结构,结构由字段(field)组成,每个field都有所属数据类型,在一个struct中,每个字段名都必须唯一。 说白了就是拿来存储数据的,只不过可自定义化的程度很高,用法很灵活,Go中不少功能依赖于结构,就这样一个角色。 Go中不支持面向对象,面向对象中描述事物的类的 阅读全文
posted @ 2018-10-31 12:17 骏马金龙 阅读(45471) 评论(0) 推荐(12) 编辑
摘要:defer关键字 defer关键字可以让 函数或语句 延迟到函数语句块的最结尾时,即即将退出函数时执行,即便函数中途报错结束、即便已经panic()、即便函数已经return了,也都会执行defer所推迟的对象。 其实defer的本质是,当在某个函数中使用了defer关键字,则创建一个独立的defe 阅读全文
posted @ 2018-10-30 20:12 骏马金龙 阅读(2487) 评论(1) 推荐(4) 编辑
摘要:回调函数和闭包 当函数具备以下两种特性的时候,就可以称之为高阶函数(high order functions): 1. 函数可以作为另一个函数的参数(典型用法是回调函数) 2. 函数可以返回另一个函数,即让另一个函数作为这个函数的返回值(典型用法是闭包) 一般来说,附带的还具备一个特性:函数可以作为 阅读全文
posted @ 2018-10-30 19:16 骏马金龙 阅读(11104) 评论(0) 推荐(6) 编辑
摘要:Go中函数特性简介 对Go中的函数特性做一个总结。懂则看,不懂则算。 1. Go中有3种函数:普通函数、匿名函数(没有名称的函数)、方法(定义在struct上的函数)。 2. Go编译时不在乎函数的定义位置,但建议init()定义在最前面(如果有的话),main函数定义在init()之后,然后再根据 阅读全文
posted @ 2018-10-30 12:50 骏马金龙 阅读(4675) 评论(0) 推荐(4) 编辑
摘要:条件判断结构:if else 分支选择结构:switch case 循环结构:for break:退出for或switch结构(以及select) continue:进入下一次for迭代 虽然Go是类C的语言,但Go在这些流程控制语句中的条件表达式部分不使用括号。甚至有些时候使用括号会报错,但有些复 阅读全文
posted @ 2018-10-28 16:45 骏马金龙 阅读(1764) 评论(0) 推荐(5) 编辑
摘要:Go不会对数据进行隐式的类型转换,只能手动去执行转换操作。 简单的转换操作 转换数据类型的方式很简单。 例如: Go允许在底层结构相同的两个类型之间互转。例如: 但注意: 1. 不是所有数据类型都能转换的,例如字母格式的string类型"abcd"转换为int肯定会失败 2. 低精度转换为高精度时是 阅读全文
posted @ 2018-10-27 23:31 骏马金龙 阅读(67440) 评论(3) 推荐(8) 编辑
摘要:每一个变量都有数据类型,Go中的数据类型有: 简单数据类型 :int、float、complex、bool和string 数据结构或组合(composite) :struct、array、slice、map和channel 接口(interface) 当声明变量的时候,会做默认的赋0初始化。每种数据 阅读全文
posted @ 2018-10-27 21:41 骏马金龙 阅读(2436) 评论(0) 推荐(4) 编辑
摘要:常量(Constants)和iota 常量包含不会发生更改的数据。常量的数据类型只能是boolean、number(int/float/complex)或string。 定义方式: TYPE基本可以省略,因为常量都是简单数据类型,编译器可以根据值推断出它的数据类型。 例如: 常量在编译期间被评估,因 阅读全文
posted @ 2018-10-27 20:05 骏马金龙 阅读(1874) 评论(0) 推荐(4) 编辑
摘要:Go里的map用于存放key/value对,在其它地方常称为hash、dictionary、关联数组,这几种称呼都是对同一种数据结构的不同称呼,它们都用于将key经过hash函数处理,然后映射到value,实现一一对应的关系。 map的内部结构 一个简单的map结构示意图: 在向map中存储元素的时 阅读全文
posted @ 2018-10-26 17:28 骏马金龙 阅读(6184) 评论(0) 推荐(4) 编辑
摘要:slice表示切片(分片),例如对一个数组进行切片,取出数组中的一部分值。在现代编程语言中,slice(切片)几乎成为一种必备特性,它可以从一个数组(列表)中取出任意长度的子数组(列表),为操作数据结构带来非常大的便利性,如python、perl等都支持对数组的slice操作,甚至perl还支持对h 阅读全文
posted @ 2018-10-26 10:32 骏马金龙 阅读(41902) 评论(2) 推荐(17) 编辑
摘要:了解Python、Perl、JavaScript的人想必都知道它们的数组是动态的,可以随需求自动增大数组长度。但Go中的数组是固定长度的,数组一经声明,就无法扩大、缩减数组的长度。但Go中也有类似的动态"数组",称为slice数据结构,在下一篇文章会详细解释它。 Go中的数组是slice和map两种 阅读全文
posted @ 2018-10-25 19:55 骏马金龙 阅读(5569) 评论(4) 推荐(7) 编辑
摘要:import导入包 搜索路径 import用于导入包: 编译器会根据上面指定的相对路径去搜索包然后导入,这个相对路径是从GOROOT或GOPATH(workspace)下的src下开始搜索的。 假如go的安装目录为 ,也就是说 ,而GOPATH环境变量 ,那么要搜索 包的时候,将按照 如下顺序 进行 阅读全文
posted @ 2018-10-25 01:41 骏马金龙 阅读(12946) 评论(4) 推荐(10) 编辑