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

Golang 语言 - Json基本介绍

Json概述? JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式,是一种主流的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率 Json的应用场景 B/S web编程中的应用 web服务器端 go 数组 -> json字符串 -> 传输 -> json字符串 -> 反序列化 -> go数组 -> 信息呈现给用户 C/S 社交聊天系统应用 客户端01 go数组 -- 序列化 -> json字符串 -> 服务器 -> ...阅读全文

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

CVE-2017-9805:Struts2 REST插件远程执行命令漏洞(S2-052) 分析报告

摘要: 一. 漏洞概述 2017年9月5日,Apache Struts 2官方发布一个严重级别的安全漏洞公告,该漏洞由国外安全研究组织lgtm.com的安全研究人员发现,漏洞编号为CVE-2017-9805(S2-052),在一定条件下,攻击者可以利用该漏洞远程发送精心构造的恶意数据包,获取业务数据或服务器权限,存在高安全风险。 19 一. 漏洞概述 2017年9月5日,Apache Struts 2官方发布一个严重级别的安全漏洞公告,该漏洞由国外安全研究组织lgtm.com的安全研究人员发现,漏洞编号为CVE-2017-9805(S2-052),在一定条件下,攻击者可以利用该漏洞远程发送精心构造的恶意数据包,获取业务数据或服务器权限,存在高安全风险。 二. 漏洞基本信息...阅读全文

Golang学习笔记之简易聊天系统服务器的搭建

下面先列举一下程序使用到的函数,省的大家去找,直接拷贝官方api的解释吧。 func DialTCP(net string, laddr, raddr *TCPAddr) (*TCPConn, error) DialTCP在网络协议net上连接本地地址laddr和远端地址raddr。 net必须是"tcp"、"tcp4"、"tcp6";如果laddr不是nil,将使用它作为本地地址,否则自动选择一个本地地址。 func ResolveTCPAddr(net, addr string) (*TCPAddr, error) ResolveTCPAddr将addr作为TCP地址解析并返回。 参数addr格式为"host:port"或"[ipv6-host%zone]:port",解析得到网络名和端...阅读全文

博文 2018-12-14 17:34:42 学生黄哲

【译】在BigCache缓存中存储空接口

前言断断续续用Golang开发项目已经有1年时间了,一直还没有做到精通。近期关于自己的职业生涯有一些思考,首要任务就是要有精通的领域。结合工作需要,还有自己的兴趣爱好,所以选择首先从Golang下手,先从翻译Golang文档开始吧。原文地址:Storing Empty Interfaces in BigCachehttps://dev.to/calebschoepp/storing-empty-interfaces-in-bigcache-1b33译文本文也发表在我的个人博客博客https://calebschoepp.com/blog在近期的工作中,我被安排给我们的一个Golang服务加缓存。这个特殊的服务的功能是给新来的请求提供一个接口鉴权用的键。所以对于每一个请求,即使使用相同的键,这...阅读全文

博文 2020-06-02 10:34:42 LucusXu

「译」在 Golang 中实现枚举类型

文地址在这篇文章中,我们将介绍使用 go generate 和 abstract 语法树遍历生成强大的枚举类型。 这篇文章描述用于生成的 CLI,完全的原代码 可以在 Github 上找到。 Go 中惯用法Go 语言实际上没有对枚举类型提供完成的支持。定义枚举类型的其中一种方法就是把一类相关变量定义成一种类型。Iota 可以用于定义连续的递增的整数常量。我们可以像这样定义一个 Color 类型。 https://play.golang.org/p/1Zib29yiuFy package main import "fmt" type Color int const ( Red Color = iota // 0 Blue // 1 ) func main() { var b1 Color = ...阅读全文

博文 2019-04-28 20:07:24 正小歪的博客

Go 语言中使用 Protocol Buffers

0. 背景 当前流行微服务框架,gRPC和Protocol Buffers 是 Go 的微服务框架常用的框架。 1. Protocol Buffers 介绍 Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据序列化,很适合做数据存储或 RPC 数据交换格式。它可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。 总结下特点就是: 它是一种序列化格式,和 JSON,XML 类似。 它是二进制的,压缩比例高,短小。 序列化处理速度很快 非明文传输 它通过一种 proto 语法描述格式,可以通过工具生成多种语言代码 支持多种开发语言,Java,Go,Python,JS等 Github 地址:https://github.com/go...阅读全文

博文 2020-04-03 12:32:47 张云飞Vir

Golang的json包

