The Go Memory Model翻译及理解

前言 最近看mit6.824,里面第五节课有推荐看The Go Memory Model这篇文章 网上翻译也有一些,但是还是觉得不合自己口味,而且本身有些地方写的很拗口,不适合人读,命名简单的描述却复杂化了。所以我用自己的理解替换了一下原文的语句。 运行这篇文章的代码的时候记得在main函数加time.Sleep(time.Second),时间由你决定 goroutine 协程 介绍 Go内存模型指定了一种条件,在这种条件下,可以保证在一个goroutine中读取变量可以得到在不同gorouti...阅读全文

简书 2020-11-15 20:32:40 abboo

【golang】nil的理解

最近在油管上面看了一个视频:Understanding nil,挺有意思,这篇文章就对视频做一个归纳总结,代码示例都是来自于视频。nil是什么相信写过Golang的程序员对下面一段代码是非常非常熟悉的了:if err != nil { // do something....} 当出现不等于nil的时候,说明出现某些错误了,需要我们对这个错误进行一些处理,而如果等于nil说明运行正常。那什么是nil呢?查一下词典可以知道,nil的意思是无,或者是零值。零值,zero value,是不是有点熟悉?在...阅读全文

Segmentfault 2020-11-19 15:32:34 去去1002

[译] 添加一个新语句到Golang编译器内部-第二部分

原文链接 这是探讨Go编译器的两部分系列文章中的第二篇。 在第一部分中,我们通过构建定制版本的编译器向Go语言添加了一条新语句。 为此,我们按照此图介绍了编译器的前五个阶段: image.png 在"rewrite AST"阶段,最终将until 降级(lower)到 for;具体来说,在编译器进行SSA转换和代码生成之前,在gc/walk.go中, 已经完成了对until的转换。 在本部分中,我们将尝试另外一种方式--在编译器的SSA和代码生成阶段中处理新增的until语句。 SSA 在gc编...阅读全文

简书 2020-11-15 10:32:48 Leonard_Wang

通过实例深入理解sync.Map的工作原理

注:本文首发于笔者的个人微信公众号”iamtonybai”,是公号付费文章(价格1元)。首发于2020.10.9日,经过一个月收费期,我觉得将其免费分享出来。如果你觉得文章质量不错,欢迎到首发地址付费支持:https://mp.weixin.qq.com/s/rsDC-6paC5zN4sepWd5LqQ 近期在项目考虑在内存中保存从数据库加载的配置数据的方案,初步考虑采用map来保存。Go语言中有两个map,一个是Go语言原生的map类型,而另外一种则是在Go 1.9版本新增到标准库中的sync...阅读全文

Tony Bai 十一月 10, 2020 bigwhite

重度使用Go的“后遗症“,你有吗?

有一种未经证实的说法:Go诞生于C++程序的漫长构建过程中。如果C++编译很快,那么Robert Griesemer、Rob Pike和Ken Thompson这三位大佬也没有闲暇时间一起喝着咖啡并决定是时候设计一门新语言了。的确,Go语言诞生后,其简洁的语法、极速地构建、新颖的并发结构、体验优良的工具链以及完成度不低的标准库吸引了很多C/C++程序员转型成为Gopher并开始重度使用Go,比如鄙人^_^。如果能一直使用Go总也是不错的,但偶尔因项目需要可能还会写一些C/C++代码,这时候很多G...阅读全文

Tony Bai 十一月 5, 2020 bigwhite

谷歌 Chrome 插件神器推荐之谷歌访问助手

谷歌 Chrome 插件神器推荐之科学上网 谷歌 Chrome 插件神器推荐之科学上网 Chrome可以说是全世界最受欢迎的浏览器了,其快速、稳定的性能,简洁的设计以及多平台同步的功能都深受用户的推崇,然而很多人成为他的忠粉还是因为它强大的拓展性! 谷歌浏览器 有许多人安装了谷歌浏览器,但是却用不了谷歌搜索, 今天主要向大家介绍三个我用的比较好的科学上网的谷歌插件。 1.iGG谷歌访问助手 iGG谷歌访问助手 概述 永久免费提供谷歌搜索,gmail,Chrome Store,Android/Go...阅读全文

2020-11-14:手写代码:怎么用数组实现不超过固定大小的队列?

福哥答案2020-11-14: 环形数组即可实现。数组,pull序号,pop序号,长度,容量,需要保存这些信息。 golang代码如下: package main import ( "errors" "fmt" ) /* 怎么用数组实现不超过固定大小的队列? 队列:环形数组 */ func main() { fmt.Println("----------------------") if true { fmt.Println("定长队列测试") stack := NewMyQueue(2) fm...阅读全文

简书 2020-11-14 21:32:39 福大大架构师每日一题

GO和WebSocket,快速开始

WebSocket WebSocket是基于TCP的通讯方式,后面我们简称ws 在HTML5中,使用WebSocket可以跳过HTTP协议进行有状态的通信。 WebSocket传输支持字符串、Blob、ArrayBuffer等。 对于Golang-gorilla来说就是String或[]byte JS&GO Hello WebSocket JavaScript 需要对H5支持较好的游览器才可以正常的进行ws通讯。 if ("WebSocket" in window){ //如果支持那么执行 } ...阅读全文

简书 2020-11-14 21:32:38 孟南知

「推荐系统从0到1」服务发现

奥利给! 前沿 首先谈谈我对推荐系统的引擎和算法的理解。 现在市面上讲起推荐系统,大多都是讲各种算法,讲的天花乱坠,高深莫测,其实很多算法都是大同小异,核心思想是差不多的,只不过实现手段略有差异。而在工业上,各种复杂算法能够落地的,我认为不多,大部分的厂商,运用的算法都是很集中的那一部分算法。 一套好的推荐系统,对于引擎是非常依赖的,实验显示,响应时长与各项指标之间都是有直接关联的,响应时长越长,指标越低。 作为一个朴实的推荐码农,我还是想从基础做起,朴朴实实,脚踏实地,先把引擎部分做好。当然,...阅读全文

简书 2020-11-14 16:32:38 金小锋

[iOS]转发异常信号

背景:项目中有个SDK库(Golang),会抛出异常信号,第三方crash日志记录工具会分析这个信号而造成崩溃,我们做作的就是在三方注册异常监听后,重新注册,覆盖监听,达到避免crash的目的。 @interface TestCrash : NSObject +(void)registerExceptionHandler; @end +(void)registerExceptionHandler { signal(SIGABRT, SignalHandler); signal(SIGILL, S...阅读全文

简书 2020-11-14 12:32:37 暮雨烟疏

你以为只是简单的排序?(一)

一直在犹豫要不要写排序的文章,因为真的烂大街了。可是一旦细看,还真是很多值的思考的地方,所以还是选择记录一下以下完整代码,均可从这里获取https://github.com/Rain-Life/data-struct-by-go/tree/master/sort排序算法效率分析了解如何分析一个排序算法,可以帮助我们在实际工作场景中选择合适的排序算法,比如,如果排序的数据比较少,可以选择冒泡或插入排序,如果排序的数据量较大,选择归并或快速排序,虽然它们两两的时间复杂度是相同的,但是还是有很大的区别...阅读全文

Segmentfault 2020-11-19 15:32:33 书旅

基于亿条数据的内存,redis两种聚合GO计算的实战思考

总结: (1) go 的 map读,写是线程不安全的 (2) sync.map 用空间换时间的思想,适合读多写少的场景,读,写是线程安全,但遍历是线程不安全的,运行几个小时以后,出现性能巨降的情况。刚开始18w条/分,后来1w条/分; (3) orcaman/concurrent-map的思路是把大内存的map划分为若干小内存map (4)后面redis替换内存后,13w条/分,开了四个goroutine image.png 每天亿条的数据量 image.png 背景 数据经过filebeat ...阅读全文

简书 2020-11-13 20:32:43 hugoren

2020-11-13:手写代码:局部最小值问题。数组无序,相邻元素不等。如何求极小值?

福哥答案2020-11-13: 二分法。有时候数组无序,同样可以采用二分法。这道题考察的是全局观,左边下降趋势,右边上升趋势,函数图像呈凹形,必有极小值。中左值和中值呈上升趋势,中值右边可以直接舍弃;中值和中右值呈下降趋势,中值左边可以直接舍弃。 golang代码如下: package class01 import ( "fmt" "testing" ) //局部最小值问题 /* 求其中一个极小值 数组无序,但相邻元素不等 */ //go test -v -test.run TestBSAwes...阅读全文

简书 2020-11-13 20:32:39 福大大架构师每日一题

Go 语言今年 11 岁,何去何从,现状到底如何?

不说不知道,一说下一跳。Go 语言已经开源 11 周年了,感觉是一路高歌,Release History (polarisxu 整理)如下:2011 年 3 月 16 日,Go 语言的第一个稳定版本 r56 发布;2012 年 3 月 28 日,Go 语言的第一个正式版本 Go1 发布,并承诺 1.x 的 兼容性;2013 年 5 月 13 日,Go1.1 正式版才发布。2013 年 12 月 1 日,Go1.2 正式发布;2014 年 6 月 18 日,Go1.3 正式发布;2014 年 12...阅读全文

Segmentfault 2020-11-19 13:32:33 煎鱼

Golang 2.0泛型

官方透露大概在1.17版本会Release。 等待吧。 try catch都无所谓了,没有泛型太难受了。 新的泛型算法是这么写的,大家感兴趣的可以去试试。 package main import ( "fmt" ) // Ordered is a type constraint that matches any ordered type. // An ordered type is one that supports the <, <=, >, and >= operators. type Or...阅读全文

简书 2020-11-13 19:32:38 FredricZhu

Golang 编译文件在另外一台服务器无法执行,错误:libc.so.6: version 'GLIBC_2.15' not found

错误 解决方式:编译电脑的GLIBC版本与运行服务器电脑的版本保持一致,以下为查看GLIBC版本命令 查看软链 ll /lib64/libc.so.6 /lib64/libc.so.6 -> libc-2.17.so 查看依赖 $ ldd 可执行文件名称 linux-vdso.so.1 => (0x00007fff3f9dd000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f7cae56a000) libclntsh.so.11.1 =...阅读全文

简书 2020-11-13 19:32:37 承诺一时的华丽

golang 连接mysql时区问题

使用go-sql-driver来连接mysql数据库,获取的时区默认是UTC +0的,与本地的东八区是有区别,在业务处理中会出现问题,解决方案: 连接dsn时候添加loc=Local参数即可,这样写入的datetime类型就会按照东8区正常显示 样例: url := cfg.User + ":" + cfg.Pwd + "@tcp(" + cfg.Ip + ":" + common.Itoa(cfg.Port) + ")/" + cfg.Database + "?charset=utf8&loc...阅读全文

简书 2020-11-13 19:32:37 hewolf

Swag: cannot find module for path .

Golang项目中集成swagger的时,执行swag命令报错:cannot find module for path .swag init -g $workdir此时确认当前Golang版本,如果版本<= 1.13建议升级golang版本,再次执行即可。 $ go version go version go1.13 darwin/amd64 refer:https://github.com/golang/go/issues/34169参考:https://www.ctolib.com/swag...阅读全文

简书 2020-11-13 16:32:39 取个帅气的昵称华华