02 2019 档案
摘要:Go语言和其他语言不一样,它只有一种循环方式,就是for语句 可以参考如下公式: 执行顺序 a.执行一次initialisation,初始化 b.判断condition c.条件为true,执行{}内的语句 d.语句执行之后执行post 使用方式举例: 1.基本使用类似其他语言的for 2.替代wh
阅读全文
摘要:一、基本使用 ①从属于time这个包 ②一般使用都是使用 time.Time 这个类型表示时间 ,time包中还有一些常量,源码如下 ③ time.Now() 获取当前的时间,返回的是Time类型 Time类型中的 Year() 获取当前的年份 Month() 获取当前的月份 Day() 获取当前的
阅读全文
摘要:1.Go语言String的本质就是一个[]byte,所以他们之间可以互相转换,byte数组的长度就是字符串的长度。 结果 2.字符串的值一旦指定,就不能进行修改。如果想修改,则可以先将字符串装换成slice。 会出现如下错误提示 结果 3.rune表示utf8的字符,一个rune字符由一个或多个by
阅读全文
摘要:一、复习常量 提到Iota这个关键字,就必须要复习一下Go语言的常量。 1.Go语言的常量一般使用const声明 2.Go语言的常量只能是布尔型、数字型(整数型、浮点型和复数)和字符串型 3.Go语言的常量可以不指定类型,由编译器自己推断,如下面的【string】就是可以不写的(也称为 隐式类型定义
阅读全文
摘要:有缓冲的通道相比于无缓冲通道,多了一个缓存的功能,如下图描述的一样: 从图上可以明显看到和无缓冲通道的区别,无缓冲必须两个Goroutine都进入通道才能进行数据的交换,这个不用,如果数据有,直接就能拿走。 运行结果: 因为哪一个worker先从通道中取值有系统自己进行调度的,所以每次运行的结果稍微
阅读全文
摘要:前言: 上文中我们采用了【原子函数】已经【共享锁】两种方式分别对多个goroutine进行了同步,但是在go语言中提供了另一种更好的方式,那就是使用通道(Channel)。 一、通道是什么? 其实无论是原子函数还是共享锁都是通过共享内存的方式进行的同步、效率一般不高,而Go语言中则使用了通道,它是一
阅读全文
摘要:协程的特点 1.该任务的业务代码主动要求切换,即主动让出执行权限 2.发生了IO,导致执行阻塞(使用channel让协程阻塞) 与线程本质的不同 C#、java中我们执行多个线程,是通过时间片切换来进行的,要知道进行切换,程序需要保存上下文等信息,是比较消耗性能的 GO语言中的协程,没有上面这种切换
阅读全文
摘要:在学习过程中,发现一个有趣的现象: 定义这样一个结构 main中有如下代码: 执行之后可以看到结果 可以看到上面两种方式,结果不一致。 总结:加&符号和new的是指针对象,没有的则是值对象,这点和C#、java不一致,在传递对象的时候要根据实际情况来决定是要传递指针还是值。
阅读全文