本文对常见的json包做一些介绍,方便快速入门。每一小节均有示例说明。大家在实际开发中可以选择适合自己的json包。 encoding/json encoding/json是官方提供的标准json, 实现RFC 7159中定义的JSON编码和解码。使用的时候需要预定义struct,原理是通过reflection和interface来完成工作, 性能低。 常用的接口: func Marshal(v interface{}) ([]byte, error) 生成JSON func Unmarshal(data []byte, v interface{}) error 解析JSON到struct 示例1 生成JSON: type ColorGroup struct { ID int Name st...阅读全文

博文 2019-11-10 20:02:37 飞鸿影

Golang 游戏nano简介

在Golang 游戏架构简介介绍过https://github.com/lonng/nano,本文通过官方提供的聊天室例子,简要学习一下。 参考如何构建你的第一个nano应用 在这个教程中,我们将构建一个基于浏览器和WebSocket的聊天应用。本教程的示例源码放在github上完整代码 由于游戏在场景管理、客户端动画等方面有一定的复杂性,并不适合作为nano的入门应用。对于大多数开发者 而言,普通聊天室是一个更加适合入门nano的应用。 nano是一个轻量级的服务器框架,它最适合的应用领域是网页游戏、社交游戏、移动游戏的服务端。当然还不 仅仅是游戏,用nano开发高实时web应用也非常合适。 一、术语解释 1.组件(Component) nano应用是由一些松散耦合的Component组成...阅读全文

博文 2019-08-01 14:32:42 合肥懒皮

清晰胜过聪明: 改进 flatbuffers-go

0. 起因 使用 flatbuffers 已经有相当长的一段时间了. 在几个商用项目中, flatbuffers 也因快速的反序列化而带来性能上的不少提升. flatbuffers 尤其适合传输小块数据, 一次序列化, 多个地方进行反序列化. 但 go 的 flatbuffers 有一些小遗憾: go flatbuffers 功能支持, 滞后于 c++ 版, Go 代码库也很久没有更新了. 相比 c ++ , go 版本缺少一些功能. 如 vector of unions , 在 unions 中包含 struct / strings . ( 注: go 版本的 flatbuffers 在 unions 中只能包含 table ) 缺少 verifier 验证器 ( 这是我需要的) go f...阅读全文

博文 2020-04-10 10:34:56 tsingson

2019-05-04 后端开发为什么使用rpc

作为后端开发, 你是否有考虑过这个问题:明明已经有http+restful api + json了,为什么还要上各种rpc框架? 举个简单的例子,以查户口为例: http + json的形式: 我们写一个http server, 就提供一个接口 GET /persion ,然后返回 20150827163347625.jpeg ··· { "name":"xiaoerhei", "age": "28" } grpc+pb(非常不准确的格式,意会即可): name|xiaoerhei|age|28 少了很无用的http头 少了json很多无用的分隔符 pb序列化和反序列化的性能比比json高很多 在树莓派上做了简单的对比测试, golang + grpc + pb的方式 比 golang + ...阅读全文

博文 2019-05-05 07:34:54 王小二黑

求 JSON 2个函数

~~~ 求下面的代码 有问题, 我需要 一个转换JSON 一个反序列化到MAP 方便修改值,思路这样的 比如生成JSON值 var a map[string]interface{} a["code"]="100" a["msg"]="ok" result := JSON_Serialize(a) //这样result得到一串JSON值了 ================ 反序列化 从数据库或则字符串获取得到一串JSON值 bb := `{"Code":"-1","Msg":"code error!"}` result2 :=JSON_Deserialize(bb) //然后修改一些值 修改完毕再转换JSON即可 result2["Code"]=="200" ...阅读全文

golang 如何使用模版?

package main import ( "fmt" "net/http" "log" "html/template" ) func main () { //实例化一个 HTTP app := http.NewServeMux(); app.HandleFunc("/",func(w http.ResponseWriter,r *http.Request){ switch r.Method { case "GET": tmpl,_ := template.ParseFiles("./View/home.html"); tmpl.Execute(w,"Master"); case "POST": case "PUT": case "DELETE": default: } }); addres...阅读全文

博文 2018-06-02 16:30:01 cheungxiongwei

2018-10-23 FreeWheel业务系统微服务化过程经验分享

载: https://mp.weixin.qq.com/s/JgNgmYasXaTqrx5OeeD5KQ 2016 年下半年开始,FreeWheel 开始将其业务系统从 Rails 单体应用逐步迁移到微服务,同时技术栈从 Rails 改为 Golang,两年之后,整个迁移接近尾声,FreeWheel 业务系统技术团队对外分享了它们在微服务化过程中的经验。 原有架构的问题 FreeWheel 是一家为客户提供数字视频广告管理技术和服务的公司。其业务端产品需要对接客户,提供视频广告投放优化界面,类似于 Web ERP,该业务系统采用 Rails 技术栈开发,其架构是一个典型的三层架构。 image 这个系统经过近十年的研发和迭代,代码量达到数十万行,业务的特殊性和代码的复杂度让团队的维护和新功能...阅读全文

博文 2018-10-23 14:34:45 四火流年

Golang 初体验

我最近决定在一个新项目中使用 GoLang 来实现一组增删改查的 API。在此之前,我较为熟悉 Java,Groovy,了解一些 Python。 我大部分的经验都是使用 Java 或者 Groovy 加上 Spring Boot。这让我感到有些无聊,所以为什么不来学点儿东西找找乐子呢? ## 要求 以下是一些要求。 * 设计并实现领域数据模型 * 实现增删改查 API * 在后端使用 Mongo 数据库 * 必须有 Swagger 文档 API 定义并且能方便的用多种语言生成客户端 * 运行在 Docker 容器中 * 能被部署在 Kubernetes 中 ## 非功能性要求 * 需要能很容易的调用其它语言的 API * 需要能够快速迭代(可能要突破常规) * 必须有单元测试 ## 加分项 ...阅读全文

博文 2019-10-15 11:38:15 Ollyder

3年Java工程师面试必问!这些题一定要会!

#### 前言 要说面试,程序员烦,公司也烦,面试官也烦,但没办法,鱼龙混杂的人太多,理论好写不了代码的程序员着实让公司头疼,因而面试的题目也越来越刁钻! 不过凡事都有两面性,面试也是激励程序员多看面试题,掌握知识不是吗? 以下推荐的Java面试题目,希望可以帮大家积累面试经验温习技术知识! ![](https://upload-images.jianshu.io/upload_images/11633898-883eeb37234f0512.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) **【文章福利】小编为大家准备了一些常见的的面试题,总结给大家,大家可以试试,希望对大家能有所帮助。需要的可以加小编QQ群937053620...阅读全文

博文 2019-01-13 18:54:39 _pangzi

Go语言小贴士2 - 协议解析

今天这个小贴士主要介绍协议解析的一些知识,Go语言作为服务端编程语言,免不了要涉及到通讯协议解析,即便不是做网络通讯,也难免会涉及到文件解析,其实它们的知识点都是一样的。 现实应用场景中,通讯协议按通常可以分为两类:二进制协议和文本协议。Go语言内置的gob格式就是一种二进制协议,而JSON、XML等则是文本协议。 假设我们要发送123这个数值,用二进制协议只需要一个字节,因为一个字节(byte)有8个二进制位(bit),2的8次方是256,一个字节可以表达0-255之间的任意值,共256种可能性。 如果我们用文本协议发送123这个数值,则需要至少三个字节,因为123这个数字需要转换成字符'1'、'2'、'3'这三个ASCII字符,存入三个字节中。 所以同样一个数据,用二进制协议表达的体积通...阅读全文

博文 2017-02-10 16:35:27 达达

浅谈服务可观察性的三个指标

当论及可观察性时,不同的人往往会给予不同的反应。 更多的人会反问:什么是可观察性? 如何定义可观察性? 如果说服务的可观察性不容易定义,那么我们可以换个词来类比: 可视化, 即如何做到服务的可视化? 再讨论服务可视化之前,我们先来看看它的近亲:数据可视化。 每当论及数据可视化时,业界会有一些成熟的可视化模型来供我们落地使用。对这些模型进行抽象以后,我们可以发现,数据可视化的核心在于: 数据。 展现模型 数据,指的是大量的,具备有效业务含义的数据。 这些数据可以是固定的(例如一次请求所产生的数据)或者是源源不断的数据(例如代码产生的日志数据,用户的请求数据)。并且这些数据是可以允许进行计算的(例如对用户IP数据进行聚合运算可以得出用户分布图,而对日志数据中出现的字符进行聚合运算则没有多少意义)...阅读全文

博文 2020-03-30 23:33:24 易企秀工程师

密码学系列 - 签名

签名是用于消息的认证,保证该条消息不被伪造。本文主要讨论RSA签名、DSA、ECDSA 和 Schnorr 签名算法。 RSA签名 安全性建立在大数分解问题 公钥:E、N 私钥:D、N 签名:签名 = 消息^D mod N 验证:消息' = 签名^E mod N ,如果消息'==消息则验证成功 DSA 由NIST(美国国家标准技术研究所)1991年制定的数字签名技术规范,是Schnorr算法的变体。 安全性建立在离散对数问题 密钥生成(1024bits): 生成素数 p, 找到 p-1 的一个素数 q,且 找到 ord(a)=q 的元素 a,a 生成了拥有 q 个元素的子群 生成随机数,0 < d < q b = mod p 则密钥对为: = (p,q,a,b), = (d) 签名生成: 随...阅读全文

博文 2019-10-28 19:32:47 aside section._1OhGeD

go实现区块链[2]-整合默克尔树+POW

添加merkleRootmerkleTree.go1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162package mainimport "crypto/sha256"//默克尔树节点type MerkleTree struct{ RootNode *MerkleNode}//默克尔根节点type MerkleNode struct{ Left *MerkleNode Right *MerkleNode Data []byte}//生成默克尔树中的节点,如果是叶子节点,则Left,right为nil ,如果为非叶子...阅读全文

博文 2018-12-20 00:35:12 jonson_jackson

【TokenGazer深度研究】Aergo:企业级公链落地尚未明朗,项目信息披露不全建议跟进观察

本期项目:Aergo1. AERGO试图融合公链和私链去更好的满足企业级用户的需求。团队技术人员大多有区块链项目开发经验,但目前负责商业拓展、市场运营的人员较少。2. 项目的“背书”公司Blocko有4年的区块链行业经验,其产品Coinstack已经有商业应用。AERGO的核心技术基于Coinstack,预计Blocko公司会为AERGO项目提供大量资源支持。3. 项目粉丝热度较高。4. AERGO代币作为平台内的应用型代币,其需求将随着平台的使用规模而增加,因此代币的长期投资价值需要考虑未来生态建设情况。5. 项目尚未发布官方Github主页或MVP(最简化可实行产品)。白皮书的部分技术细节需要团队公布更多资料协助进一步理解。行业背景现实世界中的应用开发需要考虑计算、存储、外部数据、变现、...阅读全文

博文 2018-08-14 15:35:20 TokenGazer

Golang packge time

time 包的官方文档 中文 英文 本文章不是对time包文档的重复,旨在加深对time实现的理解上,以上是文档可以进行查看。 time 包中一些官方定义的结构的认识 go针对时间常量的定义: const ( Nanosecond Duration = 1 //纳秒 Microsecond = 1000 * Nanosecond //微秒 Millisecond = 1000 * Microsecond // 毫秒 Second = 1000 * Millisecond // 秒 Minute = 60 * Second // 分 Hour = 60 * Minute // 时 ) type Weekday int // 定义星期 const ( Sunday Weekday = iota ...阅读全文

博文 2019-02-21 19:34:45 _AlphaBaby_

使用golang反向代理统计api访问次数

前言 今天写点有趣的小东西。事情是这样的,我经常看到有些软件加了统计数据的sdk,之后就可以实现统计接口的访问量,接口负载等等数据。而这些功能不需要原有的软件做些什么,对原来的业务完全无***,我觉得这样的功能很有实用性,所以没有参考其他类似的软件或者工具,我想自己试试怎么实现这样的功能。 思路 首先,我们先给要做的工具起个名字,就叫monitor。要实现无侵入,那么只能是在业务软件外面套一层,经由业务软件的流量,都需要经过monitor这一层,这让人很容易得想到了网关的功能也是类似的。恰好,golang实现反向代理十分简单。所以,思路就有了。先实现一个反向代理,将经由业务的流量都由monitor反向代理给业务软件。接着,将访问的api放进通道中,对api进行分类,就可以统计api的访问量了...阅读全文

博文 2020-03-15 22:33:47 wx5e1abbbb0a5e5

go语言实现自己的RPC:go rpc codec

前言 RPC是远程过程调用(Remote Procedure Call)的简称,通过RPC我们可以像调用本地方法一样调用位于其他位置的函数。大家更常见的可能是HTTP API调用,简单来对比的话,RPC比起HTTP调用封装更完善,调用者不必手动处理序列化和反序列化,使用成本更低一些(虽然学习成本可能会更高)。 出于学习目的,这次的目标是使用go语言来实现一个自己的RPC。在现实世界里,对于一个RPC工具,除了方法调用以外,人们更看重的是其他功能比如服务发现、负载均衡、熔断降级之类的功能,这里暂时不会涉及,而是仅关注实现一个可以工作的方法调用。 在之前的文章里大致了解了go语言自带的rpc框架,其中就提到go rpc预留了codec接口,可以让用户在go rpc使用自己的序列化协议,这次就尝试...阅读全文

博文 2019-03-02 17:37:12 掘金

Golang 基础 JSON

本篇只是自己学习过程中的一个记录 首先需要引入json包 import "encoding/json" 这里我们先定义一个用于序列化和反序列化的结构用于测试。 type TTest struct { Path string `json:"path"` Val int `json:"val"` } 序列化 test := &TTest{"C:\\abc\\123", 11111} b, err := json.Marshal(test) if err != nil { fmt.Println(err) return } fmt.Println(string(b)) 成功后输出:{"path":"C:\abc\123","val":11111} 反序列化 var test TTest json....阅读全文

博文 2017-11-17 22:03:21 不在乎y

Golang-reflect反射的实际中的应用及畅想

1. ???? 解决了什么 原文https://mojotv.cn/go/golang-reflect-string 我有很多行日志数据单行的格式是这样的 HOST;000012000629948340196501;ipv4;3; ips: user_id=2;user_name=172.21.1.102;policy_id=1;src_mac=52:54:00:62:7f:4a;dst_mac=58:69:6c:7b:fa:e7;src_ip=172.21.1.102;dst_ip=172.22.2.3;src_port=48612;dst_port=80;app_name=网页浏览(HTTP);protocol=TCP;app_protocol=HTTP;event_id=1310909...阅读全文

博文 2020-01-14 18:32:39 TechMojotv

XML刚学会,怎么又出来个YAML!

XML(eXtensible Markup Language)可扩展标记语言,曾经是IT软件开发界,标记数据、定义数据的大哥大。 很多从事Spring的同学,没少花时间在写XML文件上吧? 不过随着时间推移,XML的大哥大地位越来愈多收到了挑战。 这不,除了JSON,又冒出来一个YAML。到底YAML是个怎么回事?看看下面的文章,小伙伴们就明白了。YAML(/ˈjæməl/,尾音类似camel骆驼)是一个可读性高,用来表达数据序列化的格式。YAML参考了其他多种语言,包括:C语言、Python、Perl,并从XML、电子邮件的数据格式(RFC 2822)中获得灵感。Clark Evans(某软件行业大牛)在2001年首次发表了这种语言。当前已经有数种编程语言或脚本语言支持(或者说解析)这种语...阅读全文

区块链之 RLP序列化

rlp序列化文档 RLP(Recursive Length Prefix,递归的长度前缀)是一种编码规则,可用于编码任意嵌套的二进制数据,特定的数据类型(例如:string,int等类型)则交给更高阶的协议处理。需要注意的是:int类型必须去掉首部0,且必须用大端模式表示。 编解码规则 编码规则 如果数据的长度是1个字节,并且它的值在[0x00, 0x7f] 范围之间,那么其RLP编码就是数据本身。即前缀为空,用前缀代表数据本身; 如果数据的长度是0-55字节,其RLP编码是前缀跟上(拼接)数据本身,前缀的值是0x80加上数据的长度。由于在该规则下,数据的最大长度是55,因此前缀的最大值是0x80+55=0xb7,所以在本规则下前缀(第一个字节)的取值范围是[0x80, 0xb7]; 如果数...阅读全文

博文 2020-04-23 10:32:55 孤独_漂流

网络游戏中玩家数据的处理

背景 网络游戏中最重要的数据莫过于玩家在游戏的过程中产生的数据。 可以简单的分成两类: 存档数据 过程记录数据 第一类数据主要是类似角色『基础』信息,背包、技能、任务,以及所有(或者部分)玩家共有的王国、地图、联盟等信息。第二类主要是类似『日志』信息一样的,比如「某个地方某角色使用了某道具」这样的操作记录。 这篇文章中我们主要讨论第一种数据的处理,关于后一种用作记录和分析的数据,可能会在后面写一个专门的Blog介绍。 存储结构 首先我们需要决定数据的形态,和描述的方法。这里有一个选择:以『条目格式』为核心,还是以『文档格式』为核心。 『条目格式』的优点:看起来较为平坦,方便实时落地,和各种数据库存储模式搭配方便,外部工具修改方便,便于批量处理。『文档格式』的有点:通常是树形结构,和大部分脑中...阅读全文

博文 2019-09-03 17:32:48 秦川

兄弟连区块链教程Fabric1.0源代码分析Chaincode(链码)体系总结

兄弟连区块链教程Fabric1.0源代码分析Chaincode(链码)体系总结,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁、回归理性,表面上看相关人才需求与身价似乎正在回落。但事实上,正是初期泡沫的渐退,让人们更多的关注点放在了区块链真正的技术之上。# Fabric 1.0源代码笔记 之 Chaincode(链码)## 1、Chaincode概述Chaincode,即链码或智能合约,代码分布在protos/peer目录、core/chaincode和core/common/ccprovider目录,目录结构如下:* protos/peer目录: * chaincode.pb.go,ChaincodeDeploymentSpec、ChaincodeInvocationSpec结构体定...阅读全文

博文 2018-10-30 05:34:42 兄弟连区块链培训

golang-区块链学习03永久存储

前言 前面两篇简单的实现了区块链的创建和工作量证明,但是都是在内存中进行的。实际的区块链应该是可以永久存储的,这样才有意义。下面开始做永久性区块链存储。 知识点 1、github项目引用 2、github.com/boltdb/bolt项目的简单使用 3、命令行使用 4、go常用的数据转换 golang-区块链永久性存储 1、创建区块链 方法:func NewBlockChain() *BlockChain // 创建区块链 // 返回一个区块链实例 func NewBlockChain() *BlockChain { var tip []byte // 打开存储区块链的文件blockchian.db、不存在则创建 db, err := bolt.Open(dbFile, 0600, nil...阅读全文

博文 2018-08-15 01:34:56 embedsky

golang 时间处理

时区 // 代表一个纳秒精度的时间点 var t time.Time; // 返回当前时间 t = time.Now(); // 时区 fmt.Printf("%v\n", t); // 返回反回所在时区 fmt.Printf("%v\n", t.Location()); // 返回UTC时间和UTC时区 fmt.Printf("%v %v\n", t.UTC(), t.UTC().Location()); // 同上,In()返回指定时区的时间 fmt.Printf("%v %v\n", t.In(time.UTC), t.In(time.UTC).Location()); // 返回当地时区的时间 fmt.Printf("%v %v\n", t.Local(), t.Local().Lo...阅读全文

博文 2019-07-11 19:32:39 战神悟空

Protobuf 终极教程 Go语言版

目录 [−] 历史序列化proto教程proto3的改变一个简单的例子proto3 格式版本定义引入其它proto文件packageoption普通字段Oneofmap类型Reserved枚举类型使用其它类型嵌套类型未知类型Any更新消息类型其它Well-Known类型编码gogo库 Protocol Buffer (简称Protobuf) 是Google出品的性能优异、跨语言、跨平台的序列化库。 历史 2001年初,Protobuf首先在Google内部创建, 我们把它称之为 proto1,一直以来在Google的内部使用,其中也不断的演化,根据使用者的需求也添加很多新的功能,一些内部库依赖它。几乎每个Google的开发者都会使用到它。 Google开始开源它的内部项目时,因为依赖的关系,...阅读全文

博文 2019-11-10 00:02:15 smallnest

Go语言5-结构体

结构体 Go中的结构体(就相当于其它语言里的class): 用来定义复杂的数据结构 可以包含多个字段(属性) 结构体类型可以定义方法,注意和函数的区分 结构体是值类型 结构体可以嵌套 Go语言没有class类型,只有struct类型 定义结构体 struct 声明: type (标识符) struct { field1 type field2 type } 例子: type Student struct { Name string Age int Score int } 结构体中字段的访问,和其他语言一样,使用点: package main import "fmt" type Student struct { Name string Age int Score int } func main...阅读全文

博文 2018-11-02 13:35:14 骑士救兵

高效生成JSON串——json-gen

概述 游戏服务端的很多操作(包括玩家的和非玩家的)需要传给公司中台收集汇总,根据运营的需求分析数据。中台那边要求传过去的数据为 JSON 格式。一开始我们使用 golang 标准库中的encoding/json,发现性能不够理想(因为序列化使用了反射,涉及多次内存分配)。由于数据原始格式都是map[string]interface{},且需要自己一个字段一个字段构造,于是我想可以在构造过程中就计算出最终 JSON 串的长度,那么就只需要一次内存分配了。 使用 下载: $ go get github.com/darjun/json-gen 导入: import ( jsongen "github.com/darjun/json-gen" ) 使用起来还是比较方便的: m := jsongen....阅读全文

二)golang工厂模式

在通用的工厂模式中,一般涉及到 简单工厂模式(顾名思义:工厂 > 创建)、工厂方法(顾名思义:将方法工厂化)、抽象工厂模式(顾名思义:将工厂抽象化 工厂 > 工厂 > 创建) 特点:将接口与具体实现分离,根据需要实例化对象使用场景:日志记录,文件服务平台,数据库访问 1.定义产品接口 type P interface {} 2.定义实现结构 type P1 struct {} //implement P type P2 struct {} //implement P ...//简单3.工厂方法(简单工厂完) func F (name string) P {} //抽象3.工厂接口,用于生产工厂 type Factory interface { CreateP(name string) Cre...阅读全文

golang相关网摘

1、golang开发50个坑 http://devs.cloudimmunity.com/gotchas-and-common-mistakes-in-go-golang/index.html#mline_lit_comma 2、golang二进制序列化与内存对齐 https://www.zhihu.com/question/27410178 3、大话设计模式(golang) http://www.oschina.net/code/list_by_user?id=1469272 4、effective go http://www.hellogcc.org/effective_go.html 5、深入go网络库 http://skoo.me/go/2014/04/21/go-net-core...阅读全文

博文 2017-12-21 16:00:00 cqvoip

go实现区块链[1]-block

12345678910111213141516171819202122232425262728293031323334353637383940414243444546//定义区块结构体type Block struct{ Version int32 PrevBlockHash []byte Merkleroot []byte Hash []byte Time int32 Bits int32 Nonce int32}//序列化func (b* Block) Serialize() []byte{ var encoded bytes.Buffer enc:= gob.NewEncoder(&encoded) err:= enc.Encode(b) if err!=nil{ log.Panic(...阅读全文

博文 2018-12-20 00:35:12 jonson_jackson

Golang json

一、官方库编码解码 type Movie struct { Title string Year int `json:"released"` Color bool `json:"color,omitempty"` Actors []string } var movies = []Movie{ {Title: "Casablanca", Year: 1942, Color: false, Actors: []string{"Humphrey Bogart", "Ingrid Bergman"}}, {Title: "Cool Hand Luke", Year: 1967, Color: true, Actors: []string{"Paul Newman"}}, {Title: "Bullit...阅读全文

博文 2019-03-13 08:34:40 懒皮

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

博文 2018-06-04 11:33:05 mickelfeng

Golang处理JSON(二) 反序列化

在Go语言中,encoding/json标准包处理json数据的序列化与反序列化问题。如果想了解序列化可以看这一篇Golang处理JSON(一) 序列化。与编码json的Marshal类似,解析json也提供了Unmarshal方法。对于解析json,也大致分两步,首先定义结构,然后调用Unmarshal方法序列化。 反序列化 Unmarshal() 反序列化源码放在: Unmarshal // Unmarshal parses the JSON-encoded data and stores the result // in the value pointed to by v. If v is nil or not a pointer, // Unmarshal returns an In...阅读全文

博文 2020-03-15 09:32:43 程序猿编码

第二十七章:Go语言与RPC

1. RPC 概述 RPC 是Remote Procedure Call Protocol 的简写,其中文意思是远程过程调用协议 ,就是通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议.RPC将本地调用变为远程服务器上调用,这为系统处理能力和吞吐量带来了更大的提升,在OSI网络通信模型中RPC跨越了传输层和应用层. 我们通俗的理解就是像调用本地函数一样区调用远程的函数,实现函数调用模式的网络化.那么这个远程到底是多远,既可以是物理上的远程也可以是逻辑上的远程. 因为PRC的这种跨越了物理服务器的限制,在 RPC 中可选的网络传输方式有多种,可以选择 TCP 协议、UDP 协议、HTTP 协议 在现在的分布式系统中不同的节点之间比较常见的通信方式也是RPC 既然有远程过程调用...阅读全文

博文 2019-12-14 19:32:40 captain89

Influxdb中基于磁盘的倒排索引文件TSI结构解析

TSI文件结构概览 一个TSI文件的定义和操作在 tsdb/index/tsi1/index_file.go里实现的 一个TSI文件的结尾存储了这个文件相关的meta信息,主要是其他section在文件中的offset和size,这个meta信息被称为tsi文件的IndexFileTrailer,我们看一下它的Size的定义: IndexFileTrailerSize = IndexFileVersionSize + 8 + 8 + // measurement block offset + size 8 + 8 + // series id set offset + size 8 + 8 + // tombstone series id set offset + size 8 + 8 + ...阅读全文

博文 2018-12-23 11:34:44 扫帚的影子

golang - gob与rpc

今天和大家聊聊golang中怎么使用rpc,rpc数据传输会涉及到gob编码,所以先讲讲gob,别担心,就算你完全没有接触过gob与rpc,只要知道rpc的中文是远程过程调用,剩下的我都能给你讲明白(带你入门不包你精通)! 一、数据结构编码之gob gob全称为:Go binary Golang自带的一个数据结构序列化编码/解码工具,也就是说gob可以讲go中的一个数据结构序列化成某种东西,还能反序列化!序列化成啥我们后面来看,不管是变成一个字符串,变成二进制流,变成啥先不管,反正作用就是序列化。 Gob使用时我们需要关注Encoder和Decoder对象,顾名思义,一个是编码的时候用的,一个是解码的时候用的,我们看一下怎么获取这两个对象先: 所以很明确,需要调用这两个函数来获取Encode...阅读全文

博文 2018-07-28 21:30:00 cloudgeek

Golang 使用 protobuf 的教程

1、下载protobuf的编译器protoc 网站:https://github.com/google/protobuf/releases 选择各自平台的版本下载window: 下载: protoc-3.3.0-win32.zip 解压,把bin目录下的protoc.exe复制到GOROOT/bin下,GOROOT/bin加入环境变量。 当然也可放在其他目录,需加入环境变量,能让系统找到protoc.exelinux: 下载:protoc-3.3.0-linux-x86_64.zip 或 protoc-3.3.0-linux-x86_32.zip 解压,把bin目录下的protoc复制到GOROOT/bin下,GOROOT/bin加入环境变量。 如果喜欢编译安装的,也可下载源码自行安装,最后...阅读全文

博文 2020-01-20 17:32:43 佳闯天涯

golang[43]-blockchain-serialize

真实比特币序列化1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374package mainimport ( "bytes" "encoding/binary" "log" "fmt" "encoding/hex" "crypto/sha256")//将类型转化为了字节数组func IntToHex(num int32) []byte{ buff := new(bytes.Buffer)//binary.LittleEndian 小端模式 err:= binary.Wr...阅读全文

博文 2018-12-13 23:35:58 jonson_jackson

兄弟连区块链教程Fabric1.0源代码分析Tx RWSet(读写集)

区块链教程Fabric1.0源代码分析Tx RWSet(读写集),2018年下半年,区块链行业正逐渐褪去发展之初的浮躁、回归理性,表面上看相关人才需求与身价似乎正在回落。但事实上,正是初期泡沫的渐退,让人们更多的关注点放在了区块链真正的技术之上。 # Fabric 1.0源代码笔记 之 Tx #RWSet(读写集) ## 1、RWSet概述 在背书节点模拟Transaction期间,为交易准备了一个读写集合。 Read Set包含模拟Transaction读取的Key和版本的列表,Write Set包含Key、写入的新值、以及删除标记(是否删除Key)。 RWSet相关代码分布在protos/ledger/rwset、core/ledger/kvledger/txmgmt/rwsetutil...阅读全文

博文 2018-11-08 15:33:24 ITXDL

Golang学习笔记之JSON解析

JSON是一种轻量级的数据交换语言,以文字为基础,具有自我描述性且易于让人阅读。 官方提供有Json解析包:官方库文档地址 下面只说两个比较重要的函数 一、将数据编码成json字符串 函数原型 func Marshal(v interface{}) ([]byte, error) Marshal函数返回v的json编码。v是interface{}类型,任何类型都实现了空接口。 •字段的tag是“-”,那么这个字段不会输出到JSON •tag中带有自定义名称,那么这个自定义名称会出现在JSON的字段名中。 •tag中如果带有“omitempty”选项,那么如果该字段值为空,就不会输出到JSON串中 •如果字段类型是bool,string,int,int64等,而tag中带有“,string”选...阅读全文

博文 2018-12-11 21:34:44 学生黄哲

【MPS最佳实践】媒体工作流转码

摘要: 背景 1个输入文件对应多个输出文件(不同分辨率,不同格式等),通过控制台的图形化界面,快速搭建常用视频处理流程。 优势 简单易用,视频上传完成自动触发转码任务。 功能强大,支持截图、转码、转封装、水印、加密、剪辑等功能。 **点此查看原文:http://click.aliyun.com/m/42850/** **背景** 1个输入文件对应多个输出文件(不同分辨率,不同格式等),通过控制台的图形化界面,快速搭建常用视频处理流程。 **优势** 简单易用,视频上传完成自动触发转码任务。 功能强大,支持截图、转码、转封装、水印、加密、剪辑等功能。 在媒体工作流开始执行和完成执行时,支持向指定的消息队列或消息通知发送工作流执行信息。 媒体库,为您提供音视频...阅读全文

更好的 Golang 的 MongoDB 驱动 `globalsign/mgo`

用 1.3 版本使用 Go 开始,连接 MongoDB 使用的驱动中,最常见的就是:mgo.v2 这个库一度是唯一的选择,它的接口设计合理,与 Golang/MongoDB/bson 适配的也做的不错。然而这个库长期处于无人看管的状态,有一大堆让人难以忍受 bug,其中我们遇到的就有不少: 当短时间执行大量 db 操作把并发执行的与 MongoDB 的连接池增大之后,多余的连接没有被正确的回收掉(即便设置了 maxIdleTimeout 和 minPoolSize)。 执行 bulk 操作的 size 是固定不可配置的。 在我们的线上项目中,偶尔的业务峰值会照成某几个服务短时间大量的 db 操作,而一旦这些 db 操作带来的连接数量被撑大之后,耗尽 db 的连接数资源之后。其他的服务就无法连...阅读全文

博文 2019-09-03 18:32:44 秦川

好程序员web前端培训分享什么是Deno,它与Node.js的区别

好程序员web前端培训分享什么是Deno,它与Node.js的区别,Node.js的创建者Ryan Dahl花了一年半的时间研究deno,这是一个新的JavaScript运行时,可以解决Node的所有固有问题。 不要误解我的意思,Nodejs它本身就是一个很棒的服务器端JavaScript运行时,主要是因为它拥有很大的生态系统和JavaScript。然而,Node.js的创建者Ryan Dahl承认他应该考虑更多的-安全性,模块和依赖性,仅举几例。 在他的辩护中,并不是说他可以想象平台在如此短的时间内会增长多少。此外,早在2009年,JavaScript仍然是这种奇怪的小语言,每个人都取笑,而且它的许多功能还没有。 那么什么是Deno,主要特性有什么呢?1. Deno是一个基于V8构建的安全...阅读全文

博文 2019-07-29 15:03:59 好程序员官网