摘要:
1. 反射例子 2. 反射介绍 3. 反射实现的功能 一、引入 不同语言的反射模型不尽相同,有些语言还不支持反射。《Go 语言圣经》中是这样定义反射的: Go 语言提供了一种机制在运行时更新变量和检查它们的值、调用它们的方法,但是在编译时并不知道这些变量的具体类型,这称为反射机制。 为什么要用反射 阅读全文
摘要:
go语言的最大两个亮点,一个是goroutine,一个就是chan了。二者合体的典型应用CSP,基本就是大家认可的并行开发神器,简化了并行程序的开发难度,我们来看一下CSP。 11.1、CSP是什么 CSP 是 Communicating Sequential Process 的简称,中文可以叫做通 阅读全文
摘要:
select 是 Go 中的一个控制结构。select 语句类似于 switch 语句,但是select会随机执行一个可运行的case。如果没有case可运行,它将阻塞,直到有case可运行。 select语句的语法结构和switch语句很相似,也有case语句和default语句: select 阅读全文
摘要:
1. NewTimer package main import ( "time" "fmt" ) func main() { /* 1. func NewTimer(d Duration) *Timer 创建一个计时器,d时间以后触发 */ timer := time.NewTimer(3 *tim 阅读全文
摘要:
1. 非缓冲和缓冲 package main import ( "fmt" "strconv" ) func main() { /* 非缓冲通道:make(chan T) 一次发送,一次接收,都是阻塞的 缓冲通道:make(chan T , capacity) 发送:缓冲区的数据满了,才会阻塞 接收 阅读全文
摘要:
通道可以被认为是Goroutines通信的管道。类似于管道中的水从一端到另一端的流动,数据可以从一端发送到另一端,通过通道接收。 在前面讲Go语言的并发时候,我们就说过,当多个Goroutine想实现共享数据的时候,虽然也提供了传统的同步机制,但是Go语言强烈建议的是使用Channel通道来实现Go 阅读全文
摘要:
1. 临界资源 package main import ( "fmt" "time" ) func main() { /* 临界资源: */ a := 1 go func() { a = 2 fmt.Println("goroutine中。。",a) }() a = 3 time.Sleep(1) 阅读全文