
golang
文章平均质量分 67
蓝贝壳壳
热爱软件事业 崇尚自由 一个不愿成为码农的码农 多年苦心探索和参悟 希望解放全天下苦逼的码农
展开
-
让业务代码更优雅的方法——类型工厂
最近碰到一个需求,用结构化数据结构(如JSON)构造一个表达式。已设计数据结构如下:// Value represents a value with given typetype Value struct { // type of this value: // number|string|boolean|object|array|expr Type string `json:"type"` Data json.RawMessage `json:"data"` // specific原创 2021-06-14 23:45:05 · 238 阅读 · 0 评论 -
重新认识Go的interface
实现了通用的JSON,YAML,XML相互转换的方法。Go interface是一种特殊的Go类型,不允许为该类型增加methodinterface{} 接收为赋值的 interface{}作为输入,得到的还是未赋值的interface{}<nil>interface{} 可赋值为 *interface,得到的是reflect.Ptr类型,只值为interface类型,可用于反序列化为任意的Go数据结构原创 2021-06-12 23:41:42 · 352 阅读 · 0 评论 -
Go语言编程规范
自定义Go编程规范原创 2021-05-17 21:19:18 · 446 阅读 · 0 评论 -
在Go中用json序列化未知类型的巧妙方法
我们知道Go的json库可以方便的在json字符串和go类型之间相互转换。然而现实中经常遇到这样的需求,需要序列化的object类型是“未知”的,需要根据某个固定字段来判断用什么类型来序列化。如如下json数据表示animal数组的话,实际上所有的attr字段的具体类型是需要根据kind字段的值来确定的。这种数据表示在像javascript这样的动态语言表达起来很自然,但在go这样的静态类型语言里,描述起来就不是那么容易了。原创 2021-05-07 23:53:06 · 1668 阅读 · 6 评论 -
关于代码可读可维护问题的一些浅见
关于程序可读可维护问题的一些浅见,从在go语言中如何优雅的实现枚举映射,到理想编程语言的表达力及代码执行时机的一些思考。原创 2021-05-03 23:41:44 · 664 阅读 · 5 评论 -
GO语言带调试日志的锁
死锁在多线程中经常遇到,有时候看代码很难发现问题,带调试日志的锁,准确记录锁的周期,等待时间,读写竞争情况,Lock、Unlock是否匹配,方便找出死锁发生的各种原因https://github.com/vipally/glab/blob/master/lab22/debug_lock.gopackage debuglockimport ( "bytes" "fmt" "runtime" "strconv" "sync" "sync/atomic" "time")const原创 2020-09-17 00:14:40 · 175 阅读 · 0 评论 -
关于实时TopN排名算法的思考
关于实时TopN排名算法的思考0.引言1.TopN实时排名算法1.1 一个失败的方案1.2 现成的数据结构?1.3 合理的方案Reference0.引言实时排名是网络应用中常见的功能。根据需求不同,大概可以分为以下几类:i. TopN排名ii. 全数据排名作为通用需求,我们必须做如下假设:a. 用户基数较大b. 排名数据更新较频繁c. 用于排序的数据(score)范围不确定...原创 2018-11-21 20:49:38 · 3839 阅读 · 2 评论 -
golang中interface的一些语法缺陷的改进
GO语言有一个独门秘技:interface,是大师们对OOP的经典诠释,是对传统OOP思维的一个巧妙颠覆。既优雅地实现运行时多态,又不需要像C++那样显式申明,完美的解除了类型实现跟接口调用之间的耦合。Go语言的主要设计者之一Russ Cos曾经说过,如果只能选择一个Go语言的特性移植到其他语言中,他会选择接口。可见接口在GO中的地位,及其对GO这门语言所带来的活力。Russ Cos:...原创 2018-08-09 00:14:23 · 690 阅读 · 0 评论 -
一直被错爱的C/C++语法
最近在为dex-理想中的编程语言模型(https://github.com/dexlang/dex)整理一些资料发现C/C++的函数申明语法真的很奇怪:golang已经在官方blog详细说明为什么要改掉C的函数声明语法https://blog.golang.org/gos-declaration-syntax大意如下:C的函数声明语法:retType funcName(p...原创 2018-08-06 00:03:41 · 285 阅读 · 0 评论 -
Golang仿函数实现方法及效率测试
在C++ STL中,仿函数(functors)被大量用作改变算法的内在行为。 由于Golang不支持泛型,所以没法像C++那样灵活的使用仿函数。但是Golang有interface,函数是”一等公民”(可赋值给指定类型变量),因此,在Golang中实际上也可以像仿函数那样,通过具有相同参数和返回值的方法声明的不同对象,实现行为的差异化。 下面,详细讲述,Golang中的实现方法: 以下通过不同原创 2016-10-30 22:35:38 · 1468 阅读 · 0 评论 -
Golang黑科技之——string与[]byte转换
我们知道,相对于C语言,golang是类型安全的语言。但是安全的代价就是性能的妥协。 下面我们通过Golang中的“黑科技”来一窥Golang不想让我们看到的“秘密”——string的底层数据。 通过reflect包,我们可以知道,在Golang底层,string和slice其实都是struct:type SliceHeader struct { Data uintptr Len原创 2016-10-27 00:09:19 · 38376 阅读 · 0 评论 -
不要让递归函数fuck大家的cpu
递归算法是大学计算机课程里面经常会讲到的编程方法,因为采用这种方法写出来 的代码清晰易懂。但是,在大多数编程规范里面,会严令禁止使用递归函数,原因下面来详细说明。首先,由于逻辑错误,由直接或间接递归,造成递归调用无法结束(死递归),最后肯定会收到一个"stack overflow"的宕机信息。就暂且不论了。下面要详细讨论的是,简单的递归代码是如何fuck计算机运行时系统的。这里用计算Fibonacc原创 2016-10-13 22:50:30 · 2332 阅读 · 0 评论 -
cmdline-扩展golang std.flag
基于golang 1.6.2 flag 源码做了一个扩展 使命令行帮助信息更完整更清晰,更易于使用 源码地址: http://github.com/vipally/cmdline//Ally(vipally@gmail.com) modify from std.flag version 1.6.2 //1. Add LogicName and Required field for every原创 2016-08-16 23:13:51 · 646 阅读 · 0 评论 -
golang常用编程组件效率统计
序号运行项耗时每次1go empty_loop002go empty_func003go with ret004no_sync_rand005spin lock rand31.25ms原创 2014-11-06 00:59:49 · 1894 阅读 · 0 评论 -
[Golang]golang中自动锁的实现
golang作为原生支持多线程的语言,为了实现线程安全的package,经常需要对全局变量自动加锁,以便安全的访问全局变量。废话不多说,直接上代码:package mainimport ( "sync" "fmt")type AutoLock struct { obj interface{} lock sy原创 2014-11-09 19:55:36 · 1322 阅读 · 0 评论 -
[Golang]如何在golang程序中自动获取编译时间的方法
在程序发布之后,经常需要识别程序的版本号,来确定一些问题是否因为程序未更新造成的,其中通过在程序启动日志中输出编译时间是最有效方法。在golang中没有C语言__FILE__,__LINE__,__DATE__,__TIME__这些好用的编译期常量给我们使用,好在golang提供了强大的cgo在go代码中嵌入C代码的方法,可以实现这个需求。废话不多说,直接上代码:package ma原创 2014-11-09 19:55:33 · 2462 阅读 · 0 评论 -
[golang]从golang中的Slice和strin…
type SliceHeader struct { Data uintptr Len int Cap int}type StringHeader struct { Data uintptr Len int}以上数据结构来源于package reflect有原创 2014-11-09 19:55:46 · 402 阅读 · 0 评论 -
[golang]golang reflect详细用法整理
本博客原创博文版权所有 @Allyvipally@gmail.com仅供交流学习使用用于商业用途请联系原作者 转载请注明出处:http://blog.sina.com.cn/ally2014 最近在尝试用Go写一些东西,发现Go不支持泛型确实是一件比较蛋疼的事,同样功能的一个类,只有底层数据结构有一点点差异,需要实现N遍。特别像我这种在C++世界挣扎也纠结了很多年,用惯了模板编程思想原创 2014-11-09 19:55:51 · 16508 阅读 · 0 评论 -
[golang]让golang支持泛型编程的一种方案
本博客原创博文版权所有 @Allyvipally@gmail.com仅供交流学习使用用于商业用途请联系原作者 转载请注明出处:http://blog.sina.com.cn/ally2014总所周知,golang现在不支持泛型编程,对于习惯了C++泛型编程思想的程序员来说无疑是一个硬伤。虽然golang interface{}多少可以满足一些泛型需求,但是无论在效率和编程手法上,都原创 2014-11-09 19:55:54 · 3127 阅读 · 0 评论