摘要:
一、函数的变量作用域和可见性 1.全局变量在main函数执行之前初始化,全局可见 2.局部变量在函数内部或者if、for等语句块有效,使用之后外部不可见 3.全局变量和局部变量同名的情况下,局部变量生效。 4.可见性: 包内任何变量或函数都是能访问的。 包外的话,首字母大写是可以访问的,首字母小写的 阅读全文
摘要:
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语言中的协程,没有上面这种切换 阅读全文
摘要:
今天看了同事写的组件,有一些感触,怎么才能设计一个好的组件呢?我感觉应该要包含下面几点: 1. 要易用 (至少让使用者能够简单方便的引入到程序当中)2. 要稳定 (需要增加关键的测试)3. 要灵活(关键参数可配置)4. 要全面(日志、拦截器、监听器)5. 要谨慎(要考虑多种情况)6. 要易读(写的东 阅读全文
摘要:
今天测试反应了一个问题,说接口返回的速度变慢了,并且返回的数据也不对。然后就找到了我o(╥﹏╥)o。 第一个反应就是查日志,不查不要紧,一查吓一跳,整个服务器上所有的站点都报错了。异常信息如下: System.AggregateException: One or more errors occurr 阅读全文