Go语言中文网 为您找到相关结果 433

Golang官方依赖管理工具:dep

在这里声明一下,百度或者google看到的godep不是我这篇博文说的dep,那它们是什么关系呢?按照Peter Bourgon博文来说,它们的作者都有相同的人,但是一个是dep是官方版本,godep是第三方工具。 我今天介绍的是dep,之前也有介绍过glide,有兴趣的可以到Golang依赖管理工具:glide从入门到精通使用看看。 现在还有一个疑问是为什么官方现在要支持依赖管理了呢?我个人认为有如下原因(勿喷,如果不同或者遗漏欢迎留言补充): 第三方依赖管理很多,虽然很好用,但是很少可以兼容的,结果--乱; 官方的包管理为了增加社区的凝聚力,保持Go开箱即用的简单特性,不需要大家再安装各种第三方工具了,而且第三方工具都会过来兼容官方版的; 还有一个官话,为了go更好的发展; dep的FA...阅读全文

博文 2017-08-09 02:20:34 梦朝思夕

go依赖管理-govendor

Golang 官方并没有推荐最佳的包管理方案。到了1.5版本时代,官方引入包管理的设计,加了 vendor 目录来支持本地包管理依赖。官方 wiki 推荐了多种支持这种特性的包管理工具,如:Godep、gv、gvt、glide、govendor等。 下面简要介绍一个我在项目中用到的 -- govendor。该工具将项目依赖的外部包拷贝到项目下的 vendor 目录下,并通过 vendor.json 文件来记录依赖包的版本,方便用户使用相对稳定的依赖。对于 govendor 来说,依赖包主要有以下多种类型: 状态 缩写状态 含义 +local l 本地包,即项目自身的包组织 +external e 外部包,即被 $GOPATH 管理,但不在 vendor 目录下 +vendor v 已被 go...阅读全文

博文 2017-05-02 16:00:34 happen

go依赖包管理工具对比

July 10, 2017 in Tech GOPATH和GOROOT GOROOT并不是必须要设置的。 GOPATH必须要设置,但并不是固定不变的 本项目内部的依赖 管理外部的依赖包 使用GOPATH来管理外部依赖 vendor godep glide govendor golang官方dep 各依赖管理工具对比 gvt vendor的问题 当开始真正用go去做项目的时候,不可避免的就会遇到依赖包的问题。go的依赖包管理与java+maven的依赖管理不太一样,我们从GOPATH开始逐渐理解其思想,然后再对比下目前常用的依赖包管理工具。 GOPATH和GOROOT 初学者很容易会被这两个环境变量给搞晕。 GOROOT并不是必须要设置的。 GOROOT不是必须要设置的。参见Installin...阅读全文

博文 2017-07-30 05:45:50 伊布

Golang依赖管理工具:glide从入门到精通使用

介绍 不论是开发Java还是你正在学习的Golang,都会遇到依赖管理问题。Java有牛逼轰轰的Maven和Gradle。 Golang亦有godep、govendor、glide、gvt、gopack等等,本文主要给大家介绍gilde。 glide是Golang的包管理工具,是为了解决Golang依赖问题的。 为什么需要glide? 原因很简单,Go 语言原生包管理的缺陷。罗列一下golang的 get 子命令管理依赖有很多大缺陷: 能拉取源码的平台很有限,绝大多数依赖的是 github.com 不能区分版本,以至于令开发者以最后一项包名作为版本划分 依赖 列表/关系 无法持久化到本地,需要找出所有依赖包然后一个个 go get 只能依赖本地全局仓库(GOPATH/GOROOT),无法将库...阅读全文

博文 2017-07-22 05:33:09 梦朝思夕

Golang 守护进程

