Go语言的%d,%p,%v等占位符的使用

1.占位符分别代表了什么? golang 的fmt 包实现了格式化I/O函数,类似于C的 printf 和 scanf。 定义示例类型和变量 1 2 3 4 5 type Human struct { Name string } var people = Human{Name:"zhangsan"} 2 普通占位符 占位符 说明 举例 输出 %v 相应值的默认格式。 Printf("%v", people) {zhangsan} %+v 打印结构体时,会添加字段名 Printf("%+v", people) {Name:zhangsan} %#v 相应值的Go语法表示 Printf("#v", people) main.Human{Name:“zhangsan”} %T 相应值的类型的Go语法……

阅读全文

互斥锁

互斥锁 用一个互斥锁来在Go协程间安全的访问数据 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 package main import ( "fmt" "math/rand" "runtime" "sync" "sync/atomic" "time" ) func main() { var state = make(map[int]int) var mutex = &sync.Mutex{} var ops int64 = 0 for r := 0; r < 100; r++ { // 运行100个go协程来重复读取state go func() { total := 0 for { key……

阅读全文

关于锁的一些注意事项

尽量减少锁的持有时间 细化锁的粒度。通过细化锁的粒度来减少锁的持有时间以及避免在持有锁操作的时候做各种耗时的操作。 不要在持有锁的时候做 IO 操作。尽量只通过持有锁来保护 IO 操作需要的资源而不是 IO 操作本身: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 func doSomething() { m.Lock() item := ... http.Get() // 各种耗时的 IO 操作 m.Unlock() } // 改为 func doSomething() { m.Lock()……

阅读全文

学习一下sync.Cond的用法

使用场景: 我需要完成一项任务,但是这项任务需要满足一定条件才可以执行,否则我就等着。 那我可以怎么获取这个条件呢?一种是循环去获取,一种是条件满足的时候通知我就可以了。显然第二种效率高很多。 通知的方式的话,golang里面通知可以用channel的方式 1 2 3 4 5 6 7 var mail = make(chan string) go func() {……

阅读全文

火锅蘸碟

厨师长分享48款火锅蘸碟,不管来自哪里,总有一款适合您 - 哔哩哔哩 (bilibili.com) 一、味碟 1、蒜泥油碟 蒜末、香菜末、葱末、香油、盐 2、北方涮肉碟 熟花生沫、芝麻酱、韭菜花酱、腐乳、葱末 3、麻酱味碟 芝麻酱、腐乳、韭菜花酱、蚝油、白糖、熟花生末、蒜末、香菜末、葱末、香油 4、蒜香味碟 金蒜(油炸蒜)、蚝油……

阅读全文

分布式消息队列

一、消息队列的演进 分布式消息队列中间件是大型分布式系统中常见的中间件。消息队列主要用来解决应用耦合、异步消息、流量削峰等问题,具有高性能、高可用、可伸缩和最终一致性等特点。消息队列已经逐渐成为企业应用系统内部通信的核心手段,使用较多的消息队列有RabbitMQ、RocketMQ、……

阅读全文

Go实现不同goroutine之间的阻塞

Go 程序从 main 包的 main() 函数开始,在程序启动时,Go 程序就会为 main() 函数创建一个默认的 goroutine。 所有 goroutine 在 main() 函数结束时会一同结束。 若在启用的goroutine中不使用WaitGroup的话会因为main函数已执行完,阻塞的函数与发送信号的函数会一同结束,不能真正实现阻塞的功能。 因此可……

阅读全文

Go的继承与重写以及结构体嵌套

1. 首先声明两个基础结构体(其他语言的基类吧:)) 1 2 3 4 5 6 7 type Animal struct { Name string } type Old struct { Age int } 并给Animal类增加一个方法Walk() 1 2 3 func (a *Animal) Walk() { fmt.Println("Animal Walk") } 2. 让People类嵌套(继承)上面的Animal和Old类 这时可以有两种匿名嵌套(继承)方式 嵌套结构体指针 嵌套结构体 1 2 3 4 5……

阅读全文

Usehugo

如何使用hugo 新建文章 1 2 3 hugo new posts/xxx.md 发布 1 hugo -d /target/dir……

阅读全文