golang中的race检测

golang中的race检测 由于golang中的go是非常方便的,加上函数又非常容易隐藏go。 所以很多时候,当我们写出一个程序的时候,我们并不知道这个程序在并发情况下会不会出现什么问题。 所以在本质上说,goroutine的使用增加了函数的危险系数论go语言中goroutine的使用。比如一个全局变量,如果没有加上锁,我们写一个比较庞大的项目下来,就根本不知道这个变量是不是会引起多个goroutine竞争。 官网的文章Introducing the Go Race Detector给出的例子...阅读全文

阅读:7355 评论:1

Go语言无法读取需要密码访问的PEM文件问题(failed to parse private key)

原文来自:http://blog.csdn.net/hekejun19861107/article/details/22897429 最近开始做苹果的推送功能,服务端连接apns的时候需要加密连接,对应就需要通过苹果开发者平台生成对应的pns的证书和对应的私钥,然后通过openssl命令转换成PEM格式,本人也是急于完成手头的工作,没有去深入研究openssl命令的使用方法,按网上的教程直接把p12 的私钥转成了pem,对应还上了密码。这时候问题就来了,Go提供的tls库中的LoadX509Ke...阅读全文

2014-09-22 10:06 newsyoung1
阅读:4923 评论:0

go语言值得学习的开源项目推荐

谷歌官方维护了一个基于go语言的开源项目列表: https://github.com/golang/go/wiki/Projects 其中有非常多的优秀项目值得学习,有几百行代码适合新手阅读的项目,也有大型如nsq、docker等的项目。 下面推荐几款适合学习的项目: 1、cache2go https://github.com/muesli/cache2go 比较简单的一个缓存库,代码量很少,适合新手学习,可以学习到锁、goroutines等。 2、groupcache https://gith...阅读全文

2016-02-29 14:50 Yangyan518
阅读:7264 评论:0

微服务实践(七):从单体式架构迁移到微服务架构

【编者的话】这是用微服务开发应用系列博客的第七篇也是最后一篇。第一篇中介绍了微服务架构模式,并且讨论了微服架构的优缺点;接续文章讨论了微服务架构不同方面:使用API网关,进程间通信,服务发现,事件驱动数据管理以及部署微服务。本篇,我们将探讨将应用从单体式架构迁移到微服务架构需要考虑的策略。 @Container容器技术大会将于6月4日在上海光大会展中心国际大酒店举办,来自Rancher、携程、PPTV、蚂蚁金服、京东、浙江移动、海尔电器、唯品会、eBay、道富银行、麻袋理财、土豆网、阿里百川、腾...阅读全文

阅读:10071 评论:0

Database Go and JSON

在使用Go开发web项目的过程中, 数据库读写操作与JSON格式的输入输出是两块最基础的模块, Go的标准库已经帮我们做了很多, 熟悉database/sql与encoding/json这两个库能帮我们更自在地开发web应用. 但此篇文章抛开基础不说, 只说一些在开发中遇到一些真实存在的痛点. 如何处理Null值?Go的一大特色就是zero value, 比如int类型的zero value是0, string为"", struct为每个field里各自类型的zero value. 因此在Go的...阅读全文

2016-08-09 13:12 qgymje
阅读:2434 评论:2

CGO,GOLANG调用C库,调用代码、静态库或动态库

CGO CGO可以让golang和c互相调用,譬如x264或者aac编解码,用go再实现一遍比较麻烦,直接调用c的函数会更合适。 CGO可以直接用C的代码,或者C的静态库,或者动态库,当然C++也是可以的。 写了一个fdkaac的binding:https://github.com/winlinvip/go-fdkaac 参考这两篇文章,讲得很清楚: https://golang.org/cmd/cgo/ https://blog.golang.org/c-go-cgo 有个例子,go调用x26...阅读全文

2016-06-22 15:26 winlinvip
阅读:8658 评论:0

go-reflect

