golang 定时器mycron

Golang 实现游戏定时器 刚开始学习golang,发现Go没有游戏里定时器功能,有个cron库实现了golang版的cron功能。 但是里面用了是sort全排序,在游戏里,通常是存在数万个定时器,采用排序算法效率较低, 根据其实现思路,将其改成最小堆实现,同时去掉了一些游戏定时器不需要的内容。 其使用如下: // 创建定时器 c := cron.New() // 启动定时器 c.Start() // 停止定时器 c.Stop() // 延迟调用函数 ...阅读全文

Go语言中文网 2019-11-21 16:14:32 juine

Alpine 的 CGO 问题

Golang 很棒,静态编译十分方便。但是,它也不是 100% 静态编译的,因为它需要依赖glibc ( 标准C运行库 )。 而 Docker 最常用的 Apline 镜像,使用的是 musl 库,并不能愉快的运行 Go 程序 网上大部分教程都是教你,CGO_ENABLED=0 go build -a -installsuffix cgo,使用纯 Go 编译,不用 CGO 链接 glibc ,问题就可以解决了。 但是最麻烦的问题是,你需要引入 C/C++ 库的时候,你并不能禁用 CGO 。 幸好...阅读全文

2020 年,你学的编程语言价值多少?

编程语言是人们指导或控制机器的工具,其开发目的在于让操控机器的过程更加简单和顺畅。正因如此,数百种编程语言应运而生。然而,它们的命运却各不相同。一些语言已不复使用,或将在未来几年淘汰。相应地,一些语言将会被充分使用,还有一些崭新的编程语言正在逐渐被人们所接受。本文选取真实可信的调查、统计数据、搜索结果以及薪资等数据,预测 2020 年编程语言的发展趋势。这篇文章将帮助初学者选择适合自己的入门语言,并指导资深人士在切换语言和继续使用当前语言之间作出选择。 我通过两个表格总结了过去五年间编程语言的潮...阅读全文

为什么区块链是不可篡改的

区块链的数据结构是由包含事务信息的块按远近顺序排列的。块按远近顺序在这个链中链接,每个块都指向前面的块。 区块链通常被视为一个垂直堆栈,第一个块是堆栈底部的第一个块,然后将每个块放在前一个块的顶部。使用堆栈将块依次堆叠的概念可视化之后,我们可以使用一些术语,如“高度”来表示块与第一个块之间的距离;和“top”或“top”表示新添加的块。 每个块头生成一个SHA256加密散列来生成散列值。使用这个散列值,可以标识区块链中相应的块。同时,每个块可以通过其块头的“父块哈希值”字段引用前一个块(父块)。...阅读全文

Segmentfault 2019-11-21 16:02:41 真是很秃ran

认识 Go 语言中的数组

数组是具有相同唯一类型的一组已编号且长度固定的数据项序列。 声明方式 在 Go 语言中,数组的声明方式为 var identifier [len]type。 声明时没有指定数组的初始化值,因此所有的元素都会被自动初始化为默认值 0。 // 声明一个数组 var a1 [5]int 复制代码Go 语言中的数组是值类型,因此还可以用 new 来创建: var a2 = new([5]int) 复制代码new 返回类型的指针,因此 a1 与 a2 的区别在于:a1 的类型为 [5]int,a2 的类型...阅读全文

掘金 2019年11月21日 江不知

Go接口之nil != nil

本文来自“灰子学技术”,原文链接如下所示:https://mp.weixin.qq.com/s/ZBd1UcIJFk_DonkxVNgERA一、引出话题:在开始这个话题之前,我们先看一段代码以及其输出结果,代码如下所示: Output: 从上面的输出结果来看,GetA()返回的类型为*A就算赋值为nil,也不等于nil。看到这里笔者觉得很奇怪,明明是GetA()返回值是nil,为什么nil的判断条件是false呢?二、原因分析:在研究了interface之后,笔者发现了真相,原来Go语言中的in...阅读全文

