关闭

GOLANG实现的HTTP转HTTPS的代理

有时候需要将后端的HTTP服务,转成HTTPS,可以用一个代理。 Reamark: 如果是GOLANG的后端服务,可以直接用库go-oryx-lib/https。 这个代理支持自签名的证书,也支持letsencrypt的证书。 Remark: Letsencrypt只支持少量域名的情况,比如自己的网站,它会有请求次数限制,另外CA是letsencrypt的,商业用户不适合用。 我们有个HTT...
阅读(62) 评论(0)

GOLANG中time.After释放的问题

原文:https://gocn.io/article/403在谢大群里看到有同学在讨论time.After泄漏的问题,就算时间到了也不会释放,瞬间就惊呆了,忍不住做了试验,结果发现应该没有这么的恐怖的,是有泄漏的风险不过不算是泄漏,先看API的说明:// After waits for the duration to elapse and then sends the current time //...
阅读(381) 评论(0)

Testivus On Test Coverage

原文:点这个链接Testivus On Test Coverage一天早上,一个程序员问大师:我准备要写单元测试了,请问我要达到多少覆盖率呢?大师回答说:不用担心覆盖率了,写出来有效的单元测试就好了。程序员笑了,向大师鞠躬,然后愉快的去干活了。过了一会儿,第二个程序员向大师问了同样的问题。大师指着小米牌智能电饭锅,对程序员问道:我该放多少米呢?程序员迷茫的回答道:我怎么知道呢?这处决于多少人吃饭,他...
阅读(281) 评论(0)

GOLANG使用Context实现传值、超时和取消

原文:https://gocn.io/article/373GO1.7之后,新增了context.Context这个package,实现goroutine的管理。Context基本的用法参考GOLANG使用Context管理关联goroutine。实际上,Context还有个非常重要的作用,就是设置超时。比如,如果我们有个API是这样设计的:type Packet interface { e...
阅读(516) 评论(0)

Fire And Motion:聚焦前进,避免当炮灰

Fire And Motion2002年01月06日,JOEL SPOLSKY,Trello联合创始人,如果大神你不知道Trello是什么,那么你肯定知道Stack Overflow,嗯,我是StackOverflow的CEO。有时候,我就是啥事也没有干出来,啥事也没有干成。和你一样,我每天可是准时按点到公司,到处晃悠晃悠,然后回到我的座位上,每隔几分钟看看邮箱,然后看看微信朋友圈,读读今日头条,有...
阅读(360) 评论(0)

GOLANG宽泛接口在测试中的大用处

原文:https://gocn.io/publish/article/368考虑测试一个函数:func request(ctx context.Context, hc *http.Client, api string) (err error) { var hreq *http.Request if hreq, err = http.NewRequest("GET", api, nil...
阅读(207) 评论(0)

GOLANG测试必须用带堆栈的errors

原文:https://gocn.io/article/366GOLANG测试时,可以用匿名对象填充测试序列,但是如果没有带堆栈的errors,那么会造成出现错误时无法排查。先看测试序列的填充,参考tricks-2015这个文章,怕你翻不了墙,我把内容粘贴过来就是:Anonymous structs: test cases (1/2)These properties enable a nice way...
阅读(197) 评论(0)

GOLANG最容易做测试MOCK

原文:https://gocn.io/article/353测试时,一些底层的库非常难以MOCK,比如HASH摘要算法,怎么MOCK?假设有个函数,是用MD5做摘要:func digest(data []byte, h hash.Hash) ([]byte, error) { if _, err = h.Write(data); err != nil { return nil...
阅读(925) 评论(0)

GOLANG空指针崩溃时堆栈消失和解决方案

原文:https://gocn.io/article/351在错误处理这个文章中,tkk提出了空指针时堆栈消失的问题,看下面的例子:package mainfunc main() { run() // line 4 } func run() { causedPanic() } func causedPanic() { //defer func() {}() // line 1...
阅读(615) 评论(0)

GOLANG错误处理最佳方案

原文:https://gocn.io/article/348ERRORGOLANG的错误很简单的,用error接口,参考golang error handling:if f,err := os.Open("test.txt"); err != nil { return err }实际上如果习惯于C返回错误码,也是可以的,定义一个整形的error:type errorCode int func...
阅读(1162) 评论(0)

函数式组合编程,完胜类体系编程

