网站首页 成长录 “慢生活”不是懒惰,放慢速度不是拖延时间,而是让我们在生活中寻找到平衡。

Goroutine 浅析
2020-06-10 11:45 admin goroutine浅析

首发于:并发还是并行>Concurrencyisaboutdealingwithlotsofthingsatonce.Parallelismis>aboutdoinglotsofthingsatonce.[1]并发的目的在于把当个CPU的利用率使用到最高。并行则需要多核CPU的支持。CSPCommunicatingSe...
阅读全文

Golang 中关于闭包的坑
2020-06-10 11:45 admin golang闭包

所谓闭包是指内层函数引用了外层函数中的变量或称为引用了自由变量的函数,其返回值也是一个函数,了解过的语言中有闭包概念的像`js,python,golang`都类似这样。`python`中的闭包可以嵌套函数,像下面这样:__defmake_adder(addend):defadder(augend):returnauge...
阅读全文

Beego自动化文档(最新版)
2020-06-10 11:45 admin beego最新版

之前写过一篇使用Beego自动化api文档的文章:,随着Beego的更新,1.7.0之后Beego自动化文档的方法也有了更新,最显著的更新是去掉了`docs.go`,使用了`swagger.json`,更加的符合swagger的特点。这篇文章是上一篇文章的修正和补充。环境要求需要安装最新的Go语言环境,安装Go可以参考...
阅读全文

go语言strings库总结
2020-06-10 11:45 admin gostrings

最近由于用go做字符串处理,用到了go的strings库,借此对gostrings库做个总结,将gostrings中所有函数的功能做一个简单的说明,当然,这是一个重复造轮子的过程,因为go语言标准库已经有中文版了。详见:所以写本文主要有以下2个目的,其一,熟悉编程语言字符串处理方法。大多数语言的字符串处理库提供的函数都...
阅读全文

Go 性能优化技巧 2/10
2020-06-10 11:45 admin go技巧

对于一些初学者,自知道Go里面的array以pass-by-value方式传递后,就莫名地引起“恐慌”。外加诸多文章未作说明,就建议用slice代替array,企图避免数据拷贝,提升性能。实际上,此做法有待商榷。某些时候怕会适得其反,倒造成不必要的性能损失。用个简单的示例说明。代码很简单,两个函数分别返回“内容相同”的...
阅读全文

Go 性能优化技巧 3/10
2020-06-10 11:45 admin go技巧

内置map类型是必须的。首先,该类型使用频率很高;其次,可借助runtime实现深层次优化(比如说字符串转换,以及GC扫描等)。可尽管如此,也不意味着万事大吉,依旧有很多需特别注意的地方。1预设容量map会按需扩张,但须付出数据拷贝和重新哈希成本。如有可能,应尽可能预设足够容量空间,避免此类行为发生。从结果看,预设容量...
阅读全文

Go 性能优化技巧 4/10
2020-06-10 11:45 admin go技巧

延迟调用(defer)确实是一种“优雅”机制。可简化代码,并确保即便发生panic依然会被执行。如将panic/recover比作try/except,那么defer似乎可看做finally。如同异常保护被滥用一样,defer被无限制使用的例子比比皆是。只需稍稍了解defer实现机制,就不难理解会有这样的性能差异。编译...
阅读全文

Go 性能优化技巧 5/10
2020-06-10 11:45 admin go技巧

闭包(closure)也是很常见的编码模式,因它隐式携带上下文环境变量,因此可让算法代码变得更加简洁。但任何“便利”和“优雅”的背后,往往都是更复杂的实现机制,无非是语法糖或编译器隐藏了相关细节。最终,这些都会变成额外成本在运行期由CPU、runtime负担。甚至因不合理使用,造成性能问题。用几个代码片段看看可能的麻烦...
阅读全文

Go 性能优化技巧 6/10
2020-06-10 11:45 admin go技巧

Go使用channel实现CSP模型。处理双方仅关注通道和数据本身,无需理会对方身份和数量,以此实现结构性解耦。在各文宣中都有“Don'tcommunicatebysharingmemory,sharememorybycommunicating.”这类说法。但这并非鼓励我们不分场合,教条地使用channel。在我看来,...
阅读全文

Go 性能优化技巧 7/10
2020-06-10 11:45 admin go技巧

接口的用途无需多言。但这并不意味着可在任何场合使用接口,要知道通过接口调用和普通调用存在很大差别。首先,相比静态绑定,动态绑定性能要差很多;其次,运行期需额外开销,比如接口会复制对象,哪怕仅是个指针,也会在堆上增加一个需GC处理的目标。显然,对于压力很大的内部组件之间,用接口有些得不偿失。对比接口调用和普通调用的汇编指...
阅读全文

Go 性能优化技巧 8/10
2020-06-10 11:45 admin go技巧

尽管反射(reflect)存在性能问题,但依然被频繁使用,以弥补静态语言在动态行为上的不足。只是某些时候,我们须对此做些变通,以提升性能。为便于阅读,以下示例均做了最大程度精简。如果是reflect.Type,可将其缓存,避免重复操作耗时。但Value显然不行,因为它和具体对象绑定,内部存储实例指针。换个思路,字段相对...
阅读全文

Go 性能优化技巧 9/10
2020-06-10 11:45 admin go技巧

作为内置类型,通道(channel)从运行时得到很多支持,其自身设计也算得上精巧。但不管怎么说,它本质上依旧是一种队列,当多个goroutine并发操作时,免不了要使用锁。某些时候,这种竞争机制,会导致性能问题。下面是一个简单利用channel收发数据的示例,为便于“准确”测量收发操作性能,我们将makechannel...
阅读全文

Go语言开发环境搭建详解
2020-06-10 11:44 admin go详解

>欢迎扫码关注公众号`flysnow_org`,第一时间看后续文章。觉得有帮助的话,顺手分享到朋友圈吧,感谢支持。前段时间写了好几篇关于Go语言的文章,有入门的Go系统介绍,也有比较深入的网络代理分析实现,读者们看了也给予了很多好评,这里非常感谢。有读者来信(微信公众号消息)说能不能写一篇关于Go语言环境的配置搭建,这...
阅读全文

GO, or not to GO
2020-06-10 11:44 admin go

全世界有上千种程序开发语言,其实自己要发明一种语言也不是很难的事情。但问题是,为什么需要新语言,尤其是通用软件开发语言?一般来说,语言是一种工具,当工具不够用的时候自然会有更新工具甚至换一种工具的需求。按照TIOBE开发语言排名来看,前20种语言已经占据了超过75%的开发量,这些语言在绝大部分场合都是够用了。然而,作为...
阅读全文

Go web server开发学习2
2020-06-10 11:44 admin goweb

*DefaultServeMuxDefaultServeMux在http包使用的时候初始化__varDefaultServeMux=NewServeMux()funcNewServeMux()*ServeMux{return&ServeMux{m:make(map[string]muxEntry)}}http包使用De...
阅读全文
顶部 底部