自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(13)
  • 收藏
  • 关注

原创 谈谈自己对GO的RWMutex的理解

RWMutex核心还是基于Mutex的,如果想了解Mutex的话可以看一下我上一篇写的Mutex的文章RWMutex的特性就是支持并发读。适用于读多写少的场景。RWMutex的定义type RWMutex struct { w Mutex // 互斥锁 writerSem uint32 // 写锁用的信号量 readerSem uint32 // 读锁用的信号量 readerCount int32 // 当前正在执行读操作的goroutine数量 read.

2020-07-25 13:38:59 265

原创 谈谈自己对GO的Mutex的理解

目前GO已经更新到了1.14的版本咱们一般人如果直接去看mutex的源码的话,其实是比较难理解为什么写成了现在这个样子,尤其是加锁里面的各种逻辑判断太多了,各种位运算一脸懵逼,其实我们只要掌握它最初的设计思想,那么后面新增的逻辑,理解起来都很简单了。Mutex最初版本Mutex第一版代码加上注释不过才109行。非常精简,下面介绍一下我对第一版Mutex源码的理解// Mutex有state和sema两个成员变量,这一点是在1.14没有变化的// 其中 state 字段代表当前锁的状态,sema是控

2020-07-20 00:11:37 178

原创 go浮点数转字符串保留小数点后N位解决办法

最近在项目中碰到很多次float转string,同时要求保留小数点后几位,并且去掉小数点后0的场景虽然问题很简单,但是隔了挺久没处理这种场景就有些生疏了,自己也搜了一下,很多回答都不太满意。这里贴一下自己的做法,如果有更好的解决办法的话,还请多多指教// 主要逻辑就是先乘,trunc之后再除回去,就达到了保留N位小数的效果func FormatFloat(num float64, decimal int) string { // 默认乘1 d := float64(1) if decima

2020-05-08 21:18:50 2276

原创 Go for range常见的坑

在日常开发中,for range肯定是经常用到的,下面我整理了一些自己平常会遇到的坑首先第一个肯定是遍历slice的坑了func main() { arr := []int{1, 2, 3} newArr := []*int{} for _, v := range arr { newArr = append(newArr, &v) } for _, v := range ...

2020-03-28 17:16:43 1444 1

原创 Go防缓存击穿——singleflight

我们在开发时,有时会碰到一个接口的访问量突然上升,导致服务响应延迟或者宕机的情况。这时,除了利用缓存之外,也可以用到singlefilght来解决,下面是一个简单的示例package mainimport ( "fmt" "sync" "sync/atomic" "time" "golang.org/x/sync/singleflight")func main() { g...

2020-03-08 17:16:22 281

原创 Go sync.Once介绍

go中sync.Once也是一个工作中会用到的一个类型,它是开箱即用的var once sync.Onceonce.Do(func(){ fmt.Println("do once")})只要声明改类型的once变量,就可以直接使用它的Do方法,Do方法的参数是一个无参数,无返回的函数。它有一个特性,就是不管调用Do方法多少次,里面的函数只会执行一次。我们可以看下它的实现源码,非常精...

2020-02-29 19:20:08 105

原创 Go Sync.Pool作用及遇到的坑

Go版本1.13.1Go中有sync.Pool类型,我们可以把它理解成存放临时值的容器,之所以加上“临时”两个字,是因为它会在GC过程的STW步骤被清理。sync.Pool类型使用前可以给它的New字段赋值,New字段类型是func() interface{},一个函数类型,该函数一般在池内为空的时候才会调用sync.Pool有两个公开的方法,一个Put,一个Get,作用看函数名就知道了G...

2020-02-28 10:23:56 681

原创 Go控制并发数量的几种方式

因为go语言层面支持并发,所以面试中经常会问到并发的问题,比如说控制go并发数量的方式有哪些?下面是我个人整理的两个例子,如果有不对的地方请轻喷。func waitGroup() { count := 10 wg := sync.WaitGroup{} for i := 0; i < count; i++ { wg.Add(1) go func(j int) { f...

2020-02-27 16:41:20 1195 1

原创 Go关键字defer的特性

Go里面,流程控制语句中有一个defer的关键字,翻译过来就是延迟的意思。下面用代码说话。func deferFunc() { defer fmt.Println("后打印") fmt.Println("先打印")}defer在函数执行完毕之后,才会执行,所以,我们经常在释放资源或异常处理等需要收尾的场景下会用到defer。不过defer也有一些“坑”,大家需要注意一下。func...

2020-02-26 14:54:10 96

原创 Go与用户交互demo

大学里大家应该基本上都写过一些和控制台进行交互的课后作业,下面是一个go版本的简单交互程序。package mainimport ( "bufio" "fmt" "os")func main() { in := bufio.NewReader(os.Stdin) // 声明并初始化读取器 fmt.Println("What is your name?") input, e...

2020-02-25 13:28:54 186

原创 第一个Go程序

学习一门新的编程语言,当然躲不过hello world了。下面是go版本的hello worldpackage main // 声明自己属于main包import "fmt" // 导入标准库代码包fmt// 入口函数,也称主函数func main() { fmt.Println("Hello World") // 打印Hello World}goland可以直接点run...

2020-02-24 15:13:52 109

原创 bootstrap底部导航栏固定

bootstrap底部导航栏固定https://segmentfault.com/a/1190000002886158 文章链接自己写的一个demo<style type="text/css"> .footer { border-top: 1px solid #e5e5e5; color: #777; padding: 0px 0px 15px

2017-07-06 16:22:59 2874

原创 mark一下linux按日期生成log文件

split.sh文件current_date=`date -d "-1 day" "+%Y%m%d"` split -b 200m -d -a 4 ~/test.log ~/test_${current_date}_cat /dev/null > ~/test.log再写一个定时任务 crontab -e0 0 * * * sh /split.sh保存

2017-05-08 17:11:32 2470

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除