使用golang的channel实现订阅-发布模式
原文地址:这里,省略了一些非重点片段。
先定义一个结构体Pubsub
,客户端可以使用它来订阅、发布主题:
type Pubsub struct {
mu sync.RWMutex
subs map[string][]chan string
}
原文地址:这里,省略了一些非重点片段。
先定义一个结构体Pubsub
,客户端可以使用它来订阅、发布主题:
type Pubsub struct {
mu sync.RWMutex
subs map[string][]chan string
}
断断续续写博客居然有8年时间了啊……
5年前,博客从wordpress
迁移到了hexo
+github
静态页面,用着不错之后就一直懒得折腾。但五一假期想写博客发现安装nodejs
和hexo3
版本怎么也搞不定,看报错提示似乎是某些依赖库已经不支持老版本了,干脆一不做二不休整体替换成hugo
+Mainroad
主题。要不电脑里又得装python又得装golang还得装nodejs,也是麻烦。
大多数情况下,下划线_
都用于忽略函数返回值的情况。最近查看authboss
这个开源库的代码时,发现这样一种用法:
struct User {
...
}
var (
assertUser = &User{}
assertStorer = &MemStorer{}
_ authboss.User = assertUser
_ authboss.AuthableUser = assertUser
)
原文,向原作者表示感谢。这里省略了一些无关的介绍说明以及过于简单的说明,直接看代码就懂了。
在大多数语言中你可以随便放置花括号的位置,但go语言不一样,你可以理解为为go会自动注入分号(automatic semicolon injection):
错误代码:
package main
import "fmt"
func main()
{ //error, can't have the opening brace on a separate line
fmt.Println("hello there!")
}
编译错误:
/tmp/sandbox826898458/main.go:6: syntax error: unexpected semicolon or newline before {
正确代码:
package main
import "fmt"
func main() {
fmt.Println("works!")
}
原文,省略了一些无关的内容。
如果你搜到这篇文章,那么什么是gin以及casbin应该不用过多解释了。
很久之前发现一个现象,在生产环境中配置了保留内存reserved_host_memory_mb
以及 没配置 内存超分比ram_allocation_ratio
的情况下,虚拟机使用的内存居然已经快将物理内存耗尽了。
比如物理机内存300G,方便举例忽略掉一些系统占用,当设置了reserved_host_memory_mb
为20G,那么理论上所有虚拟机最大占用内存量为280G,而查看居然已经使用了290G的内存,还是在虚拟机并没有将各自申请的内存全部使用掉的情况下(比如申请一台4G的虚拟机,但物理机操作系统层面并没有分配4G给对应的进程,除非虚拟机内部把内存占满)。
单单就nova而言,如果在集群启动时就指定了保留内存大小和超分比为1的话,是不应该出现上述情形的。除非后期对这2个参数进行过修改,但由于年代久远已经没法追溯,这也就成了一桩悬案。
不过在追踪这个问题的过程中,顺便也学习了下主机热迁移的过程,这里的代码是 N版 。