反射获取对象的属性,值,方法 package main import "fmt" import "reflect" func main() { u := User{1, "ok", 12} Info(u) } //任何一个对象都实现了空接口 func Info(o interface{}) { t := reflect.TypeOf(o) //获取类型 User类型 fmt.Println("Type", t.Name()) if K := t.Kind(); K != reflect.Stru...阅读全文

阅读:2111 评论:0

使用golang快速开发微信公众平台(五):公众号支付

微信又TMD改版了 2个月前我做的一个微信公众号商城支付是正常的,但是同样的设置,目前做的这个却不正常了,老给我报invalid url domain,试遍了所有能找到的法子依然不行,卧槽他大爷,连写博客的欲望都没了,此坑待填。 跨过该死的设置,说下之前解决掉的2个问题: 微信安全设置要求服务器在你填写业务域名或js安全域名的位置,可以访问到一个MP_verify_xxxx.txt(之前无此硬性要求 我CNNND) 支付 而支付又分页面和后台 先说这个MP_verify_xxxx.txt咋办 直...阅读全文

2016-10-20 12:12 u012210379
阅读:5804 评论:1

从小案例学习Go语言-将Excel各部分内容分发到不同的电子邮箱

关键点: Go语言读取Excel Go语言正则表达式 Go语言发送电子邮件 案例场景 今天公司行政部小妹妹跑来问,有什么办法可以把工资条自动发送到每个员工的企业邮箱里?公司每个员工的工资条以Excel的形式放在同一个文档里,之前用OA发送,复制粘贴,操作相当简单,但是公司要求改用电子邮件发送工资条后,给行政部的同事增加了较大的工作量,而且每个月都需要做一次,这很浪费时间,于是爽快的答应帮忙解决。 情况梳理 公司工资条大概这个样子的 为了方便,行政部门会把所有人的工资条按顺序排列在同一个Excel...阅读全文

阅读:11165 评论:8

如果裸写一个goroutine pool