【TiDB@丰巢】支付平台的迁移之旅

因为本文是我第一次发表在 丰巢技术团队 公众号上,所以在简书上发表只能算是转载。丰巢第一次在生产环境实际使用TiDB,是在2018年,其场景是每天产生一亿条以上数据的推送平台,当时我们还发了一篇文章,被PingCAP官方收录:TiDB at 丰巢:尝鲜分布式数据库。这次,因为实际的项目需要,我们选择了QPS和数据一致性要求更高的支付平台,作为第二个迁移到TiDB上的项目。由于丰巢的所有支付,都会通过该平台产生,所以其稳定性和性能,都是重中之重了,而这次的迁移之旅,也就特别的漫长和曲折。1. 支付...阅读全文

MySQL如何控制用户输错密码尝试次数?

目录 生产环境MySQL死锁如何监控及如何减少死锁发生的概率 MongoDB有哪些优秀特性及适合的场景是什么 GO语言对比其他的编程语言有何优势?实际生产环境如何取舍? 一个大事务,有很多更新,现在被回滚了,但是又着急关机重启,怎么办才好? 如何降低UPDATE/DELETE时WHERE条件写错,或者压根没写WHERE条件带来的影响 MySQL如何控制用户输错密码尝试次数? 一、生产环境MySQL死锁如何监控及如何减少死锁发生的概率 首先,死锁并不是"锁死",死锁是由于两个或两个以上会话锁等待产...阅读全文

Segmentfault 2019-11-21 16:02:40 吕青珊

Go接口之nil != nil

本文来自“灰子学技术”,原文链接如下所示:https://mp.weixin.qq.com/s/ZBd1UcIJFk_DonkxVNgERA一、引出话题:在开始这个话题之前,我们先看一段代码以及其输出结果,代码如下所示:​Output: ​从上面的输出结果来看,GetA()返回的类型为*A就算赋值为nil,也不等于nil。看到这里笔者觉得很奇怪,明明是GetA()返回值是nil,为什么nil的判断条件是false呢?二、原因分析:在研究了interface之后,笔者发现了真相,原来Go语言中的i...阅读全文

Go语言中文网 2019-11-21 09:18:36 ZhDavis

企业级Android应用架构设计与开发

​企业级Android应用架构设计与开发Android初中级岗位竞争激烈,中高级岗位却供不应求,差别在哪里?架构能力!大厂招聘中,架构能力已是必备要求。本课程以企业级Android App的架构设计与功能开发,带你初探Android组件化架构、实战各类通用组件,学会构建高扩展性、高可靠性、高可维护性的Android工程,掌握一线互联网公司的工程架构与管理方式适合人群想要晋升为Android中高级的开发者想要获得架构能力的Android开发人员技术储备要求Android基础知识掌握Java语言有设...阅读全文

Go语言中文网 2019-11-21 03:37:13 fengwomei

玩转算法系列--图论精讲 面试升职必备(Java版)

​玩转算法系列--图论精讲 面试升职必备(Java版)图论算法是所有计算机专业的同学必学的基础知识;也是在算法,数据结构,离散数学等领域的重要内容;是面试,升职,计算机专业考研,考博的必考内容;更是计算机网络,编译原理,社交网络算法等领域的基础。但是,由于图论算法本身的复杂性和抽象性,让大多数同学头疼不已。在这个课程中,bobo老师将用其独到的问题讲解方式,庖丁解牛,深入浅出,让大家在这个课程中,真正地玩转图论算法。适合人群准备大厂面试的同学;准备竞赛, 考研的同学;对计算机基础算法感兴趣, 渴...阅读全文

Go语言中文网 2019-11-21 03:34:45 taiyangneng

Mac下安装golang

