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

beego学习笔记四

楔子 最近因为996的事情分散了很多的精力,做了一个游戏的策划,但是毕竟不是专业做游戏的,同时也没有人加入协助,我很可能把它给鸽掉。不过呢,由此了解了一个galgame的牛叉游戏引擎renpy,使用python写的,所以除了做单纯的galgame以外,还可以使用原生python做其他的游戏,等有时间研究了倒是可以单独写一篇文章介绍一把。 做一个系统,其中有一个功能是系统管理,系统管理的的设置可以选择直接保存在数据库,也可以写一个统一的配置文件(text、json、yaml各种)再把这个文件保存在数据库,当然还有一种方式是直接写一个配置文件扔在本地,就像beego的app.conf一样。 在ilus里面,我选择使用yaml文件,好处嘛,比json更为精简,又比传统配置文件多了对应关系,方便你随...阅读全文

博文 2019-04-19 21:34:39 井月轩

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

Golang学习 - unicode/utf8 包

// 编码所需的基本数字 const ( RuneError = '\uFFFD' // 错误的 Rune 或 Unicode 代理字符 RuneSelf = 0x80 // ASCII 字符范围 MaxRune = '\U0010FFFF' // Unicode 码点的最大值 UTFMax = 4 // 一个字符编码的最大长度 ) // 将 r 转换为 UTF-8 编码写入 p 中(p 必须足够长,通常为 4 个字节) // 如果 r 是无效的 Unicode 字符,则写入 RuneError // 返回写入的字节数 func EncodeRune(p []byte, r rune) int // 解码 p 中的第一个字符,返回解码后的字符和 p 中被解码的字节数 // 如果 p 为空,则...阅读全文

博文 2019-04-19 18:34:40 佛心看世界

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

请问指针怎么在前端页面赋值

初学者请多多包涵 请问下面的DeviceInfo里引用了CpuInfo,在前端页面怎么赋值呢 使用device.cpu.total在前端页面连输入都不让输,输入以后直接给我清空了 ``` type CpuInfo struct{ Total int 'json:"total"' Around string 'json:"around"' } ``` ``` type DeviceInfo struct{ Version String Serial String Cpu *CpuInfo } ``` 前端vue页面: ```

CPU: <input type="tex...阅读全文

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年首次发表了这种语言。当前已经有数种编程语言或脚本语言支持(或者说解析)这种语...阅读全文

“三次握手,四次挥手”你真的懂吗?

目录 什么是“3次握手,4次挥手” TCP服务模型 TCP头部 状态转换 为什么要“三次握手,四次挥手” 三次握手 四次挥手 “三次握手,四次挥手”怎么完成? 三次握手 四次挥手 为什么建立连接是三次握手,而关闭连接却是四次挥手呢? “三次握手,四次挥手”进阶 ISN 序列号回绕 syn flood攻击 无效连接的监视释放 延缓TCB分配方法 使用SYN Proxy防火墙 连接队列 半连接队列满了 全连接队列满了 命令 小结 “三次握手,四次挥手”redis实例分析 总结 参考资料 记得刚毕业找工作面试的时候,经常会被问到:你知道“3次握手,4次挥手”吗?这时候我会“胸有成竹”地“背诵”前期准备好的“答案”,第一次怎么怎么,第二次……答完就没有下文了,面试官貌似也没有深入下去的意思,深入下去...阅读全文

博文 2019-07-22 22:15:32 qcrao-2018

区块链之 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