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

golang 中fmt用法

fmt 包中的函数和方法 本文转自Golang学习-fmt包: http://www.cnblogs.com/golove/p/3286303.html // format.go ------------------------------------------------------------ // Fprintf 将参数列表 a 填写到格式字符串 format 的占位符中 // 并将填写后的结果写入 w 中,返回写入的字节数 func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error) // Printf 将参数列表 a 填写到格式字符串 format 的占位符中 // 并将填写后的结果写入...阅读全文

博文 2014-10-10 15:00:01 chenbaoke

golang 读写文件

1.读文件 package main import ( "bufio" "fmt" "io" "io/ioutil" "os" ) //读取文件需要经常进行错误检查,这个帮助方法可以精简下面的错误检查过程。 func check(e error) { if e != nil { panic(e) } } func main() { //也许大部分基本的文件读取任务是将文件内容读取到内存中。 dat, err := ioutil.ReadFile("/tmp/dat") check(err) fmt.Print(string(dat)) //你经常会想对于一个文件是怎么读并且读取到哪一部分进行更多的控制。对于这个任务,从使用 os.Open打开一个文件获取一个 os.File 值开始。 f, ...阅读全文

博文 2015-04-21 03:00:01 benlightning

Golang中的error类型

Golang中的error类型 error类型本身就是一个预定义好的接口,里面定义了一个method type error interface { Error() string } 生成一个新的error并返回 一般有以下几种处理方式: package main import ( "errors" "fmt" ) type Customerror struct { infoa string infob string Err error } func (cerr Customerror) Error() string { errorinfo := fmt.Sprintf("infoa : %s , infob : %s , original err info : %s ", cerr.info...阅读全文

博文 2015-06-27 03:00:00 Goden

golang Socket编程

Socket基础知识 通过上面的介绍我们知道Socket有两种:TCP Socket和UDP Socket,TCP和UDP 通过上面的介绍我们知道Socket有两种:TCP Socket和UDP Socket,TCP和UDP是协议,而要确定一个进程的需要三元组,需要IP地址和端口。 IPv4地址 目前的全球因特网所采用的协议族是TCP/IP协议。IP是TCP/IP协议中网络层的协议,是TCP/IP协议族的核心协议。目前IP协议的版本号是4(简称为IPv4),发展至今已经使用了30多年。 IPv4的地址位数为32位,也就是最多有2的32次方的电脑可以联到Internet上。近十年来由于互联网的蓬勃发展,IP位址的需求量愈来愈大,使得IP位址的发放愈趋严格,目前基本上IPv4的地址很少了,我们公...阅读全文

博文 2014-10-04 19:26:06 zhjih123

Go的reflect机制和reflect包

Go的reflect机制和reflect包 概述 虽然Go是静态语言,然而还是提供了reflect机制,并且定义了reflect包来辅助反射处理。在reflect包中,最重要的两个类型就是Type和Value,分别从类型、值的角度来描述一个Go对象。 Type类型是一个接口,这个接口实现了String() string方法。Value类型是一个结构,但是并未定义任何导出字段,同样定义了String() string方法。 使用如下语句来导入reflect包 import "reflect" 注意: 1.本文中出现在类型章节的函数,都是Type的方法。由于接口的特殊性,无法明确其receiver是指针还是值,所以并未显示其receiver,但都是有receiver的 2.很多方法都有要求,如果...阅读全文

博文 2014-10-11 11:00:06 fighterlyt

Go语言debug调试

文:http://www.cnblogs.com/yourihua/archive/2012/06/15/2541745.html说明:作为一门静态语言,似乎支持调试是必须的,而且,Go初学者喜欢问的问题也是:大家都用什么IDE?怎么调试?其实,Go是为多核和并发而生,真正的项目,你用单步调试,原本没问题的,可能会调出有问题。更好的调试方式是跟PHP这种语言一样,用打印的方式(日志或print)。当然,简单的小程序,如果单步调试,可以看到一些内部的运行机理,对于学习还是挺有好处的。下面介绍一下用GDB调试Go程序:(目前IDE支持调试Go程序,用的也是GDB。要求GDB 7.1以上)以下内容来自雨痕的《Go语言学习笔记》(下载Go资源):默认情况下,编译过的二进制文件已经包含了 DWARFv...阅读全文

博文 2014-12-14 09:00:07 halcyonbaby

golang中发送http请求的几种常见情况

整理一下golang中各种http的发送方式 最初的一些项目中,很多的地方都使用到了golang发送http请求,之后再对请求收到的结果进行一些处理,所用到的模式也比较固定,这里整理一下集中http的发送方式,先记录这么多,再一点一点添加。 最基本的场景 方式一 使用http.Newrequest 先生成http.client -> 再生成 http.request -> 之后提交请求:client.Do(request) -> 处理返回结果,每一步的过程都可以设置一些具体的参数,下面是一个最朴素最基本的例子: //question ???将stdout重定向为response信息??? package main import ( "fmt" "io" "net/http" "os" ) f...阅读全文

博文 2015-07-20 03:00:00 Goden

go编程之beego\orm使用

前面有提到go的mysql操作,但使用其进行数据库的操作封装,显然在实际的开发迭代中有几大问题存在,首先,sql操作及语句啰嗦而且复杂,其次工作效率也不是很高;如果使用此方法进行数据库开发,势必照成过多的代码冗余,且使用过程中容易产生各种问题。所以,今天我们一起来看看怎么使用beego下orm框架来辅佐我们进行mysql数据库操作。 orm即对象关系映射,通过类或者结构体与数据库表进行一一对应,今天我们通过简单的数据库操作代码来对照说明,且在代码中有对应操作的解释: import ( "fmt" _ "github.com/Go-SQL-Driver/MySQL" "github.com/astaxie/beego/orm" //对应的beego/orm库 可以通过 go get来获取到本地...阅读全文

博文 2015-06-17 23:08:20 xixionedream

Golang-上传-and-接收-文件

package main import ( "fmt" "io" "net/http" "log" ) // 获取大小的借口 type Sizer interface { Size() int64 } // hello world, the web server func HelloServer(w http.ResponseWriter, r *http.Request) { if "POST" == r.Method { file, _, err := r.FormFile("userfile") if err != nil { http.Error(w, err.Error(), 500) return } defer file.Close() f,err:=os.Create("fi...阅读全文

博文 2015-03-03 21:48:18 nulijiabei

golang 中bufio包的用法

本文转自GOlove博客:http://www.cnblogs.com/golove/p/3282667.html 并在此基础上进行了一些添加修改. bufio 包中的函数和方法 // bufio 包实现了带缓存的 I/O 操作 // 它封装一个 io.Reader 或 io.Writer 对象 // 使其具有缓存和一些文本读写功能 ------------------------------------------------------------ // bufio.go ------------------------------------------------------------ type Reader struct { buf []byte rd io.Reader // ...阅读全文

博文 2015-06-22 05:00:21 chenbaoke

golang url解析

package main import "fmt" import "net/url" import "strings" func main() { //我们将解析这个 URL 示例,它包含了一个 scheme,认证信息,主机名,端口,路径,查询参数和片段。 s := "postgres://user:pass@host.com:5432/path?k=v#f" //解析这个 URL 并确保解析没有出错。 u, err := url.Parse(s) if err != nil { panic(err) } //直接访问 scheme。 fmt.Println(u.Scheme) //User 包含了所有的认证信息,这里调用 Username和 Password 来获取独立值。 fmt.Pri...阅读全文

博文 2015-04-21 03:00:01 benlightning

golang中os包用法

os包中实现了平台无关的接口,设计向Unix风格,但是错误处理是go风格,当os包使用时,如果失败之后返回错误类型而不是错误数量. os包中函数设计方式和Unix类似,下面来看一下. func Chdir(dir string) error //chdir将当前工作目录更改为dir目录. func Getwd() (dir string, err error) //获取当前目录,类似linux中的pwd func Chmod(name string, mode FileMode) error //更改文件的权限(读写执行,分为三类:all-group-owner) func Chown(name string, uid, gid int) error //更改文件拥有者owner func ...阅读全文

博文 2015-10-18 12:00:05 chenbaoke

golang 正则表达式

package main import "bytes" import "fmt" import "regexp" func main() { //这个测试一个字符串是否符合一个表达式。 match, _ := regexp.MatchString("p([a-z]+)ch", "peach") fmt.Println(match) //上面我们是直接使用字符串,但是对于一些其他的正则任务,你需要使用 Compile 一个优化的 Regexp 结构体。 r, _ := regexp.Compile("p([a-z]+)ch") //这个结构体有很多方法。这里是类似我们前面看到的一个匹配测试。 fmt.Println(r.MatchString("peach")) //这是查找匹配字符串的。 f...阅读全文

博文 2015-04-21 03:00:01 benlightning

基于Go实现的分布式MQ

基于Go实现的分布式MQ 2015-09-14 赵超 讲师:赵超(Beta版厨子3.0) 个人简介: 6年的Java开发经验、先后就职于淘宝Java中间件团队、腾讯无线媒体产品部。现就职于陌陌担任基础业务组主管。专注于分布式消息总线、LBS技术领域、golang在大规模生产换环境应用的探索。 今天交流的内容也是我上半年主要做的一个开源的MQ的项目,希望对大家有帮助 一、RPC与MQ之间对比 我们通常接触到的RPC同步调用的种类非常多比如fb 的thrift/阿里的dobbo 腾讯的taf、淘宝的hsf这类同步调用框架 从图里面可以看到作为一个业务完成后端要发生非常多的RPC通信 随着业务的复杂度提高,各服务间的依赖度也逐步加大,那么服务间的响应时间也就各有参差了 在一个请求链路上如果存在一个...阅读全文

博文 2015-10-24 05:00:01 zdy0_2004

golang中os/exec包用法

exec包执行外部命令,它将os.StartProcess进行包装使得它更容易映射到stdin和stdout,并且利用pipe连接i/o. func LookPath(file string) (string, error) //LookPath在环境变量中查找科执行二进制文件,如果file中包含一个斜杠,则直接根据绝对路径或者相对本目录的相对路径去查找 func main() { f, err := exec.LookPath("ls") if err != nil { fmt.Println(err) } fmt.Println(f) // /bin/ls } type Cmd //表示一个正在准备或者正在运行的外部命令 type Cmd struct { Path string //运...阅读全文

博文 2015-06-17 20:02:21 chenbaoke

golang 编译后文件变小的方法

总有人说Go程序“好大”,一个Hello World都1M多。其实,随着程序源码越来越大,编译后的文件并非那么快速的增长,这点大小真心没必要那么在乎,又不是软盘时代。但总有一些人非得想要小点。 首先我们看一下为什么会比其他语言大些: Go 编译的可执行文件都包含了一个运行时(runtime),和我们习惯的Java/.NET VM有些类似。 运行时负责内存分配(Stack Handing、GC Heap)、垃圾回收(Garbage Collection)、Goroutine调度(Schedule)、引用类型(slice、map、channel)管理,以及反射(Reflection)等工作。Go程序进程启动后会自动创建两个goroutine,分别用于执行main入口函数...阅读全文

Golang文件操作整理

最近做的一点事情,用到了golang中不少文件操作的相关内容,创建,删除,遍历,压缩之类的,这里整理整理,希望能掌握的系统一点,把模糊的地方理清楚。 基本操作 文件创建 创建文件的时候,一定要注意权限问题,一般默认的文件权限是 0666 关于权限的相关内容,具体可以参考鸟叔p141 这里还是再回顾下,文件属性 r w x r w x r w x,第一位是文件属性,一般常用的 "-" 表示的是普通文件,"d"表示的是目录,golang里面使用os.Create创建文件的时候貌似只能使用0xxx的形式。比如0666就表示创建了一个普通文件,文件所有者的权限,文件所属用户组的权限,以及其他人对此文件的权限都是110表示可读可写,不可执行。 文件删除 文件删除的时候,不管是普通文件还是目录文件,都可...阅读全文

博文 2015-05-28 03:00:00 Goden

使用consul实现分布式服务注册和发现

使用consul实现分布式服务注册和发现 七 06 bigwhite技术志 Airbnb, cluster, consul, docker, etcd, Go, Golang, haproxy, hashicorp, json, raft, SmartStack, ZooKeeper, 分布式系统, 强一致性, 服务发现, 服务注册, 选主 No Comments Consul是HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置。与其他分布式服务注册与发现的方案,比如 Airbnb的SmartStack等相比,Consul的方案更“一站式”,内置了服务注册与发现框 架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其他工具(比如Zoo...阅读全文

博文 2015-07-14 11:16:39 bigwhite

Intellij idea14安装google-go-lang-idea-plugin插件无法指定sdk的解决办法

idea14 和go1.4不兼容,一直报这样一个错Argument for @NotNull parameter 'virtualFile' of com/intellij/openapi/projectRoots/impl/ProjectRootContainerImpl.addRoot must not be null 解决办法: google-go-lang-idea-plugin 插件虽然好,但是官方的编译版总是更新很慢,所以需要自己编译,问了老外才知道怎么编译,编译方法如下: I opened this project in IDEA Community 13 (or whatever the latest EAP is), then choose the SDK as the p...阅读全文

博文 2015-02-03 19:00:03 qq_19969471

NSQ:分布式的实时消息平台

NSQ是一个基于Go语言的分布式实时消息平台,它基于MIT开源协议发布,代码托管在GitHub,其当前最新版本是0.3.1版。NSQ可用于大规模系统中的实时消息服务,并且每天能够处理数亿级别的消息,其设计目标是为在分布式环境下运行的去中心化服务提供一个强大的基础架构。NSQ具有分布式、去中心化的拓扑结构,该结构具有无单点故障、故障容错、高可用性以及能够保证消息的可靠传递的特征。NSQ非常容易配置和部署,且具有最大的灵活性,支持众多消息协议。另外,官方还提供了拆箱即用Go和Python库。如果读者兴趣构建自己的客户端的话,还可以参考官方提供的协议规范。 NSQ是由四个重要组件构成: nsqd:一个负责接收、排队、转发消息到客户端的守护进程 nsqlookupd:管理拓扑信息并提供最终一致性的发...阅读全文

博文 2015-05-05 11:09:59 李小兵

Go语言中反射包的实现原理(The Laws of Reflection)

前言 过去只是知道某些语言带有反射,但是一直没机会使用这种高级功能,所以也没有深入了解过。昨天看golang时里面提到reflection,既然这么多语言支持这个性质,那就深入了解下好了。这篇文档翻译自官方文档的The Laws of Reflection,翻译目的不是为了翻译,而是加深自己记忆以及理解,所以有些地方可能不会直译,因为我没那么高水平,有时自己能看懂,但是按着原话翻译出来给别人听感觉好难。某些专用名词会继续保留原文,有时,其实我觉得还是英文更加容易理解。 The Laws of Reflection翻译 计算机中提到的反射指的是程序借助某种手段检查自己结构的一种能力,通常就是借助编程语言中定义的各种类型(types)。同时反射也是困惑的最大来源之一。 在这篇文章中,我们尝试通过...阅读全文

博文 2015-01-04 14:00:01 kjfcpua

https原理以及golang基本实现

关于https 背景知识 密码学的一些基本知识 大致上分为两类,基于key的加密算法与不基于key的加密算法。现在的算法基本都是基于key的,key就以一串随机数数,更换了key之后,算法还可以继续使用。 基于key的加密算法又分为两类,对称加密和不对称加密,比如DES,AES那种的,通信双方一方用key加密之后,另一方用相同的key进行反向的运算就可以解密。 不对称加密比较著名的就是RSA,加密的时候有一个公钥和一个私钥,公钥是可以交给对方的,a给b发送信息,a用自己的私钥加密,b用a的公钥解密,反之,b给a发送信息,b用自己的私钥加密。 在通信之前,需要经过一些握手的过程,双方交换公钥,这个就是key exchange的过程,https最开始的阶段就包含了这个key exchange的过...阅读全文

博文 2015-07-12 03:00:00 Goden

用go语言模拟客户端对服务端发送get和post请求

client.go package main import ( // "bytes" "fmt" "io/ioutil" "net/http" "net/url" ) var client = &http.Client{} func Get() { //向服务端发送get请求 request, _ := http.NewRequest("GET", "http://192.168.1.35:9091/?publicKey=-----BEGIN+PUBLIC+KEY-----%0D%0AMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDZsfv1qscqYdy4vY%2BP4e3cAtmv%0D%0AppXQcRvrF1cB4drkv0haU24Y7m5qYtT52...阅读全文

博文 2015-01-08 12:00:01 秦思_li

使用Golang开发微信公众平台-接入验证

使用Golang开发微信公众平台-接入验证 十二 18 bigwhite技术志 Amazon, DigitalOcean, EC2, Go, Golang, http, linode, PHP, Wechat, 亚马逊, 公众平台, 微信, 测试号, 移动互联网, 订阅号 2 Comments 今年我涉猎的领域有些“广泛”,并且有那么一点“跳跃”:从上半年的终端(游戏)开发到下半年golang、docker以及目前将要提及的微信公众平台 接口开发,似乎有些远离了老本行C以及技术管理的内容。但在这个转型以及创新驱动的时代,这显然是顺势而为。寻求与新兴领域的主动接轨,在实打实的实践 中,扩大了自己的视野,并可以进一步甄别发现适合自己的领域。 移动互联网时代,微信平台一枝独秀,是社交领域的巨人,但...阅读全文

博文 2015-01-20 09:22:59 bigwhite

RESTful API 设计最佳实践

本文由 伯乐在线 - bruce-accumulate 翻译。未经许可,禁止转载!英文出处:Vinay Sahni。欢迎加入翻译小组。 背景 目前互联网上充斥着大量的关于RESTful API(为方便,下文中“RESTful API ”简写为“API”)如何设计的文章,然而却没有一个”万能“的设计标准:如何鉴权?API 格式如何?你的API是否应该加入版本信息?当你开始写一个app的时候,特别是后端模型部分已经写完的时候,你不得不殚精竭虑的设计和实现自己app的public API部分。因为一旦发布,对外发布的API将会很难改变。 在给SupportedFu设计API的时候,我试图以实用的角度来解决上面提到的问题。我希望可以设计出容易使用,容易部署,并且足够灵活的API,本文因此而生。 AP...阅读全文

博文 2015-03-05 13:28:27 伯乐在线

PyCharm Golang开发环境搭建(最方便快捷的GO语言开发环境)

IntelliJ太牛了。为了配置Go语言开发环境,折腾了半天,下IDE(Sublime Text,IntelliJ Idea),然后装Go插件。装Go插件还要下载插件项目源码,编译等等,Sublime还要输入python脚本,粘进去通不过,头疼。 突然悟出一个道理,如果你觉得当前手上的事情变得非常痛苦的时候,不是事情本身的问题,是你没找到好的解决方法的问题,或者说,“不是事情太痛苦,是你太笨了”。 在不停的装插件,尝试过程中,突然发现,PyCharm跟Idea一样,也是支持Go插件的,立马悟到,PyCharm可以开发GO,要Idea干毛。再一想,PyCharm和Idea都是IntelliJ的产品,支持应该不会差,于是果断放弃Idea。 在PyCharm(Idea一样)装GO插件,相当容易。 ...阅读全文

博文 2016-05-11 11:00:02 NerdWill

golang中io/ioutil包用法

本文转自Golove博客:http://www.cnblogs.com/golove/p/3278444.html ,并在此基础上进行添加修改. io/ioutil 包中的函数和方法 // ioutil.go ------------------------------------------------------------ // ReadAll 读取 r 中的所有数据 // 返回读取的数据和读取过程中遇到的任何错误 // 如果读取成功,则 err 返回 nil,而不是 EOF func ReadAll(r io.Reader) ([]byte, error) func main() { s := strings.NewReader("Hello World!") ra, _ := io...阅读全文

博文 2015-06-17 20:20:53 chenbaoke

在Go语言里检测内存泄漏

载于:在Go语言里检测内存泄漏 | DLCoder.com http://dlcoder.com/archives/5648 在影响软件系统稳定性的因素里,我们最担心的一个问题是内存泄漏,随着系统的运行,系统消耗的内存越来越多,直到最后整个操作系统越来越慢,甚至还会导致系统崩溃。在Go语言里,我们检测内存泄漏主要依靠的是go里面的pprof包,除此之外,我们还可以使用浏览器来查看系统的实时内存信息(包括CPU、goroutine等的信息)。主要是用net/http/pprof包在进程里建立一个HTTP服务器,对外输出pprof包的内部性能剖析信息。参见这篇文章。 Go语言的pprof包不仅可以诊断内存堆信息(毕竟,内存泄漏都是在堆里发生的),而且可以诊断CPU信息、goroutine信息、堵...阅读全文

博文 2015-07-23 21:00:00 sryan

分布式存储Weed-FS源码分析

基于源码版本号 0.67 , 【Weed-FS又名叫Seaweed-FS】。 Weed-FS 是一个非常优秀的由 golang 开发的分布式存储开源项目, 虽然在我刚开始关注的时候它在 github.com 上面只有 star 50+, 但是我觉得这个项目是一个几千 star 量级的优秀开源项目。 Weed-FS 的设计原理是基于 Facebook 的一篇图片存储系统的论文 Facebook-Haystack, 论文很长,但是其实原理就几句话,可以看看 Facebook图片存储系统Haystack , 我觉得Weed-FS是青出于蓝而胜于蓝。 Weed-FS 这个开源系统涵盖的面比较多, 很难在一篇文章里面说清楚, 只能尽可能清楚的说说主要的部分。 源码目录结构 核心模块 weed 入口目录...阅读全文

博文 2015-02-15 18:31:39 YanyiWu

golang 生成进程,执行进程

1.生成进程 package main import "fmt" import "io/ioutil" import "os/exec" func main() { //我们将从一个简单的命令开始,没有参数或者输入,仅打印一些信息到标准输出流。exec.Command 函数帮助我们创建一个表示这个外部进程的对象。 dateCmd := exec.Command("date") //.Output 是另一个帮助我们处理运行一个命令的常见情况的函数,它等待命令运行完成,并收集命令的输出。如果没有出错,dateOut 将获取到日期信息的字节。 dateOut, err := dateCmd.Output() if err != nil { panic(err) } fmt.Println("> d...阅读全文

博文 2015-04-21 03:00:01 benlightning

beego入门文档

你对beego一无所知?没关系,这篇文档会很好的详细介绍beego的各个方面,看这个文档之前首先确认你已经安装了beego,如果你没有安装的话,请看这篇安装指南 导航 最小应用 新建项目 开发模式 路由设置 静态文件 过滤和中间件 Controller设计 模板处理 request处理 跳转和错误 response处理 Sessions Cache设置 安全的Map 日志处理 配置管理 beego参数 第三方应用集成 部署编译应用 最小应用 一个最小最简单的应用如下代码所示: package main import ( "github.com/astaxie/beego" ) type MainController struct { beego.Controller } func (this...阅读全文

博文 2014-10-04 19:27:32 astaxie

Golang的GC信息

一、GC信息的信息收集 设置环境变量GODEBUG=gctrace=1。 使用方法,如果程序为myserver。正常的启动方法为./myserver,如果需要收集GC信息启动方式如下GODEBUG=gctrace=1 ./myserver。 二、GC信息分析 gc5(6): 11+12+357+77 us, 0 -> 1 MB, 4294 (5261-967) objects, 67/2/0 sweeps, 6(115) handoff, 6(9) steal, 170/56/5 yields gc5(6):表示第5次GC,共有6个线程参与GC。 11+12+357+77 us:表示停止各个goroutine花费时间是11us,释放标记对象所有时间为12us,扫描标记可回收对象花费时间为25...阅读全文

博文 2015-03-27 20:00:01 lyhuzi

简单的Restful API例子(Golang)

RESTful API 这玩意不用多说了,用Go做了个很简单的例子: 服务端在被调用时返回JSON, 客户端解析得到相关JSON信息. 服务端源码: package main //简单的JSON Restful API演示(服务端) //author: Xiong Chuan Liang //date: 2015-2-28 import ( "encoding/json" "fmt" "net/http" "time" ) type Item struct { Seq int Result map[string]int } type Message struct { Dept string Subject string Time int64 Detail []Item } func getJ...阅读全文

博文 2015-06-17 20:17:24 xcltapestry

服务发现:Zookeeper vs etcd vs Consul

【编者的话】本文对比了Zookeeper、etcd和Consul三种服务发现工具,探讨了最佳的服务发现解决方案,仅供参考。 如果使用预定义的端口,服务越多,发生冲突的可能性越大,毕竟,不可能有两个服务监听同一个端口。管理一个拥挤的比方说被几百个服务所使用的所有端口的列表,本身就是一个挑战,添加到该列表后,这些服务需要的数据库和数量会日益增多。因此我们应该部署无需指定端口的服务,并且让Docker为我们分配一个随机的端口。唯一的问题是我们需要发现端口号,并且让别人知道。 当我们开始在一个分布式系统上部署服务到其中一台服务器上时,事情会变得更加复杂,我们可以选择预先定义哪台服务器运行哪个服务的方式,但这会导致很多问题。我们应该尽我们所能尽量利用服务器资源,但是如果预先定义每个服务的部署位置,那么...阅读全文

博文 2015-09-20 10:39:43 国会山上的猫TuxHu

为golang程序使用pprof远程查看httpserver运行堆栈,cpu耗时等信息

pprof是个神马玩意儿? pprof - manual page for pprof (part of gperftools) 是gperftools工具的一部分 gperftools又是啥? These tools are for use by developers so that they can create more robust applications. Especially of use to those developing multi-threaded applications in C++ with templates. Includes TCMalloc, heap-checker, heap-profiler and cpu-profiler. 一个性能分析的工具,...阅读全文

博文 2015-03-21 19:00:01 zhangqingping

用FileInfo.sys()获取文件的详细信息

使用os.Stat()获取FileInfo类型的数据后,我们就可以获取文件的信息,但信息也限于 type FileInfo interface { Name() string // base name of the file Size() int64 // length in bytes for regular files; system-dependent for others Mode() FileMode // file mode bits ModTime() time.Time // modification time IsDir() bool ...阅读全文

Golang加密系列之RSA

Golang加密系列的最后一篇,嗯,RSA涉及的概念太多,弄了好久才搞清楚。。。 代码的结构如下图 PS:StarUML这玩意在Mac上所有连到Interface的线都变成直线了...我很惆怅... 定义一个对外开放的接口 package rsa import "crypto" type Cipher interface { Encrypt(plaintext []byte) ([]byte, error) Decrypt(ciphertext []byte) ([]byte, error) Sign(src []byte, hash crypto.Hash) ([]byte, error) Verify(src []byte, sign []byte, hash crypto.Hash) ...阅读全文

博文 2015-11-06 15:00:09 君子藏锋

Go语言 GC优化经验分享

不想看长篇大论的,这里先给个结论,go的gc还不完善但也不算不靠谱,关键看怎么用,尽量不要创建大量对象,也尽量不要频繁创建对象,这个道理其实在所有带gc的编程语言也都通用。 想知道如何提前预防和解决问题的,请耐心看下去。 我们项目的服务端完全用Go语言开发的,游戏数据都放在内存中由go 管理。 在上线测试后我对程序做了很多调优工作,最初是稳定性优先,所以先解决的是内存泄漏问题,主要靠memprof来定位问题,接着是进一步提高性能,主要靠cpuprof和自己做的一些统计信息来定位问题。 调优性能的过程中我从cpuprof的结果发现发现gc的scanblock调用占用的cpu竟然有40%多,于是我开始搞各种对象重用和尽量避免不必要的对象创建,效果显著,CPU占用降到了10%多。 但我还是挺不甘心...阅读全文

博文 2014-10-11 18:00:01 abv123456789

内网穿透工具 frp

frp 是一个高性能的反向代理应用,可以帮助您轻松地进行内网穿透,对外网提供服务,支持 tcp, http, https 等协议类型,并且 web 服务支持根据域名进行路由转发。 ### frp 的作用 * 利用处于内网或防火墙后的机器,对外网环境提供 http 或 https 服务。 * 对于 http 服务支持基于域名的虚拟主机,支持自定义域名绑定,使多个域名可以共用一个80端口。 * 利用处于内网或防火墙后的机器,对外网环境提供 tcp 服务,例如在家里通过 ssh 访问处于公司内网环境内的主机。 * 可查看通过代理的所有 http 请求和响应的详细信息。(待开发) ### 开发状态 frp 目前正在前期开发阶段,master ...阅读全文

开源项目 2016-09-07 23:56:33 fatedier

golang的net/url包

package url import "net/url" url包解析URL并实现了查询的逸码,参见RFC 3986。 Index func QueryEscape(s string) string func QueryUnescape(s string) (string, error) type Error func (e *Error) Error() string type EscapeError func (e EscapeError) Error() string type URL func Parse(rawurl string) (url *URL, err error) func ParseRequestURI(rawurl string) (url *URL, err er...阅读全文

博文 2014-10-04 19:26:39 刘地

Go程序GC优化经验分享

作者:达达 来源:http://1234n.com/?post/yzsrwa 最近一段时间对《仙侠道》的服务端进行了一系列针对GC的调优,这里跟各位分享一下调优的经验。 游戏第一次上线的时候,大部分精力都投入在做cpuprof和memprof找性能瓶颈和内存泄漏上,没有关注过Go的GC运行情况。 有一次cpuprof里的scanblock调用所占的比例让我注意到Go的GC所带来的性能消耗,记得那份cpuprof里,scanblock调用占到49%。也就是说有一半的CPU时间浪费在了GC上。 于是我开始研究如何进行优化,过程中免不了要分析数据,经过一番搜索,我好到了GOGCTRACE这个环境变量。 用法类似这样: GOGCTRACE=1 ./my_go_program 2> log_file ...阅读全文

博文 2014-10-29 01:00:00 LvanNeo

Alpha Go 的原理浅析(深度学习与强化学习的融合)

前言 这两天网络上被Alpha Go和李世石的围棋对决刷屏,目前Alpha Go已经2-0领先。从前年开始关注研发这套系统的DeepMind公司,一直在追终他们最新的论文。深度学习这个词随着这一事件又火了一把,可是我想说的是虽然阿尔法狗确实得益于深层神经网络的发展,但是其能超过以往的围棋AI的原因是他将深度学习和强化学习结合在一起使用,再融合传统围棋AI主要使用的蒙特卡洛树搜索方法。要知道只用深度学习的方法去解决围棋问题在几年前已经有很多人在尝试,其效果却往往还不及当前最好的围棋AI(例如:Zen,Pachi等) 去年这家公司做的最引爆世界的事情是在Arcade Learning Environment中战胜了人类专家并且在nature上也发。这个环境是为了评估各种强化学习(Reinforc...阅读全文

博文 2016-03-11 18:00:02 xcwill

golang sha1,base64

1.base64编码 package main //这个语法引入了 encoding/base64 包并使用名称 b64代替默认的 base64。这样可以节省点空间。 import b64 "encoding/base64" import "fmt" func main() { //这是将要编解码的字符串。 data := "abc123!?$*&()'-=@~" //Go 同时支持标准的和 URL 兼容的 base64 格式。编码需要使用 []byte 类型的参数,所以要将字符串转成此类型。 sEnc := b64.StdEncoding.EncodeToString([]byte(data)) fmt.Println(sEnc) //解码可能会返回错误,如果不确定输入信息格式是否正确,那...阅读全文

博文 2015-04-21 03:00:00 benlightning

用Golang的 http 包建立 Web 服务器

http 包建立 Web 服务器 package main import ( "fmt" "log" "net/http" "strings" ) func sayhelloName(w http.ResponseWriter, r *http.Request) { r.ParseForm() //解析参数, 默认是不会解析的 fmt.Println(r.Form) //这些是服务器端的打印信息 fmt.Println("path", r.URL.Path) fmt.Println("scheme", r.URL.Scheme) fmt.Println(r.Form["url_long"]) for k, v := range r.Form { fmt.Println("key:", k) ...阅读全文

博文 2014-12-30 01:00:03 kanglecjr

Go实例学:函数多返回值

Go语言内置支持多返回值,这个在Go语言中用的很多,比如一个函数同时返回结果和错误信息。 package main import "fmt" // 这个函数的返回值为两个int func vals() (int, int) { return 3, 7 } func main() { // 获取函数的两个返回值 a, b := vals() fmt.Println(a) fmt.Println(b) // 如果你只对多个返回值里面的几个感兴趣 // 可以使用下划线(_)来忽略其他的返回值 _, c := vals() fmt.Println(c) } 输出结果为 3 7 ...阅读全文

博文 2014-11-29 17:00:01 Goopand

Go语言开发分布式聊天室

声明 我是一个刚学go语言的菜鸟,还没有资格谈论什么技术分享,只是为了展示fooking的实际应用,同时把我用go写的聊天室代码贴出来供大家消遣,如果有入不了各位法眼的代码,望轻喷。该聊天室基于fooking,而业务代码是采用Go + Fastcgi。 完整的源代码在 https://github.com/scgywx/fooking/blob/master/example/chat/gateway.go,全代码200多行,去掉router部分代码,实际逻辑代码只有170来行,逻辑简单,功能强大。 详解 聊天服务器的入口main函数里有3个IP和端口配置,分别是Chat服务器、Router服务器和Redis服务器。 func main() { listener, _ := net.Liste...阅读全文

博文 2015-08-28 15:00:04 IM鑫爷

线上Golang程序 GC调优一例

13 Nov 2013 线上Golang程序 GC调优一例 Golang 是一个很有意思的语言,第一次看它介绍时,就很喜欢。半年前加入美团,有机会用它写了几个线上程序。其中一个程序Router,每天需要转发几千万的请求。由于需要根据请求内容决定route路径,它需要加载几十万deal(美团单)的信息到内存供查询。问题来了,用map装的几十万数据让gc很辛苦。 Deal数据 // Deal的定义 type DealTiny struct { Dealid int32 Classid int32 Mttypeid int32 Bizacctid int32 Isonline bool Geocnt int32 } gc停顿 用go写一个简单的Web程序,设置GOGCTRACE环境变量为1后启动程...阅读全文

博文 2014-11-03 14:42:37 沈锋

Mac下Go语言环境的搭建

go语言运行包安装 下载地址: https://code.google.com/p/go/downloads/list 我下载的是:go1.0.3 Mac OS X (x86 64-bit) Signed PKG installer go1.0.3.darwin-amd64-signed.pkg 下载完成后直接安装。运行包自动安装在 /usr/local/go 中,这样在命令终端就可以运行go命令了。 这时候在命令行输入 go,会看到下面信息: cybercarematoMacBook-Pro:iOS cybercare$ goGo is a tool for managing Go source code. Usage: go command [arguments] The command...阅读全文

博文 2014-10-26 16:53:18 ghj1976

Go语言的分词器(sego)

今天,主要来介绍一个Go语言的中文分词器,即sego。本分词器是由陈辉写的,他的微博在这里,github详 见此处。由于之前他在Google,所以对Go语言特别熟悉。sego的介绍如下 sego是Go语言的中文分词器,词典用前缀树实现, 分词器算法为基于词频的最短路径加动态规划。 支持普通和搜索引擎两种分词模式,支持用户词典、词性标注,可运行JSON RPC服务。 分词速度单线程2.7MB/s,goroutines并发13MB/s, 处理器Core i7-3615QM 2.30GHz 8核。 接下来,以如下几个方面来介绍sego 1. sego的安装 2. sego的原理 3. sego的使用 1. sego的安装 首先,在Go语言中,有很多第三方包,可以帮助我们实现某些特定的功能。比如这里...阅读全文

博文 2015-03-26 23:00:08 ACdreamers