考虑打印MP4各种BOX的实现,一种是类似类体系,用函数重载来实现: template stringstream& __srs_print_mp4_vector(std::vector& arr, stringstream& ss, int level, bool is_box) { for (size_t i = 0; i < arr.size(); i++)...
阅读(323) 评论(0)

timeval和timespec转换

条件等待时,调用pthread_cond_timedwait,需要从timeval转换为timespec,如果转换错误,会导致条件等待失败返回22,正确的转换方式是:void wait(pthread_cond_t* cond, pthread_mutex_t* lock, uint32_t timeout_ms) { pthread_mutex_lock(lock);...
阅读(397) 评论(0)

GOLANG使用Context管理关联goroutine

原文:https://gocn.io/article/333一般一个业务很少不用到goroutine的,因为很多方法是需要等待的,例如http.Server.ListenAndServe这个就是等待的,除非关闭了Server或Listener,否则是不会返回的。除非是一个API服务器,否则肯定需要另外起goroutine发起其他的服务,而且对于API服务器来说,在http.Handler的处理函数中...
阅读(487) 评论(1)

GOLANG使用嵌入结构实现接口

原文:https://gocn.io/article/332考虑一个Packet接口,一般会返回一个Header,例如:type PacketHeader struct { ID uint32 Timestamp uint64 }type Packet interface { encoding.BinaryMarshaler encoding.BinaryUnmars...
阅读(443) 评论(0)

使用两个context实现CLOSE包的超时等待

原文:https://gocn.io/article/331在UDP中,一般发送者发送包后,如果一定的时间对方没有收到,就需要重传。例如UDP实现握手的过程,如果握手的包,比如RTMFP协议的IHELLO,发送给对方后,如果一定1秒没有收到,就应该重发一次,然后等3秒、6秒、9秒,如果最后没有收到就是超时了。最后一个Close包,发送者不能等待这么长的时间,所以需要设置一个较短的时间做超时退出。一般...
阅读(237) 评论(0)

GOLANG实现超时对象检测的最好理解的方式

原文:https://gocn.io/article/328依赖于心跳的系统,都需要超时检测。比如P2P系统中客户端每隔120秒向数据服务器发送一次数据汇总,服务器就需要维护一个超时时间。比如一个UDP服务器,在和客户端之间创建Session之后,如果没有数据包,一般会有Ping包,说明这个Session是存活的,服务器在发现Session超时后也需要清理。首先,服务器一般需要维护一个列表,以Pee...
阅读(424) 评论(0)

GOLANG接口适配,组合方式的灵活接口演化

原文:https://gocn.io/article/326在OO(Object Oriented)原则中,有一条叫做:优先使用组合,而不是继承。虽然GOLANG并不是OO的语言(没有继承和多态),但是不妨碍GOLANG使用这条原则,而GOLANG的作者就强调过这一点,在GOLANG中是使用组合而非继承来扩展。装逼的说来,继承是一种名词化的语言体系,先进行业务抽象然后设计类体系和继承关系。而组合,强...
阅读(207) 评论(0)

GOLANG简单类型定义,在协议解析的妙用

在协议解析中,经常需要用到转换不同的含义,比如声音的采样率,在FLV中定义和AAC中定义是不同的。在FLV中只有4中采样率5512, 11025, 22050, 44100。而在AAC中有16种采样率96000, 88200, 64000, 48000, 44100, 32000, 24000, 22050, 16000, 12000, 11025, 8000, 7350(还有4个是保留的)。也就...
阅读(437) 评论(0)

GOLANG实现类似C++模板,返回符合类型的对象

原文参考:https://gocn.io/article/319在协议解析中,C++的模板有比较大的作用,有时候我们希望丢弃所有的包,只留下特定类型的包。参考SRS的代码SrsRtmpClient::connect_app2:类型系统的设计, SrsConnectAppResPacket继承自SrsPacket:class SrsPacket; class SrsConnectAppResPacke...
阅读(462) 评论(0)

GOLANG的context和并发模型

GOLANG1.7新增了context,最初这个package是在golang.org/x/net/context中的,后来证实对很多程序都是必须的,就纳入了标准库。对context的介绍是在context,读这个blog之前,要先读pipelines(pipelines提出了使用close(chan)的方式广播退出事件)。一般来说,context是用在request的处理,例如http请求的处理中...
阅读(807) 评论(2)
273条 共14页1 2 3 4 5 ... 下一页 尾页
    个人资料
    • 访问:561124次
    • 积分:8179
    • 等级:
    • 排名:第2638名
    • 原创:250篇
    • 转载:11篇
    • 译文:12篇
    • 评论:279条
    文章分类
    最新评论