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

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时间处理(time.Time)

1. 前言时间包括时间值和时区, 没有包含时区信息的时间是不完整的、有歧义的. 和外界传递或解析时间数据时, 应当像HTTP协议或unix-timestamp那样, 使用没有时区歧义的格式, 如果使用某些没有包含时区的非标准的时间表示格式(如yyyy-mm-dd HH:MM:SS), 是有隐患的, 因为解析时会使用场景的默认设置, 如系统时区, 数据库默认时区可能引发事故. 确保服务器系统、数据库、应用程序使用统一的时区, 如果因为一些历史原因, 应用程序各自保持着不同时区, 那么编程时要小心检查代码, 知道时间数据在使用不同时区的程序之间交换时的行为. 第三节会详细解释go程序在不同场景下time.Time的行为. 2. Time的数据结构go1.9之前, time.Time的定义为 ty...阅读全文

博文 2017-12-18 05:57:14 hanjm

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编译...阅读全文

golang高性能日志库zap配置示例

golang高性能日志库zap配置示例 zap是uber开源的Go高性能日志库,gitlab地址 安装 go get -u go.uber.org/zap 请注意,zap仅支持两个最新的Go版本。 示例 简单示例 格式化输出 package main import ( "go.uber.org/zap" "time" ) func main() { // zap.NewDevelopment 格式化输出 logger, _ := zap.NewDevelopment() defer logger.Sync() logger.Info("无法获取网址", zap.String("url", "http://www.baidu.com"), zap.Int("attempt", 3), zap....阅读全文

博文 2019-01-02 19:34:47 阿甘__

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

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

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

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

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-18 17:00:02 colobu

golang time 格式化 format

名词 MarshalJSON 序列化:意思是将某种结构转化为字符串格式 UnmarshalJSON 反序列化:意思是将字符串形式转化为某种结构形式 golang的时间格式 默认采用的是RFC3339,与我们常认知的格式不同,故需要转化,但是这个转化目前也有点麻烦,一种方法是重写两个接口(marshaljson跟unmarshaljson)方法。如下: package main import ( "encoding/json" "fmt" "time" ) type JSONTime struct { time.Time } func (t *JSONTime) MarshalJSON() ([]byte, error) { // 这是个奇葩,必须是这个时间点, 据说是go诞生之日, 记忆方法...阅读全文

博文 2019-07-28 13:32:41 timehorse

Go 在万亿级大数据平台开发中的实战

导语迅猛发展的互联网将我们带入了大数据时代,大数据已经成为发展中不可或缺的力量支撑,大数据挑战和机遇并存,如何更好合理、灵活应用大数据是企业的关注所在。七牛大数据团队研发工程师孙健波为大家带来题为Go 在大数据开发中的实战经验的技术分享。以下是此次演讲内容整理。作者介绍:孙健波,InfoQ 专栏作者,硕士毕业于浙江大学计算机学院,2015 年底加入七牛,参与并负责七牛大数据平台整条链路多模块的架构设计以及开发工作,包括大数据计算引擎、时序数据库服务以及日志检索服务。在此之前主要研究和参与 Cloudfoundry、Kubernetes、Docker 等容器与容器云相关工作,是《Docker 容器与容器云》一书的主要作者之一。大数据图 1如图 1 可以看到,现在大数据的生态相对来说比较成熟了,...阅读全文

博文 2017-08-30 05:45:40 孙健波

Golang RPC 之 Thrift

Thrift 简介: Thrift 是一款高性能、开源的 RPC 框架,产自 Facebook 后贡献给了 Apache,Thrift 囊括了整个 RPC 的上下游体系,自带序列化编译工具,因为 Thrift 采用的是二进制序列化,并且与 gRPC 一样使用的都是长连接建立 client 与 server 之间的通讯,相比于比传统的使用XML,JSON,SOAP等短连接的解决方案性能要快得多。本篇只介绍 Golang 关于 Thrift 的基础使用。 安装 安装 Thrift 的 Golang 库有两种方案: 直接通过 go get 命令安装,缺点是因为不可抗拒的网络因素大部分人可能会失败:$ go get git.apache.org/thrift.git/lib/go/thrift 通过...阅读全文

博文 2017-03-17 05:52:34 谢烟客

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 咖啡伴侣

Go 获取当前可执行文件的所在目录

代码如下: import ( "errors" "os" "os/exec" "path/filepath" "strings" ) func GetCurrentPath() (string, error) { file, err := exec.LookPath(os.Args[0]) if err != nil { return "", err } path, err := filepath.Abs(file) if err != nil { return "", err } i := strings.LastIndex(path, "/") if i < 0 { i = strings.LastIndex(path, "\\") } if i < 0 { return "", err...阅读全文

博文 2017-02-13 04:00:26 风华神使

微服务API网关Goku - 基于 Golang 开发的超高性能的企业级微服务API网关

A Powerful HTTP API Gateway in pure golang!Goku API Gateway (中文名:悟空 API 网关)是一个基于 Golang开发的微服务网关,能够实现高性能 HTTP API 转发、多租户管理、API 访问权限控制等目的,拥有强大的自定义插件系统可以自行扩展,并且提供友好的图形化配置界面,能够快速帮助企业进行 API 服务治理、提高 API 服务的稳定性和安全性...阅读全文

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

聊聊GOPATH、GOROOT

在go语言中环境变量GOPATH和GOROOT需要设置好才可进行开发编译,学过JAVA的朋友理解起来就比较快,这里就这两个变量作个详细的说明,不足之处,请大家批评指正。1. GOROOT简而言之,GOROOT在GO语言中表示的是go语言编译、工具、标准库等的安装路径,在Linux系统中一般安装在/usr/go或者/usr/local/go,这样Linux系统中的PATH变量一般都包含了这两个目录,所以就可以直接运行go命令,而Windows系统中一般默认安装在C:\go中。如果自定义安装go的话,需要设置GOROOT的值,比如在Linux系统中用户如有root用户权限时,想安装go至自己的工作目录中,就要设置GOROOT为自己的HOME目录中,假设安装在/home/目录中的go目录,则需要这...阅读全文

博文 2017-07-02 03:12:12 jasonvfang

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

今日头条Go建千亿级微服务的实践

今日头条使用 Go 语言构建了大规模的微服务架构,本文结合 Go 语言特性着重讲解了并发,超时控制,性能等在构建微服务中的实践 编者按:本文来自微信公众号“InfoQ”(ID:infoqchina),作者项超;36氪经授权发布。 今日头条当前后端服务超过80%的流量是跑在 Go 构建的服务上。微服务数量超过100个,高峰 QPS 超过700万,日处理请求量超过3000亿,是业内最大规模的 Go 应用。 Go 构建微服务的历程 在2015年之前,头条的主要编程语言是 Python 以及部分 C++。随着业务和流量的快速增长,服务端的压力越来越大,随之而来问题频出。Python 的解释性语言特性以及其落后的多进程服务模型受到了巨大的挑战。此外,当时的服务端架构是一个典型的单体架构,耦合严重,部分...阅读全文

博文 2017-06-23 10:03:31 强子哥哥

微服务GMS

# GMS 今天是2020年10月24日,一年一度的程序员节,把这个还在开发中的项目开源出来,感兴趣的朋友可以一起参与开发。如果有大神路过请多指教。 GMS是一款基于[gnet](https://github.com/panjf2000/gnet)网络框架开发的Golang RPC微服务框架。 ## 特点: **1:非常简单、学习成本极低。GMS处于初期阶段您想参与开发也非常简单。** ​ 只要您之前使用过类似Gin、beego这样的web框架。就能快速上手,使用方法和这些web框架一样简单。 **2: 不用定义proto等协议文件。** ​ 写proto文件不仅麻烦还容易出错。而且使用协议文件定义服务,最终在框架内部实现都要使用反射去调用目标方...阅读全文

开源项目 2020-10-25 10:42:08

golang json

第一次写 go 代码,研究了一下 json 解析。没想到事情还挺多。 ```go package main import ( "encoding/json" "fmt" "github.com/bitly/go-simplejson" ) type personInfo struct { Name string `json:"name"` Age int `json:"age"` Email string `json:"email" xml:"email"` } type personInfo1 struct { Name string `json:"name"` Email string `json:"email" xml:"email"` C string } func main() {...阅读全文

博文 2018-12-28 23:44:23 GuoDapeng

Golang语言Post发送 json形式的请求

项目中需要用到Go语言,所以,快速学习了下,使用net/http库写了一个发送json数据的POST请求。 示例: package main import ( "bytes" "fmt" "io/ioutil" "net/http" ) func main() { url := "http://baidu.com" fmt.Println("URL:>", url) //登陆用户名 usrId := "LaoWong" //登陆密码 pwd := "pwd1234" //json序列化 post := "{ \"UserId\":\"" + usrId + "\",\"Password\":\"" + pwd + "\"}" fmt.Println(url, "post", post) va...阅读全文

博文 2017-03-09 03:00:55 Corwien

【互联网早报】2017.11.01

## ??国内新闻?? 1. 京东物流启动青流计划 引进千辆新能源车 http://t.cn/RWF2156   2. 22家基金集体下调乐视网估值:最大折价52%至7.34元 http://t.cn/RWkCNIp   3. ofo回应“顶风”投放新车:总量绝无新增 实际在减少 http://t.cn/RWkyAql   4. 人工智能公司旷视科技完成4.6亿美元C轮融资 http://t.cn/RWFP9ua   ## ?国际新闻? 1. 三星电子第三季营业利润同比增179%创新高 http://t.cn/RWkdrw0   2. SpaceX今年第16次发射,并且成功回收火箭 http://t.cn/RWDhXwW 3...阅读全文

go.js简介及实例演示

GoJS是一个JavaScript库,让你轻松创建现代Web浏览器的交互图。 GoJS支持图形化的模板和图形对象属性数据模型的数据绑定。你只需要保存和恢复模型,包括持有任何性质的应用需求,简单的JavaScript对象。许多预定义的工具和命令执行,大部分的图表所需要的标准的行为。外观和行为的定制是大多设置属性的问题。 下载地址:http://gojs.net/latest/doc/download.html 使用gojs开发的流程图及拓扑图实例:http://gojs.net/latest/samples/index.html goJS去水印版:http://download.csdn.net/detail/qq_14966339/9569675 goJS实例演示: function ini...阅读全文

博文 2017-03-10 07:00:49 孟飞阳

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 06:02:54 skh2015java

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

[郑州招聘] 功能/性能测试大牛,大数据 leader, Android , C/C++(内核、网络驱动、协议栈、算路等方向) Go/PHP/nodejs ,类比百度 T5 /T6 及以上。欢迎各位老乡年底回家!

**郑州珑凌科技,郑州最优秀的纯互联网公司之一,产品驱动、技术驱动。** 功能 /性能测试大牛,大数据 leader , Android , O-C/Go/PHP/nodejs , C/C++(内核、网络驱动、协议栈、算路、界面开发等方向)类比百度 T5 及以上 最佳 技术帝看这里: mac 电脑、机械键盘、各种资料用书,想要打个报告! 健身帝看这里:台球、乒乓、动感单车、淋浴间、洗衣机 养生派看这里:中央空调、空气净化器、净水器、微波炉、电冰箱 懒觉侠看这里:上班不打卡、弹性工作时间、带薪年假、 x-box 、 htc vr 宿舍条件这里:免费、可做饭、有阳台、上下班方便 其他福利这里:五险一金、节日福利、生日福利、结婚生子礼金、公司营收分红、年终...阅读全文

服务监控系统 Prometheus

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

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微服务

go-kit 入门 1. microservice Go-Kit go kit 是一个分布式的开发工具集,在大型的组织(业务)中可以用来构建微服务。其解决了分布式系统中的大多数常见问题,因此,使用者可以将精力集中在业务逻辑上。 2. go-kit 组件介绍 2.1 Endpoint(端点) Go kit首先解决了RPC消息模式。其使用了一个抽象的 endpoint 来为每一个RPC建立模型。 endpoint通过被一个server进行实现(implement),或是被一个client调用。这是很多 Go kit组件的基本构建代码块。 2.2 Circuit breaker(回路断路器) Circuitbreaker(回路断路器) 模块提供了很多流行的回路断路lib的端点(endpoint)适...阅读全文

博文 2017-03-28 09:00:32 backtrackx

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

钢铁侠背后的贾维斯,阿里背后的无人零售,见证AI 时代的崛起

还记得贾维斯吗?漫威旗下《钢铁侠》男主角的AI管家。超级英雄托尼·史塔克研发出的一款智能系统,并将它命名为贾维斯,以此来纪念他的老管家埃德温·贾维斯。作为一款智能管家、智能软件,它能够独立思考,会帮助主人处理各种事务,计算各种信息,钢铁侠的机甲开发以及方舟反应炉的更新都离不开它的协助。 当钢铁侠托尼·史塔克穿上盔甲时,它还会自动进行虹膜扫描,以确保机甲非外人入侵。 科幻电影能够呈现人类所能想到的种种愿景,包括人工智能、宇宙探险、基因变异、四维空间等物像。智能管家,则是全民人工智能图景的一个物像折射。虽然存在于电影里,但现在,已经有人研究出智能管家初级版,换句话说,在人工智能这块,人类正在逐步将它具象化(注意,这里的具象化,并非指做成实物,而是以另一种形态出现在实际生活中)。 现实中...阅读全文

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

微信公众号小游戏怎么做

微信公众号小游戏怎么做 现在的推广模式更多倾向于移动端,怎么样能够做好移动端的推广?很多人第一时间会想到利用移动的社交软件来进行,从最开始的QQ、微博,到现在的微营销、再到微信公众的运营。整个移动端的推广都在演变。微信公众号的推广一般利用:抽奖、小游戏、活动、优惠券等来吸引用户关注微信公众号。那微信游戏怎么制作呢?微信公众号游戏能让用户在增加用户对公众号的好感,如果游戏做的有趣,可玩性高,自然而然的就会转发的朋友圈,这样能为你的公众号吸引更多的用户关注。 微信小游戏是微信公众号与用户常用的的互动方法,通过游戏互动的形式让用户对你的公众号增加好感,进一步的提升用户的粘性。像之前比较火的,通过公众号的AI问答模式,通过用户发送关键字到公众号上获取信息,进入预先设定好的页面,在问答页面上,通过...阅读全文

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

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

golang-protobuf快速上手指南

什么是protobuf Google Protocol Buffer( 简称 Protobuf) 是 Google 公司内部的混合语言数据标准。 Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。 如何安装protobuf 在github获取protobuf源码,windows系统可以直接下载exe文件:https://github.com/google/protobuf/releases macos和linux环境使用源码进行安装的步骤 # 获取源码包 wget https://github.com/goog...阅读全文

博文 2018-08-21 01:34:46 豆瓣奶茶

golang 判断是否实现interface接口的方法

由于golang的interface使用很灵活,不需要显示的实现接口interface的方法, 有点动态化的感觉, 缺点:如果没有实现interface的方法,强行转换成interface,运行时候异常报错 解决办法:在编译的时候就把这种错误抛出来,上代码: package main import ( "fmt" ) type value interface { Show() } type test_value struct{} // func (value *test_value) Show() { fmt.Printf("test \n") } var _ value = new(test_value) // 使用类似方法处理,编译的时候会报错 func main() { } // --...阅读全文

博文 2017-01-22 10:00:08 golang_yh

[golang]string及map[string]string类型的封装

在处理url参数时,你是否会因为要经常将字符串类型转换为其他类型,而感觉到代码冗长,麻烦?所以我将自己几个项目都用到的字符串封装提取了出来,提供大家使用。具体实现非常简单,可到liamylian/values查看,下面给出用法: import "github.com/liamylian/values" var v values.Value // 设置默认值,如果为空则使用默认值 v = values.Value("") d := v.Default("happy").String() // 空值判断 v = values.Value("") isEmpty := v.IsEmpty() // 类型转换 v = values.Value("1") s := v.String() b := v....阅读全文

博文 2018-09-26 10:34:52 inspii

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

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

golang中json的使用

golang中使用json,经常会使用到两个函数 func Unmarshal(data []byte, v interface{}) error 1 将json反序列化成struct对象 2将json 反序列化到map中 3 将json反序列化到slice中 func Marshal(v interface{}) ([]byte, error)1将struct对象序列化成json 2将map序列化成json 3将slice序列化成json package main import ( "fmt" "encoding/json" ) type User struct { Username string Password string FriendName []string } func mai...阅读全文

博文 2017-03-05 05:55:41 skh2015java

golang json库gjson的使用

官方的json库, 只支持整体的序列化与反序列化. 像其它语言的库, json库都支持单个getValue/setValue这类操作. 找了下golang相关的开源json库, GJSON star数不错,支持的查询功能很丰富. 但是没有写入接口. 找了一圈也没有 找到有写入功能的json库. 能想到的只有定义类型序列化或map序列化了. 以下是正文, 翻译自项目readme: 开始 开始使用GJSON之前, 先安装Go, 然后运行go get: $ go get -u github.com/tidwall/gjson 获取值 Get查询指定路径, 通过.来区分. 比如"name.last"或者"age". 如果找到了匹配路径, 将返回结果. package main import "git...阅读全文

博文 2018-07-09 17:34:54 最近不在

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的json序列化Marshal

func test_json() { x, _ := json.Marshal([]string{"aaa:123", "bbb:456"}) fmt.Println(x) var caps []string json.Unmarshal(x, &caps) fmt.Println(caps) } //输出结果 ------------------------------- [91 34 97 97 97 58 49 50 51 34 44 34 98 98 98 58 52 53 54 34 93] [aaa:123 bbb:456] //把每个字符都转成对应ascill数值 通过反射找到具体的编码器,此例子对应编码器为string func (e *encodeState) string...阅读全文

博文 2015-09-18 19:00:11 webyh

JSON 序列化和反序列化 In Go

笔者之前有写过关于 xml 的使用文章,今天来给大家介绍关于数据序列化和反序列化的一种常见方式 JSON. 尤其是在 http,rpc 的微服务调用中。 基础语法 在 Go 中我们主要使用官方的 encoding/json 包对 json 数据进行序列化和反序列化,主要使用方法有: 序列化: image 反序列化: image 简单的例子 image 当我们运行代码的时候可以得到如下输出结果: image 在这个列子中,我们使用 unmarshal 和 marshal 将一个整数的 JSON 二进制转化为 go int 数据 注意:在实际应用中,我们在序列化和反序列化的时候,需要检查函数返回的 err,如果 err 不为空,表示数据转化失败。 例如:我们把上面例子中 value 类型由 in...阅读全文

博文 2019-04-13 01:34:40 51reboot

聊聊BoltDB:简单使用

说明 -- BoltDB是一个嵌入式key/value的数据库,即只需要将其链接到你的应用程序代码中即可使用BoltDB提供的API来高效的存取数据。而且BoltDB支持完全可序列化的ACID事务,让应用程序可以更简单的处理复杂操作。 BoltDB设计源于LMDB,具有以下特点: * 直接使用API存取数据,没有查询语句; * 支持完全可序列化的ACID事务,这个特性比LevelDB强; * 数据保存在内存映射的文件里。没有wal、线程压缩和垃圾回收; * 通过COW技术,可实现无锁的读写并发,但是无法实现无锁的写写并发,这就注定了读性能超高,但写性能一般,适合与读多写少的场景。 最后,BoltDB使用Golang开发,而且被应用于influxDB项目作为底层存储。 使用 *安装BoltDB...阅读全文

博文 2017-09-09 14:15:59 丁凯

golang的json的时间格式化解决方案

golang的json的时间格式化解决方案 1.通过数据查询的时候指定号格式,这样就不要再转格式了 2.通过time.Time类型穿件别名,然后为这个别名类实现MarshalJSON方法。 以下来自golang的原来注释 If an encountered value implements the Marshaler interface // and is not a nil pointer, Marshal calls its MarshalJSON method // to produce JSON. If no MarshalJSON method is present but the // value implements encoding.TextMarshaler instead...阅读全文

博文 2016-11-08 06:00:05 u013163178

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

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

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