golang
文章平均质量分 70
JohnGox
这个作者很懒,什么都没留下…
展开
-
Golang XML 序列化忽略父级元素
在golang中XML序列化时,如果字段使用如下的标记 “a>b>c”,给字段添加omitempty,只能忽略 c 字段,并不能忽略父级元素 b,c。看如下例子:func main() { type Room struct { Name string `xml:"name,attr"` } type Hotel struct { XMLName xml.Name `xml:"hotel"` Name string `xml:原创 2021-12-30 18:53:11 · 745 阅读 · 0 评论 -
从 gopath 升级到 gomod 的实践经验
Go 的版本管理是大家都比较头痛的问题,从 Go 1.11 起,官方引入了 GoModules 来解决版本管理问题。在项目中,我们完成了从 gopath 到 gomod 的版本管理升级,本文主要记录升级到 gomod 的一些经验。现状所有的项目都是使用 GOPATH/src公共库example.libs保存在私有仓库项目中同时引用了同一个包的两个不兼容版本要求支持逐步升级到gomod,gopath模式的项目可以继续正常使用公共库example.libs需要同时支持gopath和gomod原创 2021-04-06 16:52:34 · 1056 阅读 · 0 评论 -
为什么array可以作为map key?而slice不可以
在golang中,什么类型才可以作为map key,在golang官方博客中找到以下说明:As mentioned earlier, map keys may be of any type that is comparable. The language spec defines this precisely, but in short, comparable types are boolean, numeric, string, pointer, channel, and interface type原创 2021-04-02 12:52:11 · 1905 阅读 · 0 评论 -
Golang中的达夫设备(Duff‘s device)
什么是Duff’s device设备达夫设备是串行复制的一种优化实现,主要是利用汇编语言编程的优化思路,该思路要求“在复制时最小化判断数和分支数”。1983年11月,当时在影视公司工作的Tom Duff,为了提高动画实时程序的速度发明这种实现。我们来看看达夫设备实现的示例代码:send(to, from, count)register short *to, *from;register count;{ register n=(count+7)/8; switch(count%8){原创 2020-10-26 21:03:32 · 532 阅读 · 0 评论 -
限流算法的golang实现
限流算法常见的限流算法有漏桶算法(Leaky Bucket),令牌桶算法(Token Bucket)漏桶算法(Leaky Bucket)原理类似于漏桶的进水和出水,流入漏桶的水流大于流出漏桶的水流时,漏桶就会慢慢变满,水满后就会溢出。请求访问服务,当突发请求大于服务承受数量时,服务器拒绝访问,服务器以一定的速度响应请求。令牌桶算法(Token Bucket)和漏桶算法不同的是,令...原创 2019-10-23 18:51:31 · 683 阅读 · 0 评论 -
访问控制模型(DAC,MAC,RBAC,ABAC)
访问控制模型项目中需要加入访问控制,对访问控制模型做了一些调研, 本文主要是介绍一些常用的访问控制模型。基本要素访问控制模型包括三个要素,即:主体(Subject) 指主动对其它实体施加动作的实体客体(Object) 是被动接受其他实体访问的实体控制策略(Policy)为主体对客体的操作行为和约束条件安全策略主体、客体,控制策略三者需要满足的基本安全策略:最小...原创 2019-09-12 19:22:29 · 30453 阅读 · 1 评论 -
golang json.Marshal 什么情况下会报错?
func Marshal(v interface{}) ([]byte, error)我们一般会这样使用 b, err := json.Marshal(data) ,也就是应该检查Marshal返回的错误,但很少遇到这个函数报错,那么什么情况下json.Marshal会返回错误。通过官方文档,找到了以下的说明:Channel, complex, and function values cannot be encoded in JSON. Attempting to encode such a va.原创 2021-04-01 15:08:01 · 6124 阅读 · 0 评论 -
golang避坑之设置http头和状态码
golang中设置http头用 w.Header().Set() ,设置状态码用 ***w.WriteHeader()***, 设置body用 ***w.Write()***。但他们的调用顺序是有要求的。正确的调用顺序如下:func HandleHello(w http.ResponseWriter, r *http.Request) { w.Header().Set("X-name","john") w.WriteHeader(http.StatusOK) w.Write([]byte("hell原创 2021-03-31 19:57:17 · 3436 阅读 · 0 评论 -
Golang中panic和defer的字符串打印顺序
环境 Ubuntu 16.04 Goland 2018.1.1 go1.10.1 linux/amd64题目package mainimport ( "fmt")func main(){ defer_call()}func defer_call() { defer func() { fmt.Println(&quot原创 2018-04-28 18:20:41 · 2995 阅读 · 0 评论