摘要: 反射 反射是指在程序运行期对程序本身进行访问和修改的能力。程序在编译时,变量被转换为内存地址,变量名不会被编译器写入到可执行部分。在运行程序时,程序无法获取自身的信息。支持反射的语言可以在程序编译期将变量的反射信息,如字段名称、类型信息、结构体信息等整合到可执行文件中,并给程序提供接口访问反射信息, 阅读全文
posted @ 2018-11-04 17:56 北洛 阅读(2778) 评论(1) 推荐(1) 编辑
摘要: 同步 Go 程序可以使用通道进行多个 goroutine 间的数据交换,但这仅仅是数据同步中的一种方法。通道内部的实现依然使用了各种锁,因此优雅代码的代价是性能。在某些轻量级的场合,原子访问(atomic包)、互斥锁(sync.Mutex)以及等待组(sync.WaitGroup)能最大程度满足需求 阅读全文
posted @ 2018-11-04 13:06 北洛 阅读(272) 评论(0) 推荐(0) 编辑
摘要: Telnet回音服务器 Telnet协议是TCP/IP协议族中的一种。它允许用户(Telnet客户端)通过一个协商过程与一个远程设备进行通信。本例将使用一部分Telnet协议与服务器进行通信。 服务器的网络库为了完整展示自己的代码实现了完整的收发过程,一般比较倾向于使用发送任意封包返回原数据的逻辑。 阅读全文
posted @ 2018-11-04 12:29 北洛 阅读(629) 评论(0) 推荐(0) 编辑
摘要: 通道(channel) 单纯地将函数并发执行是没有意义的。函数与函数间需要交换数据才能体现并发执行函数的意义。虽然可以使用共享内存进行数据交换,但是共享内存在不同的goroutine中容易发生竞态问题。为了保证数据交换的正确性,必须使用互斥量对内存进行加锁,这种做法势必造成性能问题。 Go语言提倡使 阅读全文
posted @ 2018-11-04 09:39 北洛 阅读(415) 评论(0) 推荐(0) 编辑