package main import ( "fmt" "os" "os/exec" "path/filepath" ) func main() { fmt.Println(os.Getppid()) if os.Getppid() != 1 { //判断当其是否是子进程,当父进程return之后,子进程会被 系统1 号进程接管 filePath, _ := filepath.Abs(os.Args[0]) //将命令行参数中执行文件路径转换成可用路径 cmd := exec.Command(filePath) //将其他命令传入生成出的进程 cmd.Stdin = os.Stdin //给新进程设置文件描述符,可以重定向到文件中 cmd.Stdout = os.Stdout cmd.Std...阅读全文

博文 2015-02-11 19:00:02 未来还没来

告别GOPATH,快速使用 go mod(Golang包管理工具)

如果你还在使用 GOPATH 模式来开发Golang程序,那么你可以参考本文来告别 GOPATH,并带给你一个方便的包管理工具。关于 go mod 的说明和简单使用,可以参考:1、Go1.1.1新功能module的介绍及使用2、Introduction to Go Modules3、Go 1.11 Modules 官方说明文档使用go mod 管理项目,就不需要非得把项目放到GOPATH指定目录下,你可以在你磁盘的任何位置新建一个项目,比如:新建一个名为 wserver 的项目,项目路径 D:\test\wserver (注意,该路径并不在GOPATH里) 进入项目目录 D:\test\wserver 里,新建一个 go源码文件: main.go 然后在 D:\test\wserver 里打...阅读全文

GO编译环境搭建(基于SublimeText3)

1、我的机器是32位的win,可以去下面连接下载:http://download.csdn.net/detail/cumtwys/7695131 如果需要其他版本请到google官网下载(貌似被封了):http://code.google.com/p/go/downloads/list?q=OpSys-Windows+Type%3DInstaller 2、配置系统环境变量 新建变量名:GOBIN 变量值:C:\go\bin 新建变量名:GOARCH 变量值:386 新建变量名:GOOS 变量值:windows 新建变量名:GOROOT 变量值:C:\go 编辑PATH变量,在最后添加 ;%GOBIN% 3、配置Sublime Text 按住【Ctrl+shift+p】,在弹出框内输入【ins...阅读全文

博文 2015-02-22 01:00:01 cumtwys

Go 摆脱了 C,又惹上了 Java?

talks.golang.org 前几天放出了 PPT《Go in Go》和 《The State of Go》讲解最近 Go 的开发动态和成果: 随着 Go 1.5 版本的开发,现在整个系统都是使用 Go 编写的(有一小部分汇编) C 已经成为过去时了。 Go 1.5 计划在 8 月份发布,将会尝试支持 iOS。(Go 1.4 已经正式支持 Android) 4月份进行的 NYJavaSIG 聚会上 Go 团队的技术主管经理分享了《Go for Java Programmers》,为 Java 程序员提供的 Go 入门指南,正式向 Java 领域进军了吗? 视频地址:https://www.youtube.com/watch?v=_c_tQ6_3cCg PPT 地址:http://talk...阅读全文

博文 2015-05-29 18:53:00 oschina

Golang环境安装和依赖管理

Golang一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。Golang提供了方便的安装包,支持Windows、Linux、Mac系统。 下载安装包 Golang的官网是https://golang.org/,如果官网打不开,可以访问https://golang.google.cn/这个域名。在官网点击Download Go会进入下载页,可以看到这里提供了针对各个系统的安装包,也提供了源码,可以下载源码编译安装。 下载运行安装包后,在terminal中执行go env命令,如果出现下面的输出说明已经安装成功。 GOROOT与GOPATH 仔细看上面的输出,会发现其中有一个GOPATH,又有一个GOROOT,那么到底哪个才是Golang的运行环境呢。 首先访问一下GOROOT这个...阅读全文

博文 2018-07-11 02:34:42 simpleapples

[笔记]Go语言写文件几种方式性能对比

Go语言中写文件有多种方式,这里进行如下几种方式的速度对比: 打开文件,写入内容,关闭文件。如此重复多次 打开文件,写入内容,defer 关闭文件。如此重复多次 打开文件,重复多次写入内容,defer 关闭文件 在VMWare下的Ubuntu 14.04下运行的结果表明: 方式1速度最慢,但是慢的很稳定 方式2比方式1略快,但是重复次数多了后会报错,应该是defer被压栈太多导致系统撑不了太多打开的文件 方式3速度约是前两者的2倍,因为减少了很多打开关闭文件的操作 测试代码如下: package main import ( "fmt" "os" "time" ) func benchmarkFileWrite(filename string, n int, index int) (d tim...阅读全文

博文 2015-03-08 03:00:01 journeyonmyway

golang执行linux命令

golang exec 执行系统命令 golang 2014-09-25 13:17:44 2779 0 0 exec.Command() 最简单的方法: cmd := exec.Command("/bin/sh/", "-c", "linux命令") 或复杂的, 各个参数都要单独写 cmd := exec.Command("ls", "-l", "-a") package main import ( "bytes" "fmt" "os/exec" ) func main() { in := bytes.NewBuffer(nil) cmd := exec.Command("sh") cmd.Stdin = in go func() { in.WriteString("echo hello ...阅读全文

博文 2016-08-31 17:00:02 zhangym

go-admin: 基于golang搭建后台管理中心

go-admin 是基于golang的后台管理中心搭建框架,利用 go-admin 可以利用极少的代码搭建起一个具有rbac认证,数据增删改查等功能的后台管理中心。 go-admin 中文介绍文档:https://github.com/chenhg5/go-admin/blob/master/README_CN.md安装使用文档:https://github.com/chenhg5/go-admin/wiki有问题与建议,欢迎加入qq群:75666485...阅读全文

博文 2018-08-11 21:35:00 嘎嘎嘎8333

golang包管理工具glide简介

golang包管理工具glide简介 前言 golang是一个十分有趣,简洁而有力的开发语言,用来开发并发/并行程序是一件很愉快的事情。在这里我感受到了其中一些好处: 没有少了许多代码格式风格的争论,强制统一的风格多好; 编译速度超快,再也不用等待许久,才能编译完工程(测试驱动开发自然更爽); 也不会出现同一个项目组中的人,在使用同一个语言的不同子集。但这种情况不论是在C#还是在Java的世界里,都还是普遍存在的; 轻松跨平台(当然Java做得不错,C#/.net还是努力中...) 这是一门非常简洁、简单、清晰的编程语言(关键字好少啊) 包依赖处理得很有趣; 错误处理机制很有趣,个人觉得比C#/Java的异常处理机制更方便,也更合理些; 对面向对象编程很有趣,非侵入性的接口实现方式,太赞了。...阅读全文

Go依赖管理机制

无论何种语言,依赖管理都是一个比较复杂的问题。而Go语言中的依赖管理机制目前还是让人比较失望的。在1.6版本之前,官方只有把依赖放在GOPATH中,并没有多版本管理机制;1.6版本(1.5版本是experimental feature)引入vendor机制,是包依赖管理对一次重要尝试。他在Go生态系统中依然是一个热门的争论话题,还没有想到完美的解决方案。 看其它 我们先来看看其它语言怎么解决,例举两种典型的管理方式: Java 开发态,可以通过maven和gradle工具编辑依赖清单列表/脚本,指定依赖库的位置/版本等信息,这些可以帮助你在合适的时间将项目固化到一个可随时随地重复编译发布的状态。这些工具对我来说已经足够优雅有效。但maven中也有不同依赖库的内部依赖版本冲突等令人心烦的问题。...阅读全文

博文 2016-11-20 17:00:00 jinpengxx8

PostgreSQL(数据库)资料和分布式系统(Distributed System)资料与Go语言资料整理

《PostgreSQL Documentation》 介绍:PostgreSQL官方文档主页 《PG技术沙龙ppt》 介绍:2013年4月PG技术沙龙PPT 《PG9.3中文翻译文档》 介绍:PG9.3中文翻译文档 谢谢@skykiker提供 《PostgreSQL从菜鸟到专家(中译稿 by 洞庭湖的泥鳅)》 介绍:这篇文档是国内的一线postgreSQL专家所翻译。很经典 《PostgreSQL vs. MS SQL Server》 介绍:PostgreSQL与 MS SQL Server的对比,中文版 《PostgreSQL 30天 培训视频》 介绍:作者德哥@Digoal从事pg截止目前大概有7-8年,长期活跃在国内的pg社区。这套PostgreSQL 30天 培训视频包含了SQL基础...阅读全文

博文 2015-04-28 14:00:13 zhongwen7710

vgo简明教程(Go语言依赖包管理工具)

前言 vgo是Go语言推出的第三方库管理工具,即将在Go语言新版本中使用。 相信大家都接触过其它语言的第三方库管理工具,比如Java的maven,PHP的composer,Python的pip,Node的npm等。vgo类似于这样的功能,方便Go语言项目管理第三方库。 Go语言官方以前一直没有明确正式的包管理工具,因此导致包管理工具非常混乱,比如dep,glide,govendor,godep等。(虽然dep也是Go语言官方推出的,但是它最终会被放弃。) vgo的推出,是Go语言社区的需要,将解决包管理工具混乱的问题。Go语言官方将使用这个依赖工具为主,所以我们有必要提前了解一下它的使用。 (vgo即英文versioned go的缩写) vendor目录 vendor目录是Go1.5版本后添...阅读全文

博文 2018-06-24 21:34:38 wuyumin

准备写一个基于go、angularjs的系统管理平台

功能要求:监控 http、tcp、udp 等服务状态分析 nginx、tomcat、weblogic 等日志监控 linux 服务器 cpu、硬盘、内存、网卡流量邮件报警go 主要用来写后台代码和监控 linux 服务器的 client 代码,并提供一个 api 给 angularjs 来查询和更新数据。上面这些功能使用 python 更容易实现一些(python 有许多现成的模块可以使用),只不过拿这个项目作为学习 go 的一个手段。目前完成了一部分的 go 和 angularjs 的代码。代码目前托管在 coding,有兴趣的朋友可以留言一起来学习交流 go 和 angularjs...阅读全文

博文 2015-06-18 09:02:45 qcpm1983

Golang自定义包总结

近日在学习Golang的自定义包的创建方式,产生了一些经验,因此以这篇文章作为记录。 我们通过import语句将自定义包加入到我们项目main函数中,import语句后面的参数应该是文件夹的名称,和自定义包的package的名称或者自定义包里面的文件名称没有关系,例如文件的结构目录如下: main.go的源码: package main import "fmt" import "foo" func main() { bar.Abc() fmt.Print("This is main\n") } foo/test.go的源码: package bar import "fmt" func Abc() { fmt.Print("This is test print\n") } 上面的代码是顺利通过...阅读全文

Prometheus 系统监控方案 一

最近一直在折腾时序类型的数据库,经过一段时间项目应用,觉得十分不错。而Prometheus又是刚刚推出不久的开源方案,中文资料较少,所以打算写一系列应用的实践过程分享一下。 Prometheus 是什么? Prometheus是一套开源的监控&报警&时间序列数据库的组合,起始是由SoundCloud公司开发的。随着发展,越来越多公司和组织接受采用Prometheus,社会也十分活跃,他们便将它独立成开源项目,并且有公司来运作。google SRE的书内也曾提到跟他们BorgMon监控系统相似的实现是Prometheus。现在最常见的Kubernetes容器管理系统中,通常会搭配Prometheus进行监控。 Prometheus 的优点 非常少的外部依赖,安装使用超简单 已经有非常多的系统集...阅读全文

golang snmp开发学习笔记(二)

soniah/gosnmp是一个纯go语言编写的SNMP包,基于alouca/gosnmp开发。目前提供GetRequest、GetNext、GetBulk、Walk和SetRequest功能,支持IPv4和IPv6, 支持SNMPv2c和SNMPv3。 本文介绍soniah/gosnmp的SetRequest和Walk操作。 SetRequest snoiah/gosnmp的GoSNMP.Set()方法有一个明显的错误: func (x *GoSNMP) Set(pdus []SnmpPDU) (result *SnmpPacket, err error) { if pdus[0].Type != Integer || pdus[0].Type != OctetString { retur...阅读全文

博文 2015-10-27 08:00:01 wbchen2330

Go语言的包管理

接触go语言之前写了一些nodejs的App,所以对于npm的包管理方式还是觉得挺方便的,但转移到go语言平台后,由于官方并未推出自己的包管理工具,所以只能借助于第三方的一些工具完成,本篇主要介绍一些目前使用的go的包依赖管理工具,用来协助程序的开发. gpm gpm工具使用来完成go依赖库下载的工具,非常的简单,只需要创建自己的一个Godeps文件,并把依赖的包写到文件中,这样我们就可以直接通过命令行来执行下载任务,并把依赖下载到当前的GOPATH路径中. 一个典型的Godeps文件中,我们可以不标记任何库依赖的版本信息,这样默认下载最新的依赖库,也可以通过标记下载指定的版本,只需要在依赖库的后面写上版本或者git的tag即可,如下所示: $ cat Godeps # This is a ...阅读全文

博文 2016-11-21 02:00:42 u014029783

GO 编写的进程管理工具 Gosuv

Gosuv是一个进程管理工具,使用Go语言编写。受python-supervisor启发,学习了很多其中的功能和用法。 至于为什么要写一个go的进程管理工具,主要还是因为感觉python-supervisor不是很好用(毕竟我也用了这玩意好几年了,又爱又恨)。因此gosuv对其不易用的部分重点加强了下。 Web控制台部分做了重点加强,因为使用频率太高了。在网页上也可以直接添加先的应用,网页查看日志的部分也做了优化,查看起来没有这么费劲了。使用了websocket连接后端,状态一有变化,前台就能立刻看到变化。 命令行做了部分修改,通常来说reload是热加载的命令,可是python-supervisor的reload命令是重启后台主进程,用起来显然很不习惯,顺手改掉。 配置文件也被我全...阅读全文

Golang 1.3 sync.Atomic源码解析

上一篇文章我们说到sync.Mutex的源码实现,核心就是使用到了CPU指令CAS,从并发性能上来说atomic的效率是要高于mutex的,毕竟mutex做了不少的其他步骤,而atomic的核心其实就是和处理器密切关系的,通过一两个指令就能完成的原子操作,我们接下来来看看atomic在golang中的一些细节。 通过目录: 64bit_arm.go asm_amd64p32.s asm_linux_arm.s atomic_test.go race.go asm_386.s asm_arm.s asm_netbsd_arm.s doc.go asm_amd64.s asm_freebsd_arm.s atomic_linux_arm_test.go export_linux_arm_test...阅读全文

博文 2014-10-19 09:03:49 毛, 剑

Golang-too_many_open_files-解决方法

这是系统资源限制,通常单进程不能超过 1024,我使用cgo来设置,代码如下: package main /* #include #include #include int rlimit_init() { printf("setting rlimit\n"); struct rlimit limit; if (getrlimit(RLIMIT_NOFILE, &limit) == -1) { printf("getrlimit error\n"); return 1; } limit.rlim_cur = limit.rlim_max = 50000; if (setrlimit(RLIMIT_NOFILE, &...阅读全文

博文 2015-03-03 21:46:55 nulijiabei

go项目工程目录组织和GOPATH设置

Golang没有工程文件的概念,是通过目录结构来体现工程的结构关系的。 刚开始写go程序的时候只有一个主程序文件(如main.go),也就没太在意go项目工程组织的重要性。最近着手看看网上的开源项目,感觉自己的go项目工程目录组织的太烂了,所以特意重新整理了一下。 按照go官方文档需要把项目根目录地址加到环境变量GOPATH里去,然而,在学习和工作中开发的程序中有多个项目,如果把每个项目的路径都加载到环境变量GOPATH里,那么不过多久环境变量GOPATH里的字符串想必就会超出微软定义环境变量的最大长度。所以本人使用了相对变量,即减少了目录太长也方便管理。效果如下...阅读全文

博文 2015-06-18 03:00:00 hezhixiong

关于Go语言daemon启动的方法.

昨天搞了个文件共享的小程序,遇见了意见蛋疼的事,就是启动之后终端不能关闭,不然程序也会随着关闭. 我的解决方法: nohup ./httpserver & nohup这个命令可以把程序放后台运行,顺便通过1>和2>把标准输出和标准错误重定向到文件,这样程序崩溃时才会有记录可查,这两者和程序的日志最好是分开,混在一起没办法判断轻重缓急: nohup ./server 1> server.out 2> server.err 进程启动时候记录下自己的pid: if pid := syscall.Getpid(); pid != 1 { ioutil.WriteFile("server.pid", []byte(strconv.Itoa(pid)), 0777) defer os.Remove("s...阅读全文

博文 2016-01-05 20:00:00 fyxichen

Deepin下搭建Golang开发环境

首先下载golang包,下载地址:http://pan.baidu.com/s/1hq1mrDM 进入go文件夹,然后进入对应的版本号,如果您的系统是32位的就是go1.4.2.linux-386.tar.gz,64位是go1.4.2.linux-amd64.tar.gz,下载好了后,解压得到go文件夹,我们使用命令移动到系统目录:sudo mv go /usr/local/输入管理员密码,什么都没有提示就是成功了,然后修改profile文件,命令是sudo gedit /etc/profile,然后在末尾添加以下代码: export GOROOT=/usr/local/go export GOARCH=amd64 export GOOS=linux export GOPATH=/home/...阅读全文

博文 2015-06-17 20:05:15 Rekols

Vendor 包管理器 Go Glide

Glide 是 Golang 的 Vendor 包管理器,方便你管理 vendor 和 verdor 包。 主要特性: * 简单管理依赖 * 支持 **versioning packages**,包括 [Semantic Versioning 2.0.0](http://semver.org/) 支持 * 支持 **aliasing packages** (e.g. for working with github forks) * Remove the need for munging import statements * 支持所有 `go` 工具 * 支持 VCS 工具和 Go 支持: * git * bzr * hg * svn 支持定制本地和全局插件 (se...阅读全文

开源项目 2015-11-04 16:00:00 Masterminds

从Maven,Gradle到Go

为什么要有依赖管理工具? 谈依赖管理之前,我们先谈谈为什么要有依赖管理工具这东西。 我们学了一种编程语言,然后写了个“Hello World”,然后宣称自己学了一门语言,这时候确实不需要关心依赖问题。 然而,当你要写一个稍微复杂点的应用,那怕就是留言板这样的,需要读写数据库,就需要依赖数据库驱动,就会遇到依赖管理的问题了。 再进一步,你写了一个库,想共享给别人使用,更需要了解依赖管理的问题。 当然,如果项目足够简单,你可以直接将依赖方的源码放置在自己的项目中,或者将依赖库的二进制文件(比如jar,dll)放置在项目的lib里。要提供给别人呢?把二进制包提供下载或者给别人传过去。依赖管理工具出现之前大多数都是这样搞的。 但如果再复杂些,依赖库本身也有依赖怎么弄呢?将依赖压缩打包,然后放个rea...阅读全文

北京招聘Golang研发工程师

工作地点: 北京-回龙观-复式精装住宅 工作装备: MacBook Pro Retina 三星大宽屏显示器 人体工程学座椅 公司简介: 天津泛亚电子商务技术服务有限公司于2014年1月由泛亚有色金属交易所原有股东投资设立,注册资本1亿元人民币,是泛亚有色金属交易所实现集团化发展的重要战略举措。该公司将以交易系统研发、风险控制等核心技术,以控股或参股的形式参与全国各地交易市场及交易中心的建设,预计3-5年内将形成天津为核心,涵盖有色金属、煤炭、进口矿产品、塑料等大宗商品业务板块。 岗位要求: - 计算机相关专业本科及以上学历, 具有2年及以上开发工作经验; - 熟悉Linux工作环境,精通Golang/Erlang/C/C++至少一种语言; ...阅读全文

Go 应该成为开发 android 的主要语言

前几天刚看到的新闻时,我就在猜想:如果 google 要摆脱 Oracle 的诉讼纠缠,那么只有一条路:就是用 go 取代 java 成为 android 的主要开发语言。这步迟早是要走的,也许谷歌已经在暗自部署了。我一直觉得手机应用开发采用VM语言或者JS是一种短视的行为,在前期也许会因为门槛低而吸引大量程序员涌入这个市场,但是很多高级应用(对速度响应要求很高)最终都难免要回到C/C++原生函数调用上来。别对我说什么C/C++门槛太高,两年前谁知道ObjectiveC,现在排行榜都到第九位了。苹果的ObjectiveC,诺基亚的C++/QT都选对了开发语言,相信Google很快会采用Go回到正轨,手机...阅读全文

七牛---关于GO SDK的各种Demo

具体可以参考七牛GO SDK的源码以及官网使用文档,以下Demo针对V7版本的SDK: https://github.com/qiniu/go http://developer.qiniu.com/code/v7/sdk/go.html 文件上传 简单上传 package main import ( "github.com/qiniu/api.v7/kodo" "qiniupkg.com/api.v7/conf" "qiniupkg.com/api.v7/kodocli" "fmt" ) var ( //设置上传到的空间 bucket = "yourbucket" ) //构造返回值字段 type PutRet struct { Hash string `json:"hash"` Key s...阅读全文

博文 2016-03-24 14:00:01 netdxy

godep 包管理工具

godep是解决包依赖的管理工具 安装 go get github.com/tools/godep 成功安装后,在GOPATH的bin目录下会有一个godep可执行的二进制文件,后面执行的命令都是用这个,间隔这个目录加入到PATH目录中。 编译和运行 项目用godep管理后,要编译和运行项目的时候再用go run和go build显然就不行了,因为go命令是直接到GOPATH目录下去找第三方库。 而使用godep下载的依赖库放到Godeps/workspace目录下的; godep go build XXX godep中的go命令,就是将原先的go命令加了一层壳,执行godep go的时候,会将当前项目的workspace目录加入GOPATH变量中; godep save godep sav...阅读全文

博文 2016-05-26 10:00:05 me115

Go中实现手动内存分配的坑

Go中实现手动内存分配的坑 2016-07-10 你一定想到过,分配一块大的内存,然后从里面切小的对象出来,手动管理对象分配。分配的开销非常小,就是offset加一下。尤其是有些场景,释放时直接把offset重置,就可以重用这块空间了。实现手动内存分配的好处是,减少小对象数目,从而减少垃圾回收时的扫描开销,降低延迟和提升整个性能。 想到不代表做过,做过会踩坑,这篇文章会把你可能要踩的坑都说一遍。不过先说结论:别这么干,不作死就不会死! TL;DR 扩容 开始很容易想用make([]byte)分配空间,如果大小不够时,还可以进行扩容。这是第一个陷阱。 不要append,别让它扩容。一旦发生扩容,会分配一块新的空间,而旧的slice将不再有任何变量引用它,于是会被垃圾回收掉。等等!之前分配的对象...阅读全文

可视化系统监控工具 Cloudinsight Agent

![image](http://static.oschina.net/uploads/img/201610/18113759_OZtU.jpg) 很高兴地宣布 Cloudinsight  Agent 在 BSD 开源协议下正式开源了。我们的工程师在开源前已将代码用 Golang 重写,更加清晰简洁,欢迎大家参与到  Cloudinsight Agent 的开发和迭代中来。 **为什么要用 Golang 重写和开源** [**Cloudinsight**](http://cloudinsight.oneapm.com/)**是一个可视化系统监控工具,能够对数据指标进行聚合、分组、过滤、 管理、计算;并提供团队协作功能,共同管理数据和报警事件。而这些的关键,正是 Cloudinsigh...阅读全文

多进程管理工具:goreman

Linux下多进程管理工具对开发和运维都很有用,常见的功能全面的主流工具主要有monit、supervisor。不过开发中使用则推荐轻量级小工具goreman。 goreman是对Ruby下广泛使用的foreman的重写,毕竟基于golang的工具简单易用多了。顺便提一句:goreman的作者是mattn,在golang社区挺活跃的日本的一名程序员。foreman原作者也实现了一个golang版:forego,不过没有goreman好用,举个例子:coreos的etcd就是使用的goreman来一键启停单机版的etcd集群。 安装 go工具安装都非常简单: go get github.com/mattn/goreman goreman help 当然,记得先把GOPATH、GOROOT环境变...阅读全文

Prometheus 系统监控方案 二 安装与配置

下载Prometheus 下载最新安装包,本文说的都是在Linux x64下面内容,其它平台没尝试过,请选择合适的下载。 Prometheus 主程序,主要是负责存储、抓取、聚合、查询方面。 Alertmanager 程序,主要是负责实现报警功能。 Pushgateway 程序,主要是实现接收由Client push过来的指标数据,在指定的时间间隔,由主程序来抓取。 *_exporter 这类是不同系统已经实现了的集成。 下载解压,一般默认的配置就可以运行。 tar xvfz prometheus-*.tar.gz cd prometheus-* go写的东西,直接打包成二进制包了,其本上没有别的依赖。 下面我们主要来了解一下他的配置文件,这是一个非常重要的步聚。 配置Prometheus监...阅读全文

Golang分布式设计模式之-----星型拓扑分形设计

Golang分布式设计模式之-----星型拓扑分形设计 上一篇分层设计中,利用了简单的流水线原理,实现了简单的状态转移的设计。如下 这一篇我们将考虑另外一种情况。例如,linux内核中的进程管理。所有的进程都有一个父进程。当子进程正常运行时候,与父进程基本无通信。但当子进程死亡时,要通知其父进程,让父进程进行资源回收。当父进程死亡时,两种情况,子进程随着父进程一起死亡,或者将子进程交由父进程的父进程管理。类似于下图 其中每个进程都有自己的父进程,也有可能会有自己的子进程。 在这种管理中,父子关系,或者说是管理者与被管理者的关系。被管理者,可以独自运行,但要将其的一些状态告知管理者,或者管理者,可以定期获取被管理者的状态。 下面以一个p2p下载器为例: 一、职能划分,形成管理者与被管理者 1)...阅读全文

博文 2015-01-21 09:17:51 screscent