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

golang中time包用法

time包中包括两类时间:时间点(某一时刻)和时常(某一段时间) 1时间常量(时间格式化) const ( ANSIC = "Mon Jan _2 15:04:05 2006" UnixDate = "Mon Jan _2 15:04:05 MST 2006" RubyDate = "Mon Jan 02 15:04:05 -0700 2006" RFC822 = "02 Jan 06 15:04 MST" RFC822Z = "02 Jan 06 15:04 -0700" // RFC822 with numeric zone RFC850 = "Monday, 02-Jan-06 15:04:05 MST" RFC1123 = "Mon, 02 Jan 2006 15:04:05 MST...阅读全文

博文 2015-06-18 19:00:34 chenbaoke

go build和go install的区别

go build通过go build加上要编译的Go源文件名,我们即可得到一个可执行文件,默认情况下这个文件的名字为源文件名字去掉.go后缀。 $ go build hello.go $ lshello hello.go 当然我们也 可以通过-o选项来指定其他名字: $ go build -o mygo hello.go $ lsmygo hello.go 如果我们在go-examples目录下直接执行go build命令,后面不带文件名,我们将得到一个与目录名同名的可执行文件: $ go build $ lsgo-examples hello.go go install与build命令相比,install命令在编译源码后还会将可执行文件或库文件安装到约定的目录下。 go install编译...阅读全文

Go_Json_Unmarshal_Marshal

Go按照RFC 4627的标准实现了一个json编解码的标准库 func Unmarshal(data []byte, v interface{}) error Unmarshal用于反序列化json的函数 根据data将数据反序列化到传入的对象中 仔细查看代码中的四种情况 1 将json反序列化成struct对象 2 将json反序列化到可以存储struct的slice中 3 将json 反序列化到map中 4 将json反序列化到slice中 package main import ( "encoding/json" "fmt" ) func main() { type Person struct { Name string Age int Gender bool } //unmarsh...阅读全文

博文 2014-10-31 14:00:09 u012807459

golang json 处理的一些例子代码

json 处理的例子代码, 解析结果看后面注释。 package main import "encoding/json" import "fmt" import "os" type Response1 struct { Page int Fruits []string } type Response2 struct { Page int `json:"page"` Fruits []string `json:"fruits"` } type CommonArg struct { SessionId int64 `json:",string"` Op string `json:"Op,omitempty"` AppId string `json:"appId,omitempty"` Onlin...阅读全文

博文 2015-02-10 03:00:00 ghj1976

Thrift RPC 使用指南实战(附golang&PHP代码)

Thrift RPC 框架指南 认识Thrift框架 thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 这些编程语言间无缝结合的、高效的服务。 thrift最初由facebook开发,07年四月开放源码,08年5月进入apache孵化器。 thrift允许定义一个简单的定义文件中的数据类型和服务接口,以作为输入文件,编译器生成代码用来方便地生成RPC客户端和服务器通信的无缝跨编程语言。 类似Thrift的工具,还有Av...阅读全文

博文 2015-05-18 12:00:33 grassroots2011

Python、Java、Scala、Go Package对照表

格式转换类 分类 Python Java Scala Go Excel xlwt/xlrd, XlsxWriter POI - - PDF PyPDF2 Apache FOP - - CSV csvkit, tablib - - - XML解析 BeautifulSoup/bs4 - - - JSON - jackson json4s, spray-json - 数据处理和计算类 分类 Python Java Scala Go 二维数据分析 pandas - Saddle - 网络分析 networkx JUNG - - 矩阵计算 numpy - Algebird, Breeze blas, gocomplex, go-fn 科学计算 scipy SCaVis - - 符号计算 sympy ...阅读全文

博文 2015-04-10 19:00:00 Worldguy

golang 格式化时间为字符串

package main import ( "fmt" "reflect" "time" ) func main() { //格式化字符串为时间 test, _ := time.Parse("2006-01-02", "2013-11-11") //时间增加 after, _ := time.ParseDuration("15m") fmt.Println(test) test = test.Add(after) fmt.Println(test) //格式化时间为字符串 t3 := test.Format("2006-01-02 15:04:05") fmt.Println(t3) //格式化时间为字符串,只保留年月日 t3 = test.Format("2006-01-02") fmt....阅读全文

博文 2014-10-04 19:26:12 forrestsun

Google 新实现的Protobuf RPC: grpc

自: http://www.dongliu.net/post/622450 Google 刚刚开源了grpc, 一个基于HTTP2 和 Protobuf 的RPC 实现。 Protobuf 本身虽然提供了RPC 的定义语法,但是一直以来,Google 只开源了Protobuf 序列化反序列化的代码,而没有开源RPC 的实现,于是存在着众多良莠不齐的第三方RPC 实现。 从实现和特性看来,grpc 更多的是考虑移动场景情况下客户端和服务端的通信,正如其自称的「general RPC framework that puts mobile and HTTP/2 first」。HTTP2 本身提供了连接多路复用、Body 和 Header 压缩等机制,grpc 基于此可以提供比较高效的实现。 grp...阅读全文

博文 2015-02-28 03:00:01 huangfox

Go语言如何深度拷贝对象

深度复制可以基于reflect包的反射机制完成, 但是全部重头手写的话会很繁琐. 最简单的方式是基于序列化和反序列化来实现对象的深度复制: func deepCopy(dst, src interface{}) error { var buf bytes.Buffer if err := gob.NewEncoder(&buf).Encode(src); err != nil { return err } return gob.NewDecoder(bytes.NewBuffer(buf.Bytes())).Decode(dst) } Gob和bytes.Buffer简单组合就搞定了. 当然, Gob的底层也是基于reflect包完成的...阅读全文

博文 2014-12-26 17:00:18 chai2010

os.Args[0] 的获取的值的问题

默认情况下 os.Args[0]应该返回可执行文件的路径 ``` go package main import ( "fmt" "os" ) func main() { fmt.Println("test the os package") fmt.Println("Args len", len(os.Args)) for i, arg := range os.Args { fmt.Println("arg", i) fmt.Println("arg", arg) } fileInfo, err := os.Stat("E:\\go\\bin\\studygolang.exe") if err != nil { f...阅读全文

go语言使用protobuf

网上为什么充斥着大量几乎一模一样而且不正确的教程??? 妈的打开一个关于golang和protobuf的教程,无非都是扯他妈的protobuf多么多么牛逼,xml多么多么傻逼,然后就是怎么安装protobuf,然后又是屎一样的示例。 安装过程没一个对的,我搜了那么多博客,全都是一个德行,我先写一下ubuntu的安装步骤,同时适用于mac和其他linux,而且保证是对的。 真的无力吐槽,先说正事,一会接着吐。 一、首先去 https://github.com/google/protobuf 下载protobuf,按照readme的步骤来编译安装。如果执行autogen.sh的过程中出现autoreconf not found的错误,说明没有安装automake,在ubuntu执行sudo ap...阅读全文

博文 2015-07-25 03:00:11 wolfred7464

Golang lint简易使用方法

根据作者的说法: Golint is a linter for Go source code. Golint differs from gofmt. Gofmt reformats Go source code, whereas golint prints out style mistakes. Golint differs from govet. Govet is concerned with correctness, whereas golint is concerned with coding style. Golint is in use at Google, and it seeks to match the accepted style of the open source Go...阅读全文

博文 2015-05-12 20:00:06 dandan.fs

golang对象序列化和反序列化

模拟测试1,000, 000条数据 每条10个字节 也就是10M不到的 数据(高度结构化的数据) 过程 1.对象序列化为 byte 2.byte反序为对象 3.gzip压缩byte 测试语言go测试方案: raw byte,json ,bson, msgpack (protostuff需要先做对象配置文件,比较麻烦,通常认为和msgpack性能相当 )结果:msgpack 胜出 大小 gzip压缩后大小 对象到byte耗时 byte到对象耗时 raw 10000000 6573252(65%) 未测试 未测试 json 47515988 7919511 (17%) 3248ms 5280ms bson 49888910 9506965 (19%) 3863ms 6235ms msgpack ...阅读全文

博文 2014-10-04 19:27:16 咖啡伴侣

golang rabbitmq实践 (一 rabbitmq配置)

1:环境选择 系统为ubuntu 15.04 ,我装在虚拟机里面的 2:rabbitmq tabbitmq 3.5.4 download url : http://www.rabbitmq.com/ 3:安装 在Ubuntu环境下,建议直接下载deb安装包,可以再ubuntu软件包管理中直接安装,并且安装其他依赖包 4:启动 如果是deb包直接安装的话,默认是直接启动的,也可以通过 sudo rabbitmq-server start 启动。如果提示 node with name "rabbit" already running on "ubuntu" ,则已经启动 5:配置 建议直接启用web管理页面来图形化配置,启用管理界面: rabbitmq-plugins enable rabbit...阅读全文

博文 2015-09-12 03:00:00 shi-meng

Go RPC Inside (client)

Go语言标准库能够自带一个rpc框架还是非常给力的,这可以很大程度的降低写后端网络通信服务的门槛,特别是在大规模的分布式系统中,rpc基本是跨机器通信的标配。rpc能够最大程度屏蔽网络细节,让开发者专注在服务功能的开发上面。下面介绍Go语言rpc框架的客户端内部实现. Go rpc客户端的逻辑很简单,大体上,就是将一个个的调用请求序列化后原子的发送给服务器,然后有一个专门的gorutine等待服务器应答,这个goroutine会将收到的每个应答分发给对应的请求,这就完成了一次rpc调用。 调用入口 func NewClient(conn io.ReadWriteCloser) *Client func (client *Client) Call(serviceMethod string, a...阅读全文

博文 2014-11-08 12:49:15 skoo

golang利用gob序列化struct对象保存到本地

golang可以通过json或gob来序列化struct对象,虽然json的序列化更为通用,但利用gob编码可以实现json所不能支持的struct的方法序列化,利用gob包序列化struct保存到本地也十分简单. gob包实现的序列化struct对象保存到本地 务必注意的是golang序列化有个小坑,就是struct里的字段必须要可导出也就是首字母大写 package main import ( "encoding/gob" "fmt" "os" ) type User struct { Id int Name string } func (this *User) Say() string { return this.Name + ` hello world ! ` } func main...阅读全文

博文 2015-04-22 03:00:00 reflectsky

服务监控系统 Prometheus

Prometheus 是一个开源的服务监控系统和时间序列数据库。 ![image](http://static.oschina.net/uploads/space/2015/0205/082749_47Dp_5189.png) 特性: * 高维度数据模型 * 自定义查询语言 * 可视化数据展示 * 高效的存储策略 * 易于运维 * 提供各种客户端开发库 * 警告和报警 * 数据导...阅读全文

gogoprotobuf使用(下)

声明:版权所有,谢绝转载。 承接上文《gogoprotobuf使用(上)》,继续说明gogoprotobuf的各个option。 8 gogoproto.testgen & gogoproto.testgen_all testgen选项为true,则gogo会为相应的message生成一个测试用例与性能测试用例。testgen_all则为相应的package level的option。 pb code: option (gogoproto.testgen_all) = true; option (gogoproto.benchgen_all) = true; message A { string msg = 1; } go code: package test import testing ...阅读全文

博文 2015-03-14 22:00:01 alexstocks

Google GRPC初试

GRPC是一个高性能、通用的开源RPC框架,其由Google主要面向移动应用开发并基于HTTP/2协议标准而设计,基于ProtoBuf(ProtocolBuffers)序列化协议开发,且支持众多开发语言。gRPC提供了一种简单的方法来精确地定义服务和为iOS、Android和后台支持服务自动生成可靠性很强的客户端功能库。客户端充分利用高级流和链接功能,从而有助于节省带宽、降低的TCP链接次数、节省CPU使用、和电池寿命。 1 安装 go get google.golang.org/grpc 2 创建helloworld.proto syntax = "proto3"; option java_package = "io.grpc.examples"; package helloworld; ...阅读全文

博文 2015-04-21 18:00:05 jiangsoft

Go RPC Benchmark

这篇完成得太折腾了,为了更好的展示benchmark的一系列结果数据,我必须得找个软件将数据进行图表化。以前在windows上基本都用execel画曲线图、柱状图等,但在linux/mac上却找不到顺手的工具了。我也使用过gnuplot,这货不知道是太专业,还是太古老的原因,始终用得不顺手、不开心。于是,我就决定自己先用Go和chart.js库折腾了一个goplot工具来绘制图表,然后再才开始写这篇博客。 有人可能会说我又在折腾轮子了,确实是折腾了一个轮子。话说,这又怎么样呢?作为一个程序员,最大的优势就是自己用得不开心的工具,可以自己动手完善、甚至写一个新的。我认为一个geek程序员首先就是要学会不断的装备自己的工具库。不扯废话了,回归正题。 测试维度 这次benchmark主要以下两个维...阅读全文

博文 2014-11-08 12:49:16 skoo

Google gRPC 简介

Google gRPC 简介 1. 简介 Google 刚刚开源了grpc, 一个基于HTTP2 和 Protobuf 的RPC 实现。 其中github地址: https://github.com/grpc/grpc Protobuf 本身虽然提供了RPC 的定义语法,但是一直以来,Google 只开源了Protobuf 序列化反序列化的代码,而没有开源RPC 的实现,于是存在着众多良莠不齐的第三方RPC 实现。 从实现和特性看来,grpc 更多的是考虑移动场景情况下客户端和服务端的通信,正如其自称的「general RPC framework that puts mobile and HTTP/2 first」。HTTP2 本身提供了连接多路复用、Body 和 Header 压缩等机制,...阅读全文

博文 2015-06-17 20:12:47 chenglinhust

听说,你想让自己的Go程序运行的更快?

到现在为止,我已经忘记了我在写什么,但我确定这篇文章是关于Go语言的。这主要是一篇,关于运行速度,而不是开发速度的文章——这两种速度是有区别的。 我曾经和很多聪明的人一起工作。我们很多人都对性能问题很痴迷,我们之前所做的是尝试逼近能够预期的(性能)的极限。应用引擎有一些非常严格的性能要求,所以我们才会做出改变。自从使用了Go语言之后,我们已经学习到了很多提升性能以及让Go在系统编程中正常运转的方法。 Go的简单和原生并发使其成为一门非常有吸引力的后端开发语言,但更大的问题是它如何应对延迟敏感的应用场景?是否值得牺牲语言的简洁性使其速度更快?让我们来一起看一下Go语言性能优化的几个方面:语言特性、内存管理、并发,并根据这些做出合适的优化决策。所有这里介绍的测试代码都在这里.一、Channels...阅读全文

博文 2016-04-26 10:40:31 erlib

【玩转Golang】 自定义json序列化对象时,非法字符错误原因

由于前台web页面传来的日期对象是这样的格式“2010-11-03 15:23:22”,所以我安装网上查来的办法,自定义包装了time.Time对象,实现自己的Marshal和UnMarshal方法 type DateTime struct { time.Time } const ctLayout = "2006-01-02 15:04:05" const ctLayout_nosec = "2006-01-02 15:04" const ctLayout_date = "2006-01-02" func (this *DateTime) UnmarshalJSON(b []byte) (err error) { if b[0] == '"' && b[len(b)-1] == '"' { ...阅读全文

博文 2014-12-30 22:00:01 dajianshi

megajson 高性能的json序列化、反序列化工具

go 自带的 encoding/json 支持json的序列化和反序列化, 然而它是基于反射的,有下面几个缺点: 反射是性能差的代名词, 并且无法在编译时进行优化。 只有 Public 字段才可以,反射库只能反射出暴露出来的字段,这意味着你无法对private 字段进行JSON转化。 https://github.com/benbjohnson/megajson 针对这个问题做了优化,它是一个代码生成工具, 通过使用 go/parser 和 go/ast 包去产生你自己类型实体的自定义的 序列号和反序列化代码。 这里的序列号和反序列化知道你的数据类型,所以不会用反射,继而解决了上面问题。 通过测试, Go 1.2 下, Megajson 比 encoding/json 包有2倍的性能提升。 ...阅读全文

博文 2015-03-27 09:43:29 ghj1976

golang -- 序列化 msgpack & json

下面总结一下go的序列化,通信中常用的格式:msgpack和json msgpack 安装: go get go get github.com/vmihailenco/msgpack go install github.com/vmihailenco/msgpack api:http://godoc.org/github.com/vmihailenco/msgpack func ExampleEncode() { b, err := msgpack.Marshal(true) fmt.Printf("%v %#v\n", err, b) // Output: []byte{0xc3} } func ExampleDecode() { var out bool err := msg...阅读全文

博文 2014-10-04 19:27:07 flyking

Go高性能编程技巧

1.在高并发队列任务分发的场景中Ring Buffer比Channel的性能更好 2.defer功能不是静态编译时提供的,而是运行时提供的,所以使用defer会产生一些额外的性能开销(了解就好,该用还是得用) 3.encoding/json序列化是通过反射机制实现的,性能很差,可以使用ffjson生成encode/decode代码来提升性能。如果可能,使用MsgPack替代JSON,因为MsgPack性能更好。 4.在栈中创建对象比在堆中创建对象性能高,所以少用new来创建对象。需要创建大量临时对象的场景可以使用sync.Pool已减少GC的压力。 5.在性能要求特别高的并发访问同一个对象的场景中,可以通过增加padding的方式避免false sharing,提升CPU cache的命中率...阅读全文

博文 2016-04-21 03:00:06 shijingxiang

Go RPC

什么是RPC? RPC是Remote Procedure Call的缩写,从字面意思理解就是远程过程调用,具体可以见维基百科的解释,如果你英文足够好可以看这里wikipedia,我的理解可以简单的用一句话来描述:RPC就是一个本地程序可以通过网络调用远程的一个子程序。 Go RPC Go的RPC中如果客户端是Go语言编写的则将用Go特有的Gob序列化,同时可以选择rpc/jsonrpc包来用json格式序列化以便和其他的RPC System交互。 Go中的RPC有以下几个限制: 1.Remote Procedure必须是公共的,对于Go的话函数首字母必须大写。 2.Remote Procedure必须又且仅有两个参数,第一个参数是一个指向从客户端接受的数据指针,第二个参数是一个指向返回给客户...阅读全文

博文 2014-11-05 12:00:00 wowzai

Go RPC Inside (server)

说到rpc让我想起了刚毕业面试的时候,被问到是否了解rpc?我记得当时我的回答是“课本上学过rpc,只知道是远程过程调用,但没有用过,具体也不知道是什么”。的确,大学中间件这门课程里有讲到rpc,里面还引入了一个非常难理解的概念——“桩”,英文应该叫”stub”。现在的rpc实现里,stub这个概念好像都没见到了,应该都是叫”method”。 实现一个rpc服务器很难吗?rpc服务器也就是在tcp服务器的基础上加上自定义的rpc协议而已。一个rpc协议里,主要有个3个非常重要的信息。 调用的远程method名字,一般就是一个函数名 call参数,也就是发送给服务器的数据 客户端生成的调用请求seq 除了最后一点,其他两点显然就是组成一个普通的函数调用而已,这也就是远程过程调用了。最后一点的s...阅读全文

博文 2014-11-08 12:49:15 skoo

Go官方库RPC开发指南

Go官方提供了一个RPC库: net/rpc。包rpc提供了通过网络访问一个对象的方法的能力。服务器需要注册对象, 通过对象的类型名暴露这个服务。注册后这个对象的输出方法就可以远程调用,这个库封装了底层传输的细节,包括序列化。服务器可以注册多个不同类型的对象,但是注册相同类型的多个对象的时候回出错。 我最近写了一本电子书: Go RPC开发指南,介绍Go RPC开发的相关技术,这是其中的一章,专门介绍官方库 net/rpc的使用。 同时,如果对象的方法要能远程访问,它们必须满足一定的条件,否则这个对象的方法回呗忽略。 这些条件是: 方法的类型是可输出的 (the method's type is exported) 方法本身也是可输出的 (the method is exported) 方法...阅读全文

博文 2016-09-19 01:00:02 colobu

NSQ 最新版本(0.3.5)官方文档中文版

NSQ是一个基于Go语言的分布式实时消息平台,它基于MIT开源协议发布,代码托管在GitHub。NSQ可用于大规模系统中的实时消息服务,并且每天能够处理数亿级别的消息,其设计目标是为在分布式环境下运行的去中心化服务提供一个强大的基础架构。NSQ具有分布式、去中心化的拓扑结构,该结构具有无单点故障、故障容错、高可用性以及能够保证消息的可靠传递的特征。NSQ非常容易配置和部署,且具有最大的灵活性,支持众多消息协议。另外,官方还提供了拆箱即用Go和Python库。 本指南是 NSQ 官网 的中文翻译版本,基于最新版本 0.3.5 适用人群 本教程是给那些想详细了解如何使用 NSQ 分布式实时系统的开发人员编写的。 学习前提 在学习本教程之前,你需要对 Go 语言和计算机网络相...阅读全文

用Go开发WeChat接口的一个小坑

年前公司接入了微信国际版的支付,当时WeChat Wallet本身的接口还没开发完(上几周WeChat Wallet 终于结束灰度全面开放了), 接入时踩了一大堆坑。 除了当时因为给的文档并不全或错误造成的一些困扰外, 另外有个接口问题折磨了好一阵。 当时有这样一个问题,当支付完成时,需要去WeChat支付后台查看支付状态。 但我依文档的JSON格式,加密和序列化后,提交给WeChat查单接口,老提示签名不对。 查询的规则很简单,前面支付的规则也是类似写法也没问题,按理查询不应当出现这种问题的。 后来在前端经验丰富的同事和微信那边开发的支持下才查出,原来问题出在JSON序列化上. Go语言序列化会自动对一些特殊字符会作编码处理,而WeChat后台查询那边接口不会识别, 但WeChat支付那边...阅读全文

博文 2016-02-18 14:00:02 xcltapestry

windows下 sublime text2配置gdb 调试golang

1. 下载gdb for windows ,点此下载 2.解压后,将目录添加到环境变量path 3. 安装sublimeGdb, 打开sublime text2 ,ctrl+shift+p, install package,选择sublimeGdb,回车 4.配置setting , 在sublime text2 中,选择菜单 Preferences--Package settings--SublimeGdb--Setting Default ,设置其下两项。workingdir是gopath的工作区,也就是项目exe生成的路径。commandline 最重要是 后面main.exe 替换成你的可执行文件。 // Example: ${folder:/path/to/file} is repl...阅读全文

博文 2014-10-04 19:27:16 阳光灿烂的日子

Go语言如何深度拷贝对象

深度复制可以基于reflect包的反射机制完成, 但是全部重头手写的话会很繁琐. 最简单的方式是基于序列化和反序列化来实现对象的深度复制: func deepCopy(dst, src interface{}) error { var buf bytes.Buffer if err := gob.NewEncoder(&buf).Encode(src); err != nil { return err } return gob.NewDecoder(bytes.NewBuffer(buf.Bytes())).Decode(dst) } Gob和bytes.Buffer简单组合就搞定了. 当然, Gob的底层也是基于reflect包完成的. 在内存中序列化,反序列化对象实体 来完成对象实体的深...阅读全文

博文 2016-04-29 16:00:01 hittata

go语言切片slice的线程协程安全问题

见代码注释: package main import ( "fmt" "sync" ) func main() { sourceArray := [...]string{"a", "b", "c", "d", "e", "f", "g"} fmt.Println(sourceArray) slice_1 := sourceArray[:4] slice_2 := sourceArray[2:] slice_3 := sourceArray[1:] slice_4 := slice_3[1:] slice_5 := slice_4[1:] slice_1[3] = "i" fmt.Println(sourceArray) fmt.Println(slice_1) fmt.Println(sli...阅读全文

博文 2016-03-25 15:00:01 htyu_0203_39

听说,你想让自己的Go程序运行的更快?

到现在为止,我已经忘记了我在写什么,但我确定这篇文章是关于Go语言的。这主要是一篇,关于运行速度,而不是开发速度的文章——这两种速度是有区别的。 我曾经和很多聪明的人一起工作。我们很多人都对性能问题很痴迷,我们之前所做的是尝试逼近能够预期的(性能)的极限。应用引擎有一些非常严格的性能要求,所以我们才会做出改变。自从使用了Go语言之后,我们已经学习到了很多提升性能以及让Go在系统编程中正常运转的方法。 Go的简单和原生并发使其成为一门非常有吸引力的后端开发语言,但更大的问题是它如何应对延迟敏感的应用场景?是否值得牺牲语言的简洁性使其速度更快?让我们来一起看一下Go语言性能优化的几个方面:语言特性、内存管理、并发,并根据这些做出合适的优化决策。所有这里介绍的测试代码都在这里.一、Channels...阅读全文

博文 2016-04-22 16:00:00 abv123456789

高性能 golang 网络库 xingo

## xingo 高性能 golang 网络库,游戏开发脚手架。 默认通信协议如下(支持自定义协议处理部分代码,支持灵活的重载协议部分代码): * Len uint32 数据 Data 部分长度 * MsgId uint32 消息号 * Data []byte 数据 * 消息默认通过 google 的 protobuf 进行序列化 服务器全局配置对象为 GlobalObject,支持的配置选项及默认值如下: * TcpPort: 8109,//服务器监听端口 * MaxConn: 12000,//支持最大链接数 * LogPath: "./log",//日志文件路径 * LogName: "server.log",//日志文件名 * M...阅读全文

go语言工程管理

1.建立工程 1---设置$GOPATH环境变量 如在~/.bashrc中加入如下语句export $GOPAHT=/home/jj/goproj (别忘了source ~/.bashrc) 2--建立工程目录 cd /home/jj mkdir goproj cd goproj mkdir src (此文件夹必须命名为src) mkdr bin (此文件夹可任意命名) 3--在src目录下添加源文件 cd ./src vim main.go (main 这个名字不是必须的可以是任意名字) mkdir lib cd ./lib vim lib1.go (编辑一个库,供main.go调用,可以是多个 ,且名字任意的) 2.编译工程 cd $GOPATH/bin go build main (必...阅读全文

博文 2014-12-25 07:00:01 plc_jianghao

go-lexer-词法分析

词法分析一般是编译器的第一部分,而且词法分析很简单,就是一个有限状态机.开始词法分析的过程就是把源文件转换成一组预先定义好的token的过程.这一组被统一表现的token之后会被送入语法分析器进行语法解析,这里我们主要关注如何进行词法分析. 做词法分析就几种方法: 直接使用工具比如lex. 使用更低一层的正则表达式. 使用状态动作,构造一个状态机. 而真正实现一个语言的话,使用工具没有什么错,但是问题是,很难获得正确的错误提示.工具生成的错误处理很弱.而且需要学习另一门规则或特定的语法.生成的代码可能性能不好,难以优化,但是用工具可以非常简单实现词法分析.早期编译器的设计阶段都会使用lex来做词法分析器,比如gcc和Go都是这么做的,但是到了后期一个真正生产化的语言可能不能依赖生成的代码,而...阅读全文

博文 2016-04-12 10:32:31 yueyue.gao

如何运行一个golang程序为守护进程

http://www.hiceon.com/topic/how-to-start-a-golang-program-as-a-daemon/ 安装daemonize 安装git环境 yum install git -y 获取daemonize git clone git://github.com/bmc/daemonize.git 安装daemonize cd daemonize./configuremake && make install 查看是否安装 daemonize -v 通过daemonize执行golang守护进程 你需要打包你的golang程序为可执行文件(go build),并通过daemonize来执行它来实现守护进程,如: daemonize -p /var/run/my...阅读全文

博文 2015-09-13 14:00:30 leonpengweicn

msgpack在java/c和go中序列化的区别-解决

既然已经知道msgpack-java/msgpack-c里,默认情况下把class pack成类似json-array 而msgpack-go,默认情况下把class pack成类似json-map 顺着这个,翻看msgpack-Go的代码,找到了MsgpackHandle 。。。。中间过程省略 最后找到答案,其实msgpack-go已经提供好api package main import ( "fmt" "github.com/ugorji/go/codec" ) type UserStruct struct { ID int32 Name string } var ( b []byte mh codec.MsgpackHandle ) func main() { user := User...阅读全文

博文 2014-10-04 19:26:30 咖啡伴侣

对比 Python 和 Go 语言的每秒请求数

我使用Python工作已经有几年了,最近开始了一个关于GO的调查,主要看作是一个缓解瓶颈的实验,还没有大规模web服务器部署。 我用不同语言写了一个简单的REST服务,使用ab工具检测响应速度。 Python server.py 01 from bottle import route, run 02 03 @route('/') 04 def home(): 05 article = {'name': 'A Royal Baby', 'body':'A slow news week'} 06 return article 07 08 def main(): 09 run(host='localhost', port=8081) 10 11 if __name__ == '__main__':...阅读全文

博文 2014-12-20 10:00:01 zajin

go语言序列化对象为二进制

package main import ( "bytes" "encoding/binary" "fmt" ) type Register struct { ACTION int32 SID int32 } func ExampleWrite() []byte { buf := new(bytes.Buffer) var info Register info.ACTION = 20004 info.SID = 6 err := binary.Write(buf, binary.LittleEndian, info) if err != nil { fmt.Println("binary.Write failed:", err) } fmt.Printf("% x\n", buf.Bytes(...阅读全文

博文 2015-06-17 23:07:25 body100123

golang中map并发读写问题及解决方法

一、map并发读写问题 如果map由多协程同时读和写就会出现 fatal error:concurrent map read and map write的错误 如下代码很容易就出现map并发读写问题 func main(){ c := make(map[string]int) go func() {//开一个协程写map for j := 0; j < 1000000; j++ { c[fmt.Sprintf("%d", j)] = j } }() go func() { //开一个协程读map for j := 0; j < 1000000; j++ { fmt.Println(c[fmt.Sprintf("%d",j)]) } }() time.Sleep(time.Second*20)...阅读全文

博文 2017-03-05 14:02:54 skh2015java

快速JSON序列化 Easyjson

Easyjson用于序列化JSON数据,采用Go语言编写,而不是通过使用反射生成编组代码。一个库的目的之一是使所生成的代码足够简单,使得它可以容易地优化或固定。另一个目标是为用户提供不可定制的“encoding/json”,如产生snake_case名称或启用默认“omitempty“生成代码。 用法:

go get github.com/mailru/easyjson/...
easyjson -all <file>.go
这将 利用编组/解组方法 结构 生成<file>_easyjson.go 。 限制: ...阅读全文

go语言json序列化与反序列化

package main import ( "encoding/json" "fmt" ) type Change struct { Mid int //菜单Id Actions []string //拥有的权限 "add" "view" "delete" "update" } type Change_slice struct { ChgArr []Change //一个角色对应的菜单以及权限 } func main() { //对象序列化为json字符串---------------------------------Begin var c1, c2 Change var msg Change_slice c1.Mid = 1 c1.Actions = []string{"view", "...阅读全文

博文 2015-06-17 23:02:08 zhifeiya