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

Golang 序列化之 ProtoBuf

ProtoBuf: 是一套完整的 IDL(接口描述语言),出自Google,基于 C++ 进行的实现,开发人员可以根据 ProtoBuf 的语言规范生成多种编程语言(Golang、Python、Java 等)的接口代码,本篇只讲述 Golang 的基础操作。据说 ProtoBuf 所生成的二进制文件在存储效率上比 XML 高 3~10 倍,并且处理性能高 1~2 个数量级,这也是选择 ProtoBuf 作为序列化方案的一个重要因素之一。 安装: 安装 protoc :Protoc下载地址,可以根据自己的系统下载相应的 protoc,windows 用户统一下载 win32 版本。 配置 protoc 到系统的环境变量中,执行如下命令查看是否安装成功: $ protoc --version如果...阅读全文

博文 2017-03-07 01:42:03 谢烟客

Go语言的接口和实现类初探(一)

1.引入 接口泛指实体把自己提供给外界的一种抽象化物(可以为另一实体),用以由内部操作分离出外部沟通方法,使其能被修改内部而不影响外界其他实体与其交互的方式。(来源于百度百科) 2.其他语言的接口 java的接口 public interface Animal {//定义接口 void eat(); } public class Dog {//与接口里的方法名相同,但并未实现Animal接口 void eat() { } } public class Cat implements Animal {//实现了Animal接口,并且eat方法必须存在 @Override void eat() { } }3.Go语言的接口 package main import ( "fmt" ) //定义一个接...阅读全文

博文 2015-06-17 23:00:49 Libra412

请问类似游戏同步玩家移动位置的实现方法

是这样最近在做一个服务器同步玩家移动位置和转向的demo,服务器用go客户端用unity,使用TCP,数据发送用protobuf。因为之前没接触过golang所以磕磕绊绊遇到了很多坑。在即将完成的时候发现了一个问题就是几个玩家之间的移动数据接收很不流畅。 一开始以为是服务器的问题,因为每个玩家每隔100毫秒就要发送一次自己的位置和旋转信息,怕是服务器处理不过来。后来加了日志之后发现服务器回传同步都没有什么问题。那可能问题就出在客户端。后来发现可能是玩家每100毫秒接收到服务器同步过来所有其他玩家信息处理不过来,因为接收到之后还需要分包,反序列化数据,根据消息头调用具体方法。所以当有多个客户端之后服务器发回来的包肯定也更大。这里我现在再想办法解决。 但是因为对网络编...阅读全文

Golang 在阿里集团调度&集群管理系统 Sigma 中的实践

阿里巴巴 9 年双 11 经历下来,交易额增长了 280 倍、交易峰值增长 800 多倍、系统数呈现爆发式增长。系统在支撑双 11 过程中的复杂度和支撑难度以指数级形式上升。双 11 峰值的本质是用有限的成本最大化提升用户体验和集群吞吐能力,用合理的代价解决峰值。始于 2011 年建设的调度&集群管理系统 Sigma 就是为了支撑如此庞大的体系而建立的。本文作者李雨前(花名鹰缘) ,阿里巴巴技术专家 2015 年开始参入调度系统的建设,参与和推动调度系统的多个版本的演进以及支持双11大促资源的分配和管理。如果您是资深架构师、Docker/Kubernetes/CloudNative 技术专家,对阿里系统软件事业部感兴趣,欢迎投递简历到 yingyuan.lyq@alibaba-inc.com...阅读全文

博文 2018-08-21 17:36:55 阿里系统软件技术

NodeJs 之父发布下一代 Node -- Deno

近日,Node 之父 Ryan Dahl 发布新的开源项目 [deno](https://github.com/ry/deno),从官方介绍来看,可以认为它是下一代 Node,使用 Go 语言代替 C++ 重新编写跨平台底层内核驱动,上层仍然使用 V8 引擎,最终提供一个安全的 TypeScript 运行时。 它的特性包括: 支持 TypeScript 2.8 开箱即用; 无 package.json,无 npm,不追求兼容 Node; 通过 URL 方式引入依赖而非通过本地模块,并在第一次运行的时候进行加载和缓存,并仅在代码使用–reload运行,依赖才会更新,引入方式如: import { test } from "https://unpkg.com/deno_...阅读全文

golang专有的gob序列化性能分析

为什么要分析gob序列化格式的性能 我自己编的一个单向同步软件(https://gitee.com/rocket049/mysync),混合了RPC和HTTP服务器功能,利用RPC做控制功能,HTTP进行数据上传。最近我有意简化其构造,把其中的http上传功能也用RPC方式实现。但是我担忧会导致性能下降,因为通常对象序列化,将会导致数据量增加,例如JSON序列化后,二进制数据变成16进制数据,数据量倍增。因此我测试了gob序列化前后的体量变化。 测试方法 我编写了一个小程序,参数是输入文件,把这个文件转换为一个结构体,其中包含文件名(strring)和所有数据组成的数组([]byte),然后用golang标准库encoding/gob将这个结构体序列化后保存到另一个文件中,然后比较输入文件和...阅读全文

博文 2018-06-17 22:34:39 从火星来

在 Go 1.11 下调试延迟问题

诊断和调试复杂系统是一件复杂的事。经常需要多个层次的诊断数据来弄清楚延迟问题可能的原因。 一个分布式系统由多个服务器组成,这些服务器互相依赖,共同完成对用户请求的服务。在任何时候, - 系统中的一个进程可能会处理大量的请求。 - 在高并发的服务器中,没有容易的途径能将一个请求生命周期内的各个事件分离出来。 - 在高并发的服务器中,对于响应一个请求所发生的事件,我们没有很好的可见性。 随着 Go 在近些年来变成编写服务器的一门流行语言,我们意识到理解 Go 进程在一个请求的生命周期内发生了什么事的必要性。 在程序执行过程中会发生许多运行时活动:调度、内存分配、垃圾回收等等。但是要将用户代码与运行时事件关联起来,并帮助用户分析运行时事件如何影响他们的性能,这在过去是不可能的。 网站可靠工程师(S...阅读全文

博文 2018-05-27 22:22:43 krystollia

2019公链项目实战 区块链公链项目实战 golang公链项目实战(视频+源码)

任务1:001 – 内容介绍.mp4任务2:002 -Block结构.mp4任务3:003 – 根据区块数据生成区块HASH.mp4任务4:004 – CreateGenesisBlock.mp4任务5:005 – Blockchain结构.mp4任务6:006 – 添加新的区块.mp4任务7:007 – ProofOfWork框架.mp4任务8:008 – 工作量证明算法分析.mp4任务9:009 – target移位处理.mp4任务10:010 – 挖矿算法完整实现.mp4任务11:011 – 判断区块Hash的有效性.mp4任务12:012 – 课程目标.mp4任务13:013 – 区块的序列化和反序列化.mp4任务14:014 – boltdb数据库的创建或者打开.mp4任务15:0...阅读全文

博文 2019-03-12 20:34:43 java20192019

Go-kit调研文档

目录 Go-kit 包介绍 本身不是一个框架,而是一套微服务工具集,是框架的底层,用它的话来说,如果你希望构建一个框架,而Go-kit 就希望成为你的框架的一部分 可以用Go-kit 做适应自己平台的框架 它自身称为toolkit,并不是framework 它主要是为了满足5大原则,单一职责原则,开放原则,封闭原则,依赖倒置原则,接口隔离原则 包内工具 代码生成工具truss https://github.com/metaverse/truss 三层模型 Go-kit最核心是提供了三层模型来解耦业务,这是我们用它的主要目的,模型由上到下分别是 transport -> endpoint -> service 1. Transport 可以理解为是个拦截器,负责请求协议的实现和路由转发,请求和...阅读全文

博文 2019-06-09 18:02:41 简单的计划

go使用protobuf如何判断接收到的数据?

我是刚学go的小白,最近参考golang服务器写了一个通讯程序,golang作为服务器用tcp连接unity3d,传输消息用的是protobuf。但是目前遇到一个问题就是客户端发送消息过来(有可能是各种消息,角色移动,角色请求,角色死亡等)服务器这边如何判断具体应该是哪一个消息呢?我给消息加了消息头原本是想通过消息头判断的,但是才发现protobuf在反序列化的时候就必须指定类型了,例如: mp := &message.ConnetInf{} err := proto.Unmarshal(data, mp) 反序列化时必须指定mp是我发送的ConnetInf消息。但是目前问题是在我不确定mp是什么类型的时候该如何反序列化呢?不知有没有做过的大神给指点一两句。谢谢了T ...阅读全文

GRPC的HTTP返回值int64被转为string类型

问题描述 最近在使用http接口访问一个GRPC的服务时遇到一个数据类型转换的问题。一个时间戳字段在PB中定义的字段类型为uint64,返回到本地之后却是一个string类型,在我用uint64去接收这个字段时报了错。 原因分析 为什么GRPC要把int64转为string类型呢,他们的回答是遵循proto3的序列化规则,proto3的json-mapping中规定了int64/uint64/fixed64类型映射的json类型为string。如图:(PB文档地址:https://developers.google.com/protocol-buffers/docs/proto3#json) pb-josnMapping.jpg 很多人都质疑PB的这个行为,然而这并不能改变什么,下面是一个关...阅读全文

博文 2019-10-23 21:32:53 aside section._1OhGeD

golang 使用 protobuf

# 1 Protobuf简介 Google Protocol Buffer( 简称 Protobuf)是Google公司内部的混合语言数据标准,他们主要用于RPC系统和持续数据存储系统。 # 2 Protobuf 应用场景 Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或RPC数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。 简单来说,Protobuf的功能类似于XML,即负责把某种数据结构的信息,以某种格式保存起来。主要用于数据存储、传输协议等使用场景。 # 3 Protobuf 优缺点 ### 优点 * **性能好/效率高** * 时间维度:XML,JSON格式...阅读全文

博文 2019-12-27 18:19:07 jinchunguang

对比 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

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

如何通过reflect动态创建struct并赋值??

我通过protobuf定义了n个message结构,并通过protoc编译生成了对应的struct。 所以在xxx.pb.go中有 typedef name1 struct{......}, typedef name2 struct {...}, ......typedef nameN struct{.....} 现在,我收到了这样一条信息,name, []byte,通过name我知道了对应结构体的名字,通过[]byte我知道了对应结构体序列化后的内容,现在我要生成相应的结构体。 我查了相关资料,步骤如下: ``` package main import ( "fmt" "reflect" ) type Foo struct { name string }...阅读全文

golang json反序列化time格式问题

前段时间碰到两处json.Unmarshal()时时间格式错误问题,一处是反序列化php提交的post参数,另一处是从kafka读取的python提交的message。都碰到时间格式不是rfc3339无法解析的问题。查了golang标准库 struct time 源码,发现time默认是以rfc3339的格式进行序列化反序列化的: // MarshalJSON implements the json.Marshaler interface. // The time is a quoted string in RFC 3339 format, with sub-second precision added if present. func (t Time) MarshalJSON() ([]b...阅读全文

博文 2019-04-27 23:34:43 番茄树叶

基于 Go 的高效缓存BigCache

BigCache 是用于在 Go 中写入千兆字节数据的高效缓存。快速,并发,逐行扫描内存缓存,以保持大量条目,而不影响性能。 BigCache 在堆上保留条目,但为它们省略了 GC。 要实现对字节数组的操作,因此在大多数用例中将需要在高速缓存前面进行条目(de)序列化。 ![image](https://static.oschina.net/uploads/space/2017/1006/075023_0fTA_2903254.png) 简单初始化 自定义初始...阅读全文

golang 椭圆曲线加密使用ecdsa

非对称加密算法有RSA、ECDSA,对极大整数做因数分解的难度决定了RSA算法的可靠性,ECDSA为椭圆曲线加密算法,是基于椭圆方程公式,所以安全性要高于RSA。 这里说下使用ecdsa做签名和校验,并不讲原理; golang封装的ecdsa目前只有用私钥加密,公钥做校验,没有解密环节;所以目前可以应用于数字签名; 以下为封装: /** 通过一个随机key创建公钥和私钥 随机key至少为36位 */ func getEcdsaKey(randKey string) (*ecdsa.PrivateKey, ecdsa.PublicKey, error){ var err error var prk *ecdsa.PrivateKey var puk ecdsa.PublicKey var cu...阅读全文

go语言中struct结构体的使用

一、struct的特点 1、用来自定义复杂数据结构 2、struct里面可以包含多个字段(属性) 3、struct类型可以定义方法,注意和函数的区分 4、struct类型是值类型 5、struct类型可以嵌套 6、GO语言没有class类型,只有struct类型 二、struct的定义 1、struct声明: type 标识符 struct { Name string Age int Score int } 2、struct 中字段访问:和其他语言一样,使用点例子 type Student struct { Name string Age int Score int } func main(){ var stu Student stu.Name = "lilei" stu.Age = 22 ...阅读全文

博文 2019-05-13 12:35:18 qq5c9c828bc8d4b

ElasticHD:ElasticSearch Dashboard Go Application. 【工具、无需安装】

ElasticHD:ElasticSearch Dashboard Go ApplicationElasticHD 是一款 ElasticSearch的可视化应用。不依赖ES的插件安装,更便捷;导航栏直接填写对应的ES IP和端口就可以操作Es了。目前支持如下功能: ES Real time data search ES Dashboard data visualization ES Index Template (在线修改、查看、上传) ES Indices Index deletion and search SQL Converts to Elasticsearch DSL ES 基本查询文档 Downloads ElasticHD【Precompiled binaries】 for s...阅读全文

博文 2017-06-17 12:38:18 farmerx

快速JSON序列化 Easyjson

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

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

go学习网站

是国外的go.dev的本土化网站 https://golangclub.com 中国社区的不错的网站,可以下载源码包可以看到翻译的书籍,还有标准库包的可以查阅 https://studygolang.com/ studygolang类似 https://www.golangtc.com/ 也是同上只是不够全面的 https://gocn.vip/m/ 官方中文网,很多东西嗯都可以过得 https://golang.google.c...阅读全文

博文 2020-01-01 15:32:39 世界之树weight

阿里云Elasticsearch的X-Pack:机器学习、安全保障和可视化

摘要: ELK是日志分析领域较为流行的技术选择,不少阿里云用户选择在ECS上搭建开源Elasticsearch。与自建开源Elastisearch相比,阿里云Elasticsearch做了性能优化,支持弹性扩容,并搭载了商业版组件X-Pack,为用户提供即开即用的托管服务。 ![图片描述][1] X-Pack ELK是日志分析领域较为流行的技术选择,不少阿里云用户选择在ECS上搭建开源Elasticsearch。目前,阿里云和ES官方Elastic公司展开了产品合作,联合推出了阿里云Elasticsearch。与自建开源软件相比,这款产品做了性能优化,支持弹性扩容,并搭载了商业版组件X-Pack,为用户提供即开即用的托管服务。本文将对商业版组件X-Pack做深入解读。 **...阅读全文

[golang]将结构体方法序列化到JSON

在写Restful API时,时常要序列化嵌套的资源,有时还需要定制序列化的字段。传统的方法只有进行结构体嵌套,然后还有将结构体转成map,剔除掉不需要的字段,比较繁琐。而jsonfn使用对象方法的思路,简化了这一流程。 一、序列化指定的字段 import "github.com/liamylian/jsonfn" type Book struct { Id int Title string AuthorId int } // 只序列化Id, Title // bytes = {"Id":1,"Title":"Jane Eyre"} bytes, _, := jsonfn.Marshal(Book{Id: 1, Title: "Jane Eyre", AuthorId: 2}, "Id", ...阅读全文

博文 2018-10-20 22:34:41 inspii

Gocache:一个功能齐全且易于扩展的 Go 缓存库

在先前几周的时候,我完成了 [Gocache](https://github.com/eko/gocache),对于 Go 开发者而言,它是功能齐全且易于扩展的。 这个库的设计目的是为了解决在使用缓存或者使用多种(多级)缓存时所遇到的问题,它为缓存方案制定了一个标准。 ## 背景 当我一开始在为 GraphQL 的 Go 项目构建缓存时,该项目已经包含了一套有简单 API 的内存缓存,还使用了另外一套有不同 API 的内存缓存和加载缓存数据的代码,它们实际上都是在只做了同一件事:缓存。 后来,我们又有了另一个需求:除了内存缓存外,我们还想添加一套基于 Redis 集群的分布式缓存,其主要目的是为了在新版本上线时,避免 Kubernetes 的 Pods 使用的缓存为空。 于是创造 Gocac...阅读全文

博文 2019-12-11 15:28:58 beiping96

Golang语言之Json序列化

Json序列化 指,将具有key-value(键 -> 值)结构的数据类型,例如:go语言中的map, slice,struct...序列化成json格式的字符串的操作。json是一种主流的数据传输格式,灵活轻便... 需要导入一个包 "encoding/json" 上代码 Golang - struct 结构体序列化代码段 //定义一个简单的结构体 Monster type Monster struct { Name string Age int Birthday string Sal float64 Skill string } //写一个 testStruct()结构体的序列化方法 func testStruct() { monster := Monster{ Name: "牛魔王",...阅读全文

博文 2019-10-27 13:32:45 aside section._1OhGeD

优秀跨平台Redis可视化客户端工—RedisViewer

自荐RedisViewer一个有情怀的跨平台Redis可视化客户端工具 感谢头条小哥的精彩推广 — 最美分享Coder 介绍 在以往的文章中曾经介绍过几款Redis的可视化工具,在笔者的印象中Redis至今没有一款非常专业的可视化管理客户端,就算之前介绍过的几款也是差强人意,有些时候满足不了我们的需求,而今天本文要介绍的是另一款值得推荐的Redis可视化客户端,以下通过截图的方式来展示这款软件! 已支持Windows、MacOS、Linux,方便不同平台开发者们使用! 本软件出自@可乐onefineday之手。 技术栈 UI: electron、vue、elenentui 服务: springboot 、webflux 、mybatis 、mapper PS: 现阶段服务JVM使用openj...阅读全文

博文 2019-10-22 23:33:12 aside section._1OhGeD

golang 操作redis5大数据类型(string、hash、list、set、zset)(go-redis)

前言 使用redis首先要部署redis,载个安装包,部署下即可,本文不赘述了。redis官网:https://redis.io/ 接着要下载golang的redis资源包,golang官方推荐的有redisgo和go-reids,个人认为go-redis的封装更加人性化,redisgo的调用是基于命令的,go-redis是基于方法的,所以本文先来介绍go-redis的使用。 2行代码来比较下2种资源包的调用方式:redisgo: client.Do("SET", "mykey", "我是数据", "EX", "3600")go-redis:client.Set("mykey", "我是数据", time.Hour)同样是存储一个1小时后过期的数据,go-redis的调用方式明显更友好。 导...阅读全文

博文 2020-02-07 20:32:39 叶子

GO-struct结构体

一、struct的特点 1、用来自定义复杂数据结构 2、struct里面可以包含多个字段(属性) 3、struct类型可以定义方法,注意和函数的区分 4、struct类型是值类型 5、struct类型可以嵌套 6、GO语言没有class类型,只有struct类型 二、struct的定义 1、struct声明: type 标识符 struct { Name string Age int Score int } 2、struct 中字段访问:和其他语言一样,使用点 例子 type Student struct { Name string Age int Score int } func main(){ var stu Student stu.Name = "lilei" stu.Age = 22...阅读全文

博文 2018-01-12 00:30:01 willpower-chen

Golang在京东列表页实践总结

Golang在京东列表页实践总结 作者:张洪涛 10余年软件开发和设计经验,曾就职于搜狐、搜狗、前matrixjoy公司联合创始人、甘普科技CTO。 目前线上状态 基于搜索实现; 全量数据,搜索结果不理想; 接口响应时间长,影响了用户体验; 没法针对数据做二次优化; 转化率相对较低; 基于以上原因,需要做出改变,所以就需要对老进行重构,如下 重构版本 非全量数据,线下异步根据数据模型进行进行筛选部分最优数据; 要求时时过滤计算,接口相应时间要快,保证用户体验; 数据进行优化,提高转换率,提搞GMV; 为何选择golang golang语言强大的并发能力; 与C相媲美的性能,新版对cpu计算要求较高; 基于以上两点,所以选择了golang语言作为服务端计算使用的语言。 重构后的架构图 解释下架...阅读全文

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

DockOne技术分享(二十五):企业级云平台的实践和思考

【编者的话】嘉宾从事很多年云平台的研发。在本文中他将结合自己的经验向大家分享企业级云应用平台实践和思考相关内容。 今天要讲的题目是《企业级云平台的实践和思考》, 主要涉及一些基于云环境的应用构建的技术, 讲一下我在这方面的一些实践经历和一些思考, 主要讲两个参与开发的系统的功能和设计为主,不会涉及太多细节技术。 当然,我们也可以就一些点具体讨论一下。 资源管理和应用管理基于云的应用平台,我将它分成两类: 一块是资源管理技术, 比如私有云如OpenStack、CloudStack或者公有云技术; 还有就是资源集群管理技术, 在Docker这个技术领域,个人感觉集群技术更适用。另一块就是应用的构建和管理技术, 包括应用资源管理,应用构建、部署、维护、 监控和弹性扩展等技术,以下我会就这两块来分享...阅读全文

博文 2017-06-25 15:01:17 adolphlwq

Golang资源

1 Golang在京东列表页实践总结 地址: http://mp.weixin.qq.com/s?__biz=MjM5OTcxMzE0MQ==&mid=206835939&idx=1&sn=c4cbabc4fccdba123d1c49524b0f40d6&scene=23&srcid=TX91jlytOMbwLmA1Cywd#rd 主要内容: 开发过程中遇到的问题 遇到2个比较严重的问题: Golang自身序列化性能低下 GolangGC困扰 针对第一个序列化、反序列化问题,我们尝试过golang内置的encoding/json、encoding/gob两种方式,但是效果都特别不理想,耗费cpu过多,qps 一直上不去。 后来请教beego作者的谢大同学,给推荐了ffjson,也亲自写了一些...阅读全文

博文 2015-12-24 07:00:00 u012333307

google protobuf安装与使用

google protobuf是一个灵活的、高效的用于序列化数据的协议。相比较XML和JSON格式,protobuf更小、更快、更便捷。google protobuf是跨语言的,并且自带了一个编译器(protoc),只需要用它进行编译,可以编译成Java、python、C++、C#、Go等代码,然后就可以直接使用,不需要再写其他代码,自带有解析的代码。更详细的介绍见: Protocol Buffers protobuf安装 1、下载protobuf代码 google/protobuf 2、安装protobuf tar -xvf protobuf cd protobuf ./configure --prefix=/usr/local/protobuf make make check make ...阅读全文

博文 2016-03-22 11:00:07 luoxn28

Golang gRPC实践 连载一 gRPC介绍与安装

gRPC 是一个高性能、开源、通用的RPC框架,由Google推出,基于HTTP/2协议标准设计开发,默认采用Protocol Buffers数据序列化协议,支持多种开发语言。gRPC提供了一种简单的方法来精确的定义服务,并且为客户端和服务端自动生成可靠的功能库。 主要特性 强大的IDL gRPC使用ProtoBuf来定义服务,ProtoBuf是由Google开发的一种数据序列化协议(类似于XML、JSON、hessian)。ProtoBuf能够将数据进行序列化,并广泛应用在数据存储、通信协议等方面。 多语言支持 gRPC支持多种语言,并能够基于语言自动生成客户端和服务端功能库。目前已提供了C版本grpc、Java版本grpc-java 和 Go版本grpc-go,其它语言的版本正在积极开发...阅读全文

博文 2017-04-14 06:00:38 徐学良

golang map[string]interface{}进行反序列化

js := `{"int":1,"string":"qwertyuiop","float":1.111}` jsm := make(map[string]interface{}) err := json.Unmarshal([]byte(js), &jsm) 数值类型 会全部解析为 float64类型 而不会按照原来的整数int 类型如上述代码中 key为 int 和 float 等数值类型的值,都将解析为 float64。 fork,v := range jsm { switch vType := v (type) { case int: fmt.Println("int",k,strconv.Itoa(vType)) case string:fmt.Println("string",k,...阅读全文

博文 2019-08-21 20:02:42 moyrn

企业网站选择什么网站模板好

为了更好的提高自己的品牌知名度、品牌形象,很多企业开始踏入互联网领域,建设自己的企业网站。想要通过互联网的推广模式来宣传自己的企业。 在建设网站初期时,很多企业会去选择做定制网站,定制网站的优势在于个性化与多样化,在功能上的选择可以按照自己网站的需求来进行制作。缺点在于花费大,耗时长。一般做一个定制网站花费都要上万元左右,对于中小型企业公司,前期的一个投入较大。而且在制作时间方面也是需要很长时间,需要不断的沟通与修改,才能完成好,这样一来整一个上线计划也会拖慢,所以很多企业因为这样的问题而导致措施了黄金上线的机会。 对于刚起步的公司企业还是比较推荐使用网站模板,网站模板的选择多样化,而且省时,花费小,能提高建站的速度。对于中小型企业一开始进行制作网站,网站模板是不错的...阅读全文

go json.Unmarshal序列化时,指定必须存在的字段

# 目的 使用**encoding/json**包的**json.Unmarshal**方法的时候,指定不能为空的字段,若字段为空,Unmarshal报错。 # 具体使用场景 通过Unmarshal方法进行字段必须赋值的过滤,达到统一一处进行判断的效果,之后改起来方便。 # 前言 我们在使用**encoding/json**包的时候,会指定**tag**标签,如下: ```go type A struct { Name string `json:",omitempty"` // 若为空值,则字符串中不会包含它 Value string `xorm:"unique" json:"required"` } ``` 这时,我想要设置某个字段必须赋值,不赋值的时候,json.Unmarshal报错怎...阅读全文

博文 2020-04-14 14:29:39 Grassto

基于Golang协程实现流量统计系统 百度云盘分享

百度云盘下载地址 第1章 课程介绍 第2章 并发模型 第3章 Go的协程 第4章 示例环境搭建 第5章 Go批量生成日志 第6章 统计系统框架构成 第7章 统计系统之日志消费 第8章 统计系统之批量解析 第9章 统计系统之统计逻辑 第10章 统计系统之存储器 第11章 数据可视化 第12章 企业级解决方案及课程总结 获取课程请添加VX:itpenguin image.pn...阅读全文

看到go语言简介想到的

这些东西是平时遇到的, 觉得有一定的价值, 所以记录下来, 以后遇到类似的问题可以查阅, 同时分享出来也能方便需要的人, 转载请注明来自RingOfTheC[ring.of.the.c@gmail.com] 这几天看go文档时看到这么一段话: Go is a new language. Although it borrows ideas from existing languages, it has unusual properties that make effective Go programs different in character from programs written in its relatives. A straightforward translation of a...阅读全文

博文 2014-10-04 19:26:33 ringofthec

C语言 VS GO语言

一直以来都是用C#语言做项目,但是总是感觉少点什么? 最近突发奇想,C语言 + GO语言一起交叉的学习,不知道会产生什么效果??? 原因: 1.同学是做Linux驱动开发的,周末大家在一起讨论同一个问题的时候,总是会出现不同的见解, 后来我才发现,我们彼此都被自己在工作中使用的语言的设计思想给潜移默化了:看待问题和分析问题的时候会不由自主的受到C语言或者C#语言的一些影响。 2.C语言在几十年前被开发出来,GO语言在21世纪被开发出来,两种语言产生的时代背景有很大不同,那么设计者又不能不受到当时社会现实的影响,因此感觉 交叉学习C语言和GO语言,肯定能够带来新的体验。 Combin...阅读全文

博文 2015-06-17 23:01:48 zhao1468465728

一个基于TCP/WebSockets的超级精简的长连接消息协议

背景 现在写客户端或者网页的时候, 越来越多的需要与长连接打交道, 尤其是在这个老板动不动就要搞一个聊天系统的时代, 后端大哥们于是分分钟就能造一个基于TCP或者WebSockets的消息协议出来. 但是问题在于每做一个新项目, 后端大哥们就能造出一个新协议, 而且能有各种神奇的限制. 比如说要在长连接当中保持一个状态机, 发送某条消息后收到的下一条消息一定是XXX, 或者完全一个JSON就直接丢了出来等等. 虽然都能用, 但是却需要在各种地方维护着不同的底层通信库, 没有章法可依, 所以草拟了这个协议. 简介 协议取名STMP, 意思是最简单的消息协议(The simplest message protocol). 项目托管在GitHub上, 包含了完整的协议文档以及相关实现, 详细了解请...阅读全文

博文 2017-07-29 03:08:17 一路行歌

Go 标准库介绍二: time

介绍Go 标准库 time 常用导出函数,结构体及其方法。 import "time" 12 import "time" time包提供显示和计算时间用的函数。 1. 时间处理类型 Go 中时间处理依赖的数据类型: time.Time, time.Month, time.Weekday, time.Duration, time.Location。 1.1 time.Time 时间点 time.Time 代表一个纳秒精度的时间点. /usr/local/go/src/time/time.go 定义如下: type Time struct { sec int64 // 从1年1月1日 00:00:00 UTC 至今过去的秒数 nsec int32 // 最近一秒到下一秒过去的纳秒数 loc *L...阅读全文

博文 2017-03-10 05:53:43 xugang

通过火焰图排查golang json的性能问题

前言: 最近要上线一个golang写的高频服务端,上线前理所当然要压测一把。 在压力源足够的情况下,发现golang服务的cpu相对有些高,怎么办? 直接上golang的神器pprof来排查问题, 通过pprof可以分析heap对象,协程的stack调用栈,当前的协程数,还可以构建火焰图等等。 该文章后续仍在不断更新中, 请移步到原文地址 http://xiaorui.cc/?p=5108 排查问题 至于pprof怎么用,我就不说了。 因为太简单没啥好说的,直接import,然后run起来就完事了。听说,1.10版开启pprof会更加的简单。 接着我们再通过go-torch和FlameGraph是可以构建火焰图的。 具体安装生成火焰图的步骤,自己google。 需要注意的是,go-torch...阅读全文

博文 2019-06-03 20:01:16 rfyiamcool

存储组织协调引擎 REX-Ray

REX-Ray 是一个 EMC {code} 团队领导的开源项目,为 Docker、Mesos 及其他容器运行环境提供持续的存储访问。其设计旨在囊括通用存储、虚拟化和云平台,提供高级的存储功能。 当前支持的系统: * Ubuntu * Debian * RedHat * CentOS * CoreOS * OSX 运行时 CLI:

$ export REXRAY_STORAGEDRIVERS=ec2
$ export AWS_ACCESSKEY=access_key
$ export AWS_SECRETKEY=secret_key
$ rexray vol...阅读全文

生存还是毁灭?一文读懂挖矿木马的战略战术

前言比特币等虚拟货币在2019年迎来了久违的大幅上涨,从最低3000美元上涨至7月份的14000美元,涨幅达300%,巨大的金钱诱惑使得更多的黑产团伙加入了恶意挖矿的行列。阿里云安全团队通过对云上僵尸网络家族的监控,发现恶意挖矿已成为黑产团伙主要的牟利方式。2019年共监控到58个成规模的挖矿木马团伙(数据截止到8月底),以累积感染量定义木马活跃度,下图/表是活跃TOP10的木马家族及简介。本文尝试从宏观角度分析、总结挖矿木马常用技术及发展趋势,以期能够给企业安全防护带来启示。 核心观点木马投放方式全面蠕虫化,多种漏洞组合攻击成为趋势,N-day漏洞利用速度在加快  这种趋势无疑令人异常担忧,意味着挖矿木马的传播能力在大幅增强,变得无孔不入。一旦企业的信息系统存在任意可被利用的漏洞,那么企业...阅读全文

博文 2019-10-18 18:33:03 aside section ._1OhGeD