前言:越来越多人开始走学习golang之路,包括我身边的一些技术同事给自己“充电”新技术,能在未来工作中更好的生存发展。个人使用Mac环境,下面大概简述一安装过程:一、准备工作官网下载安装包:备注:目前最新稳定版本是v1.9开发工具包又分为安装版和压缩版。安装版是Mac和Windows特有的,他们的名字类似于:go1.9.darwin-amd64.pkggo1.9.windows-386.msigo1.9.windows-amd64.msi安装版,有点傻瓜式安装,环境路径都默认好,操作起来比较简...阅读全文

浅谈 CI/CD for kubernetes

生产环境如果准备上 kubernetes,那么必然绕不开如何高效进行 CI/CD 集成的话题。本文拟探讨常见的一些流程和方法,仅供参考。 最常见的 kubernetes 上的 app 发布方式 kubectl apply -f app.yaml kubectl apply -k ./app helm template <app-name> ./app --set vaules.tag.name=tag -n <namespace> > app.yaml && kubectl apply -f a...阅读全文

golang调试工具Delve

Devle是一个非常棒的golang 调试工具,支持多种调试方式,直接运行调试,或者attach到一个正在运行中的golang程序,进行调试。 线上golang服务出现问题时,Devle是必不少的在线调试工具,如果使用docker,也可以把Devle打进docker镜像里,调试代码。 安装Devle 安装Devle非常简单,直接运行go get 即可: go get -u github.com/derekparker/delve/cmd/dlv 如果你的go版本为1.5请先设置环境变量GO15V...阅读全文

51CTO博客 2019-11-20 14:50:03 阿泽Aze

golang rabbitmq的使用(五)

先说一个实际的业务场景:Client端有一个请求需要进行耗时处理或者查询,这个处理在Server端做。Server 端处理完后通知给请求的Client端。这种场景可以称之为RPC(Remote Procedure Call) 有两个点说明一下: <1>Client端发送请求给Server端可以简单定义一个Queue。Client作为Producer发布消息,Server端作为Cosumer消费消息 <2>Server端处理完耗时处理后需要将处理结果返回给请求的客户端。 可以在Client声明一个...阅读全文

Segmentfault 2019-11-21 16:02:40 麦穗儿

Go 中 recover 与 panic 区别

概念panic 与 recover 是 Go 的两个内置函数,这两个内置函数用于处理 Go 运行时的错误。 panic用于主动抛出错误, recover 用来捕获panic 抛出的错误。 func main() { //捕获 异常 defer func() { if p := recover(); p != nil { fmt.Printf("panic recover! p: %v", p) //类型判断 str, ok := p.(string) if ok { err := errors....阅读全文

Segmentfault 2019-11-21 16:02:39 风云

从go的channel谈起

先来温故一下channel的概念: Channels are a typed conduit through which you can send and receive values with the channel operator, <-. 一种管道类型,通过<-操作符接收或发送数据,我们通过一个实例来了解一下管道的特性 启动两个线程, 一个输出 1,3,5,7…99, 另一个输出 2,4,6,8…100 最后 STDOUT 中按序输出 1,2,3,4,5…100 初看一下,很容易想到要用...阅读全文

go mod使用踩坑

尝试使用了go mod去管理包,按照官方的文档指引https://blog.golang.org/using-go-modules进行实践。 整个过程中出现了几个问题: gomod文件应该放在哪里? 首先项目得在GOPATH以外的任意目录,再执行 go mod init [根目录名] 目录组织结构: wwwroot-------go.mod -------main.go -------hello/hello.go ------------/hello_test.go 使用go mod 时依赖包下...阅读全文

简书 2019-11-20 19:32:48

golang中文件以及文件夹路径相关操作

获取目录中所有文件 使用包: io/ioutil 使用方法: ioutil.ReadDir 读取目录 dirmane 中的所有目录和文件(不包括子目录) 返回读取到的文件的信息列表和读取过程中遇到的任何错误 返回的文件列表是经过排序的 FileInfo type FileInfo interface { Name() string // base name of the file Size() int64 // length in bytes for regular files; system-...阅读全文