本文作者: 伯乐在线 - legendtkl 。未经作者许可,禁止转载!欢迎加入伯乐在线 专栏作者。 引言 在上文中,我说到golang的原生http server处理client的connection的时候,每个connection起一个goroutine,这是一个相当粗暴的方法。为了感受更深一点,我们来看一下go的源码。先定义一个最简单的http server如下。 func myHandler(w http.ResponseWriter, r *http.Request) { fmt.Fp...阅读全文

阅读:2097 评论:0

Google Go 语言从入门到应用所需要的开源项目

Go 语言于 2009 年 11 月正式宣布推出,成为开放源代码项目,发展至今已经具有越来越广泛的影响力,今年更是在 TIOBE 编程语言排行榜中跻身 20 强。很多开发者也逐渐将目光投向这门语言,本文整理了部分比较好的学习和应用 Go 语言的开发项目,希望为没有接触过这门语言的开发者们提供一个学习和了解这门语言的途径。 关于 Go 语言: Go 是 Google 开发的一种编译型,并发型,并具有垃圾回收功能的编程语言。由于其构建简化了并发运行代码的工作,存在并行编程模式,因此这一语言也被设计用...阅读全文

2016-12-12 15:00:03 两味真火
阅读:6158 评论:0

golang vim 插件设置

多数情况使用vim编写golang代码,需要有语法高亮显示以及自动format。为此需要给vim编辑器增加支持golang语法的插件,插件配置的方法如下: 1、下载vim插件管理工具,如果有git的话可以直接用git clone https://github.com/tpope/vim-pathogen 2、在建立文件夹~/.vim mkdir ~/.vim 3、拷贝vim-pathogen下的autoload文件夹到~/.vim下: 4、在~/.vim下建立bundle文件夹,用来存放vim插...阅读全文

2016-12-23 18:00:07 Mr_李辉
阅读:5938 评论:0

Shadowsocks-go一键安装脚本

Shadowsocks-go一键安装脚本 本脚本适用环境: 系统支持:CentOS,Debian,Ubuntu 内存要求:≥128M 关于本脚本: 一键安装 Go 版的 shadowsocks 最新版本 1.1.5。据说 go 版本有 buff 。与 Python 版不同的是,其客户端程序能使用多个服务端配置,本脚本安装的是服务端程序。作者默认推荐 aes-128-cfb 加密,基于一致性,脚本使用了 aes-256-cfb 加密方式。 默认配置: 服务器端口:自己设定(如不设定,默认为 898...阅读全文

2016-12-24 13:00:02 PengTdy
阅读:7960 评论:0

调试利器:dump goroutine 的 stacktrace

Stack trace是指堆栈回溯信息,在当前时间,以当前方法的执行点开始,回溯调用它的方法的方法的执行点,然后继续回溯,这样就可以跟踪整个方法的调用,大家比较熟悉的是JDK所带的jstack工具,可以把Java的所有线程的stack trace都打印出来。 它有什么用呢?用处非常的大,当应用出现一些状况的时候,比如某个模块不执行, 锁竞争、CPU占用非常高等问题, 又没有足够的log信息可以分析,那么可以查看stack trace信息,看看线程都被阻塞或者运行在那些代码上,然后定位问题所在。 ...阅读全文

2016年12月21日 smallnest
阅读:2482 评论:0

Go调优神器trace介绍

你想知道你的Go程序在做什么吗? go tool trace可以向你揭示:Go程序运行中的所有的运行时事件。 这种工具是Go生态系统中用于诊断性能问题时(如延迟,并行化和竞争异常)最有用的工具之一。 在我之前的博客文章中,我提到我们在Pusher中使用go tool trace来跟踪为何Go垃圾收集器有很长的停顿时间。 在这篇博文中,我更加深入的介绍go toll trace。go tool trace 试用go tool trace可以显示大量的信息,所以从哪里开始是个问题。 我们首先简要介绍...阅读全文

阅读:23398 评论:0

使用Golang的interface接口设计原则

1 interface接口 interface 是GO语言的基础特性之一。可以理解为一种类型的规范或者约定。它跟java,C# 不太一样,不需要显示说明实现了某个接口,它没有继承或子类或“implements”关键字,只是通过约定的形式,隐式的实现interface 中的方法即可。因此,Golang 中的 interface 让编码更灵活、易扩展。 如何理解go 语言中的interface ? 只需记住以下三点即可: 注意: a. interface 可以被任意对象实现,一个类型/对象也可以实现...阅读全文

阅读:5062 评论:1

Go Gin源码学习(五)

### Gin路由主要流程实现 经过上一篇的学习笔记,我们已经知道了Gin router的主要流程。但是我们看到代码和方法体总体很长,其中大部分是参数路由的判断。这些零散的小逻辑,让我们阅读源码的时候更难理解了一些。但是其实基数树的逻辑兵没有这么的复杂,所以我们还是按照老规矩,自己实现以下这个简单的基数树值包含主流程。代码如下: ``` package mygin import "fmt" type Trees map[string]*node type node s...阅读全文

2019-05-14 23:36:09 panlei914
阅读:863 评论:0

Golang三色标记、混合写屏障GC模式图文全分析

原创声明:未经作者允许请勿转载, 如果转载请注明出处作者:刘丹冰Aceld, 微信公众号同名 垃圾回收(Garbage Collection,简称GC)是编程语言中提供的自动的内存管理机制,自动释放不需要的对象,让出存储器资源,无需程序员手动执行。 ​ Golang中的垃圾回收主要应用三色标记法,GC过程和其他用户goroutine可并发运行,但需要一定时间的STW(stop the world),STW的过程中,CPU不执行用户代码,全部用于垃圾回收,这个过程的影响很大,Golang进行了多次...阅读全文

阅读:10135 评论:6

Go 各版本回顾

![Illustration created for “A Journey With Go”, made from *the original Go Gopher, created by Renee French.](https://raw.githubusercontent.com/studygolang/gctt-images2/master/Go-Retrospective/00.png) 对每一个开发者来说,Go 的发展历史是必须知道的知识。了解几年来每个发行版本的主要变化,有助于...阅读全文

2020-05-05 11:42:29 lxbwolf
阅读:25643 评论:0