42. Go tcp客户端、服务端编程

内容参考net包,net包提供了可移植的网络I/O接口,包括TCP/IP、UDP、域名解析和Unix域socket。

虽然本包提供了对网络原语的访问,大部分使用者只需要Dial、Listen和Accept函数提供的基本接口;以及相关的Conn和Listener接口。crypto/tls包提供了相同的接口和类似的Dial和Listen函数。

服务端

在服务器端我们需要绑定服务到指定的非激活端口, 并监听此端口;当有客户端请求到达的时候可以接收到来自客户端连接的请求。

Read More

41. Go管理任务运行和生命周期

案例来源于 [美]威廉·肯尼迪(William Kennedy)布赖恩·克特森(Brian Ketelsen)埃里克·圣马丁(Erik St. Martin). Go语言实战 (Kindle Location 3997). 人民邮电出版社. Kindle Edition.一书第7章 并发模式 之 7.1 runner。

设计

runner包用于展示如何使用通道来监视程序的执行时间,如果程序运行时间太长,也可以用runner包来终止程序。当开发需要调度后台处理任务的程序的时候,这种模式会很有用。这也是目前我们使用跑数平台抓取数据和执行临时脚本的关键所在,虽然实现各不相同,但大致思路都是相同的。即是添加命令,记录输出,控制命令执行完毕或中断……

教材中给出的案例相对比较简单,传入参数随意,只传入一个下标ID值。但是go中参数传递并不容易,更啰嗦的办法或者是总结业务中需要用到的形式来提炼出更抽象的方式,这样会显得相对简单,但维护会增加好几倍的精力。但是所有的抽象都统一到一个函数中,只会让参数更抽象,使用go语言的接口interface{}类型,因为该类型可以接收函数传入任意类型的参数,但是在函数中,参数的类型依然是interface类型,需要特别注意,必须进行处理后方可使用。

Read More