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

Golang语言下使用Protocol Buffer教程

代码仓库地址 一、介绍 Protobuf是Google旗下的一款平台无关,语言无关,可扩展的序列化结构数据格式。所以很适合用做数据存储和作为不同应用,不同语言之间相互通信的数据交换格式,只要实现相同的协议格式即同一proto文件被编译成不同的语言版本,加入到各自的工程中去,这样不同语言就可以解析其他语言通过Protobuf序列化的数据。目前官网提供了C++,Python,JAVA,GO等语言的支持。 相对于JSON和XML具有以下优点: 简洁 体积小:消息大小只需要XML的1/10 ~ 1⁄3 速度快:解析速度比XML快20 ~ 100倍 使用Protobuf的编译器,可以生成更容易在编程中使用的数据访问代码 更好的兼容性,Protobuf设计的一个原则就是要能够很好的支持向下或向上兼容 注...阅读全文

博文 2018-08-14 00:30:02 OctoptusLian

轻松学习区块链3 - KV数据库的实现和区块链数据的持久化

MiniBC区块链V002 - KV数据库的实现和区块链数据的持久化 KV数据库 虽然我们已经创建了一条非常简单的区块链,但是当程序关闭后,内存中的区块数据却没有保存下来。这使得我们无法重复使用一个区块链,也无法与其他人分享,我们需要将它存储在硬盘中。我们接下来的任务就是实现一个极小的KV数据库,用来保存区块链数据。像比特币bitcoin使用了leveldb数据库,也有些golang开发的区块链采用了BoltDB,它们都属于单机KV数据库。 KV数据库,也就是key/value数据库,这种数据库没有关系型数据库系统RDMBS(比如MySQL,Oracle,PostgreSQL等)的表(table)、行(row)、列(column)等概念。数据均以键/值(key/value)的方式进行存储,类...阅读全文

Protobuf编码指南

这个文档会介绍protocol buffer的二进制有线格式(binary wire format)。你并不是需要理解这些后才能在应用里使用protocol buffer,但是当你想知道不同的protocol buffer格式是如何影响编码后的消息体的体积时,这些知识会非常有用。 一个简单的消息 假设有一个非常简单的消息定义: message Test1 { optional int32 a = 1; } 在应用中,你创建了一个Test1消息并把a设置为150。然后你把消息序列化到输出流中,如果你能查看编码后的消息,你会看到三个字节: 08 96 01 到目前为止,如此小而且都是数字-但是这是什么意思呢?继续往下看 Varint编码 要理解上面protocol buffer编码的数据,你需要...阅读全文

博文 2019-09-29 22:32:48 KevinYan

游戏服务器背包设计与实现

文:https://www.cnblogs.com/wgslucky/p/6079730.html 在游戏开发中,背包是一个非常重要的功能。几乎每个复杂点的游戏都会有背包的功能。不管是手游戏还是网页游戏,不管是SLG游戏,还是ARPG游戏,背包是必不可少的。背包的功能根据策划的要求,有的简单,有的复杂。以下我们就讨论一下几种游戏服务器背包的实现。 1,简单的游戏背包设计 简单的游戏背包到底简单到什么程度呢?那么这个游戏背包只是用来存放物品,不需要记录物品在背包中的位置,只需要记录物品的id和物品的数量即可。这样的游戏背包设计起来非常方便,在数据库中一个物品占一行即可,例如: image 当获得物品的时候,先查看这个物品是否已存在,如果不存在,则创建一个物品的对象,并插入到数据库,如果这个物品...阅读全文

博文 2019-01-21 00:34:45 Golang语言社区

Golang gob与rpc简介

本文参考 Gob的数据 手机网络游戏应用协议设计(一) 关于protobuf基础知识,可以参考Protobuf 以及在Laya中的使用 关于varint,参考数值压缩存储方法Varint和图解Protobuf编码 为了让某个数据结构能够在网络上传输或能够保存至文件,它必须被编码然后再解码。当然,已经有许多可用的编码方式了:JSON,XML,Google 的 protocol buffers,等等。而现在,又多了一种,由 Go 的 gob 包提供的方式。 为什么定义新的编码?这要做许多繁重的工作。为什么不使用某个现成的格式?呃,无论如何,我们这样做了!Go 已经有刚才提到的所有编码方式的包(protocol buffer 包在另外一个代码库中,但它是下载得最多的包之一)。并且在许多情况下,包括...阅读全文

博文 2019-03-14 01:34:41 懒皮

一行代码引起的协程泄露

前言 最终定位到的结果比较蠢,巨佬可以直接查看结果,本文只为记录寻找该bug时使用的方法而生。 本人平日维护一个公司运营平台的一个配置库,由于降级措施比较好,而且公司容器实例也比较多,所以在爆发错误的时候并未及时跟进。该问题应该从该服务出生开始就已经有了,一直没有爆发的原因应该是因为以前迭代得比较多,一周也差不多会发布四到五次,再加上平台在去年使用人数还是比较少的,后面逐渐成为公司一个中流砥柱的产品,被许多部门所使用,所以问题就爆发了。 第一次猜想 “这服务怎么协程突然暴涨了” 第一次协程暴涨的时候,发现有一台实例突然就跪了,协程数疯狂暴涨,内存也疯狂暴涨,第一反应是db出现了慢查询,但是实际上。而查看监控,并没有特别多接口跪,如图。 而实际上能很明显看到有几个实例的协程数直线上涨。 其实因...阅读全文

博文 2020-05-31 21:34:46 QuanQqqqq

golang - gob与rpc

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

博文 2018-07-21 22:16:03 CloudGeek

Go 常量学习-可视化指南

> Go 的类型常量和非类型常量是两个必须要了解的关键概念 不要忘记在文章下面有很多代码示例,因此你要确保点击这些链接并尝试运行这些程序。 ## 你为什么使用常量? ![why_might_you_use_constants?.image ](https://raw.githubusercontent.com/studygolang/gctt-images/master/go-const-guide/1*r734fn1RBz1c1J2cKM7ZGw.png) 你不想在代码中到处定义[魔法数值](https://en.wikipedia.org/wiki/Magic_number_%28programming%29),于是使用常量来声明它们,并在代码中再次使用它们。 魔法数值是不安全的,你需要...阅读全文

gob 新的数据编码方式(序列化与反序列化数据)

介绍 数据在网络上传输,不同的服务端通信需要基于一定的协议进行交换数据。发送端encode编码数据,接收端decode解码数据。 常见的的一些数据编码方式:json,xml,proto buffers, html等 gob 与json,xml类似是一种基于go原生的数据 使用场景 为什么go 定义了新的一种数据编码方式? 常见的数据编码如json,xml等,是为了兼容已经存在的数据编码方式,可以与其他语言服务进行通信。 对于两端同样是go开发的服务,可以使用gob进行更快,更高效的数据传输。 优点 自描述数据格式:发送端与接收端无需沟通,定义两端统一的数据格式 传输速度更快,更高效 basic 基于gob编码的流数据,包含自描述类型信息,各项数据处理前包含类型信息 支持的类型:基础数据类型(...阅读全文

Go语言学习之encoding/gob包(The way to go)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wangshubo1989/article/details/73294110 生命不止,继续 go go go !!! 为了让某个数据结构能够在网络上传输或能够保存至文件,它必须被编码然后再解码。当然,已经有许多可用的编码方式了:JSON,XML,Google 的 protocol buffers,等等。而现在,又多了一种,由 Go 的 gob 包提供的方式。 gob是Golang包自带的一个数据结构序列化的编码/解码工具。 编码使用Encoder,解码使用Decoder。一种典型的应用场景就是RPC(remote procedure calls)。 gob和json的pack之类的方法一样,由...阅读全文

博文 2019-04-19 16:31:04 wangshubo1989

[golang] json序列化时自动将id加密

对于有规则的数据索引,比如用户ID,商品ID,订单编号,很容易第三方直接遍历抓取资源。采用liamylian/json-hashids进行加密,可以有效避免这类情况发生。但因为是对等加密,需注意该加密算法并不安全,使用时需注意场景,详情请见hashids。 package main import( "fmt" "github.com/liamylian/json-hashids" "time" ) var json = jsonhashids.NewConfigWithHashIDs("abcdefg", 10) type Book struct { Id int `json:"id" hashids:"true"` // 这里要给id打上hashids的tag Name string `j...阅读全文

(翻译)可拔插交易背书和验证

可拔插交易背书和验证 动机 当交易在提交被验证时,peer节点在交易本身的状态改变之前执行各种检查: 验证签名交易的标识 验证交易中背书人的签名 确保交易满足相应链码的命名空间的背书策略 有些用例要求与fabric验证规则不同的自定义交易验证规则,例如: State-based endorsemet(基于状态的背书):当背书策略取决于密钥,并不仅仅取决于命名空间。 UTXO(Unspent Transaction Output未花费交易输出):当验证考虑到,不论交易是否不会对输入双花。 Anonymous transactions(匿名交易):当背书不包含peer节点的身份,但是无法链接到peer节点身份的签名和公钥被共享。 可拔插背书与验证逻辑 fabric运行将定制的背书和验证逻辑实现和...阅读全文

博文 2018-07-31 17:34:50 还是小把戏

GO语言的json输入(反序列化)之interfac{}存储

// code_032_json_unmarshal_to_interface project main.go package main import ( "encoding/json" "fmt" ) func main() { b := []byte(`{ "company":"tianmei", "subjects":[ "Go", "C++", "Python", "Test" ], "isok":true, "price":666.666 }`) //备注:subjects:["Test",]后面没有元素了,还有逗号会报错的。 var t interface{} err := json.Unmarshal(b, &t) if err != nil { fmt.Println("js...阅读全文

博文 2018-10-07 02:35:15 ck_god

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

版权声明:本文为Sunface(孙飞)原创文章,转载请注明出处 https://blog.csdn.net/abv123456789/article/details/51219512 原文链接: http://bravenewgeek.com/so-you-wanna-go-fast/ 到现在为止,我已经忘记了我在写什么,但我确定这篇文章是关于Go语言的。这主要是一篇,关于运行速度,而不是开发速度的文章——这两种速度是有区别的。 我曾经和很多聪明的人一起工作。我们很多人都对性能问题很痴迷,我们之前所做的是尝试逼近能够预期的(性能)的极限。应用引擎有一些非常严格的性能要求,所以我们才会做出改变。自从使用了Go语言之后,我们已经学习到了很多提升性能以及让Go在系统编程中正常运转的方法。 Go的简...阅读全文

博文 2019-03-17 13:14:06 erlib

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

使用了OSC这么久了还没有写一篇博文,真实惭愧!在次写下第一篇。 最近开发项目时候发现一个结构体的Json转换的时间格式问题。 即这种1993-01-01T20:08:23.000000028+08:00 这种表示UTC方法。从我们习惯来说,更喜欢希望的是 1993-01-01 20:08:23这种格式。 重新复现代码如下: package main import ( "time" "encoding/json" ) type Student struct { Name string `json:"name"` Brith time.Time `json:"brith"` } func main() { stu:=Student{ Name:"qiangmzsx", Brith:time.D...阅读全文

博文 2017-09-12 03:52:51 梦朝思夕

go的内存模型

Introduction Go内存模型说明在什么情况下,可以保证一个goroutine中某变量a的读取,可以是另外一个goroutine对变量a写入的值。 Advice 修改由多个goroutine同时访问的数据的程序必须序列化此类访问。要序列化访问,请使用channel或其他同步原语(如sync和sync/atomic包中的同步原语)保护数据。 Happens Before 在一个goroutine中,读写操作必须按照程序指定的顺序执行。也就是说,只有在重新排序不会改变语言规范定义的goroutine内的行为时,编译器和处理器才可以重新排序在单个goroutine内执行的读写操作。由于这种重新排序,一个goroutine观察到的执行顺序可能与另一个goroutine观察到的顺序不同。例如,...阅读全文

计算机学生需要什么?

作为一个毕业一年的计算机学人。实在谈不上什么经验,也没脸说什么技巧。 以下作为几点建议,万一对你有点帮助呢? 在这之前,你需要做好的唯一的心理建设就是:坚定目标。 坚定目标可以让我们走的弯路越少。不会浪费时间在一些有点用,但是用处不大的地方 眼睛看得越远,走得越直。 精通一门语言,无论Python,Java,C,C++,C# 都无所谓 无论你有多笨,在你掌握了一门编程语言之后,再学习其他编程语言,最多不超过60天,都能掌握。除非你笨到不然下面这个单词:fuck 你可以选择大学期间最先接触的C语言;或者语法简洁的Python语言;也可以是用的人最多的Java。 为什么我要这么推荐呢? 因为,一家好公司,是不在乎你用什么语言的。他们知道,在有一门语言基础的情况下,再学一门语言只需要60天而已。 ...阅读全文

博文 2020-04-10 23:32:42 灰熊不太行

2019回顾篇

19年在nginx,redis,mysql,golang,php方面有了自己的领悟,但是感觉一眼看去又道不出所以然,感觉是不是要总结点什么了,以后技术方案选型时候才能清晰的道出所以然。 nginx nginx深入配置篇章教程 看了很多nginx配置文章,还是以实际场景来划分把 0.了解nginx的模块划分的配置结构思想 1.分别以tcp和unix的通讯方式配置 nginx + php-fpm 2.nginx配置静态资源服务器 3.nginx配置location根据不同的路径进行转发到不同项目目录 4.ngixn配置负载均衡(ip模式,权重模式...) 5.nginx 并发场景优化 nginx 结构分析篇 ... #全局块。 events { #events块 ... } http #http...阅读全文

「译」Go Context 在 HTTP 传播

Go 1.7 引入了一个内置的 context 类型,在系统中可以使用 Context 来传递元数据,例如不同函数或者不同线程甚至进程的传递 Request ID。 Go 将 Context 包引入标准库以统一 context 的使用。在此之前每个框架或者库都有自己的 context 。它们之间还无法兼容,导致了碎片化,最终在各处 context 的传播上就有不少的麻烦。 虽然在同一个处理过程中有一个通用的 context 传播机制是非常有用的,但是 Go 的 Context 包并没有提供该功能。就像上面描述的,context 会在网络中被不同的处理过程传递。例如在多服务架构中,一个请求往往会在多个地方被处理 (多个微服务,消息队列,数据库等),直到最后响应给用户。能够在多个处理过程中传递 ...阅读全文

博文 2019-04-28 20:10:37 正小歪的博客

Golang之gRPC协议

简介 gRPC即远程过程调用,是服务器端程序设计常用的一种技术,由Google不久前开源,是一个基于HTTP2 和 Protobuf 的RPC 实现,gRPC 提供了c 、Java、golang 的原生实现并以cgo的方式支持Node.js, Python, Ruby, Objective-C, PHP 和 C# 语言。 源码 https://github.com/grpc/grpc 特性 高效性 跨语言 基于HTTP/2协议标准 基于ProtoBuf(Protocol Buffers)序列化协议 安装(需要翻墙) https://grpc.io/docs/quickstart/go.html#before-you-begin PS: 没有翻墙条件的,可以将源码clone到相关目录 Wech...阅读全文

博文 2017-09-19 07:34:53 faceowener

《Go语言四十二章经》第三十八章 数据编码(encoding)

# 《Go语言四十二章经》第三十八章 数据编码(encoding) 作者:李骁 ## 38.1 序列化与反序列化 数据结构要在网络中传输或保存到文件,就需要对其编码和解码,目前存在很多编码格式:json,XML,Gob,Google Protocol Buffer等,Go 语言当然也支持所有这些编码格式。 序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。通过从存储区中读取对象的状态,重新创建该对象,则为反序列化。 简单地说把某种数据结构转为指定格式为 序列化 或 编码(传输之前);而把“指定格式”转为某种数据结构则为 反序列化 或 解码(传输之后)。比如:把数据结构转换成指定格式(data ->...阅读全文

博文 2018-10-18 21:50:47 roteman

兄弟连区块链教程Fabric1.0源代码分析Peer peer chaincode命令及子命令实现

兄弟连区块链教程Fabric1.0源代码分析Peer peer chaincode命令及子命令实现,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁、回归理性,表面上看相关人才需求与身价似乎正在回落。但事实上,正是初期泡沫的渐退,让人们更多的关注点放在了区块链真正的技术之上。# Fabric 1.0源代码笔记 之 Peer #peer chaincode命令及子命令实现## 1、peer chaincode install子命令实现(安装链码)### 1.0、peer chaincode install子命令概述peer chaincode install,将链码的源码和环境封装为一个链码安装打包文件,并传输到背书节点。peer chaincode install支持如下两种方式:* 指...阅读全文

博文 2018-11-06 19:34:39 兄弟连区块链培训

【刘文彬】以太坊RPC机制与API实例

文链接:醒者呆的博客园,https://www.cnblogs.com/Evsward/p/eth-rpc.html 上一篇文章(【刘文彬】探路以太坊)介绍了以太坊的基础知识,我们了解了web3.js的调用方式是通过以太坊RPC技术,本篇文章旨在研究如何开发、编译、运行与使用以太坊RPC接口。 关键字:以太坊,RPC,JSON-RPC,client,server,api,web3.js,api实例,Postman rpc简介 RPC(remote process call),名曰远程过程调用。意思就是两台物理位置不同的服务器,其中一台服务器的应用想调用另一台服务器上某个应用的函数或者方法,由于不在同一个内存空间不能直接调用,因此需要通过网络来表达语义以及传入的参数。RPC是跨操作系统,跨编程...阅读全文

博文 2018-12-26 21:34:44 圆方圆区块链

DockOne微信分享(八十):云计算应用技术发展与企业异构资源池统一管理案例分析

【编者的话】本次分享介绍了企业用户私有云的建设与变迁过程。从VMware虚拟化起步到后期的管理多种类型计算池与存储池的异构云平台,用户的需求,软硬件选型都具有代表性。主要内容包括: 云平台管理CloudStack资源池拓扑介绍CloudStack到OpenStack的变迁OpenStack对接多种类型存储云平台升级与对接多种类型资源池 大家好,今天分享一个私有云平台的实施和升级案例。 客户是一家研发公司。用户主要是公司的研发测试人员。 这个环境的特点是虚拟机的生命周期较短。一般一个项目开始会申请一批虚拟机,随着研发测试结束虚拟机就会销毁,而且在使用中经常会有测试失败虚拟机重建的情况。 还有一个特点就是负载较集中,每逢月底或周末前会有一个业务高峰期,周末或节假日时间负载明显变小。 我们先来看看...阅读全文

博文 2017-06-25 16:25:15 ccbrown

徒手写一个JSON解析器(Golang)

前一阵子看到了一个Golang的JSON库go-simplejson,用来封装与解析匿名的JSON,说白了就是用map或者slice等来解析JSON,觉得挺好玩,后来有个项目恰好要解析JSON,于是就试了试,不小心看了一眼源代码,发现竟然是用的Golang自带的encoding/json库去做的解析,而其本身只是把这个库封装了一层,看起来更好看罢了。于是心想能不能徒手写一个解析器,毕竟写了这么多年代码了,也JSON.parse,JSON.stringify了无数次。捣腾了两天,终于成了,测试了一下,性能比自带的库要高很多,速度基本上在1.6到7倍之间(视JSON串的大小和结构而定),所以决定写这篇文章分享一下思路。 先插一个段子,作为一个已经完完整整写了将近三年代码的老码农,前一段面试,不止...阅读全文

博文 2017-07-24 18:06:46 一路行歌

golang map初始化的坑

Map nil import ( "fmt" ) //panic: assignment to entry in nil map type Param map[string]interface{} type Show struct { Param } func main() { s := new(Show) //s.Param["RMB"] = 10000 //panic: assignment to entry in nil map s.Param = map[string]interface{}{} s.Param = Param{} s.Param["RMB"] = 10000 fmt.Println(s) } package main import "fmt" type Param ...阅读全文

博文 2020-05-29 11:34:13 夜空一起砍猩猩

分享一个 golang 的数字证书开发库

go-certool 这个库主要设计目标是用来在去中心网络中开发 CA 功能, 密钥使用 ECC 算法,不推荐也不支持 RSA 密钥; 接口 Keychain 用来操作证书信任链,将业务系统中识别的 CA 全部添加到 keychain 对象中,keychain 可以序列化到磁盘上,主要用来验证证书是否合法 type Keychain interface { Verify(cert *x509.Certificate) (chains [][]*x509.Certificate, err error) VerifyCRL(crl *pkix.CertificateList) error Serialize() ([]byte, error) AppendRoot(cert *x509.Cert...阅读全文

阿里云移动数据分析服务使用教程

课程介绍 移动数据分析 (Mobile Analytics) 是阿里云推出的一款移动App数据统计分析产品,为开发者提供一站式数据化运营服务:通用的多维度用户行为分析、数据开放并支持自定义分析、数据无缝对接其他数据应用产品,助力移动开发者实现基于大数据技术的精细化运营、提升产品质量和体验、增强用户黏性。 产品详情:https://www.aliyun.com/product/man/ 课时列表 • 课时1:开通服务及创建应用 • 课时2:集成SDK及初始化应用 • 课时3:页面及自定义事件埋点 • 课时4:业务分析报表 • 课时5:数据自定义分析 开始学习http://click.aliyun.com/m/27867/ ...阅读全文

Go是如何实现protobuf的编解码的(2):源码

文链接:https://mp.weixin.qq.com/s/oY... 这是一篇姊妹篇文章,浅析一下Go是如何实现protobuf编解码的: Go是如何实现protobuf的编解码的(1): 原理 Go是如何实现protobuf的编解码的(2): 源码 本编是第二篇。 前言 上一篇文章Go是如何实现protobuf的编解码的(1):原理中已经指出了Go语言数据和Protobuf数据的编解码是由包github.com/golang/protobuf/proto完成的,本编就来分析一下proto包是如何实现编解码的。 编解码原理 编解码包都有支持的编解码类型,我们暂且把这些类型称为底层类型,编解码的本质是: 为每一个底层类型配备一个或多个编解码函数 把一个结构体的字段,递归的拆解成底层类型,然...阅读全文

博文 2019-09-09 21:02:39 大彬

golang标准库中的encoding/gob包

1、golang中的gob包是什么? 2、go标准库中的gob编码规则 3、gob包给开发者提供了什么内容?以及怎么使用? 4、gob的目的是什么?以及应用场景有哪些? 一、golang中的gob包是什么? gob是golang包自带的一个数据结构序列化的编码/解码工具。 二、go标准库中的gob编码规则 image.png 当发生方传递的是struct{A,B int}结构的值,接收方可以允许前9种结构,但是后4四种结构却是不允许的。 允许模拟相似,但是不允许矛盾 各个类型的编码规则 1、结构体内只有导出字段并且导出字段才能被编码和解码 2、编码至少存在一个可编码字段,解码也至少需要一个能被解码字段,不然会报错。 3、解码方的导出字段必须存在与编码后的同名字段,类型一致,或者接收方为同类型...阅读全文

博文 2018-12-12 14:34:48 laijh

微服务--整体...

微服务 ---- “微”? “服务”?微 : 体积小服务 : 不同于系统 , 服务一个或者一组相对较小且独立的功能单元 ,是用户可以感知到的最小单位 !广义 : 分布式系统解决方案,推动细粒度服务的使用,让这些服务协同合作!《微服务》 与 《微服务框架》 的区别?微服务架构 : 是将复杂的系统使用组件化的方式进行拆分,并使用轻量级通讯方式(protobuf)进行整合的一种设计方法。微服务 :是通过 《微服务架构》这种架构方法拆分出来的一个独立的组件化的小应用。 微服务架构定义的精髓 ---- “分而治之,合而用之” 将复杂的事情拆分成小事情来做 , 通过轻量级通讯等方式把拆分的东西进行整合,使微小的功能合起来做大事情 。 ----- 例如,积木,机甲合体之类的。 《单体架构》 缺点 : 1、...阅读全文

博文 2019-05-08 03:35:05 张家驹

2019年度总结

2019年目标 2019年,可能当时心里有目标,但是没有写出来,更没有使用OKR的方式表达出来,现在年底往前翻目标的时候,已经忘记了自己的出发点。 2019年大事记 2019年,最大的事情,应该就是放弃创业,选择加入了小年糕这家公司,现在来看当时的决定,是一个非常正确的选择,虽然也经历了大概半年的挣扎和磨合,但是我很喜欢这里,学习到很多其他地方学习不到的东西,也有很多想感谢的人。 3月入职小年糕,3月主要是在适应公司文化,适应节奏。 4月上线基于谷歌论文的ABtest分层实验平台,架构比较简单,系统性能TP99在1ms左右,现在已经全量使用在小年糕的推荐系统上。用到的技术也很简单,就是本地缓存&redis缓存。 5月,重构了内容审核系统,彻底解决之前系统中的漏审和审核历史问题,系统易用性也大...阅读全文

博文 2020-01-29 05:32:40 不如假如

Go 学习笔记

[内容][111] Hello World Part 1 开发环境 环境变量设置 GOROOT 指定 golang sdk 的安装目录 GOPATH golang 工作目录,项目的源码放在这个目录下 PATH 将 GOROOT/bin 放在 Path 路径下,方便命令行能直接运行 golang的命令行工具 Go项目目录结构 |--project // 位于GOPATH下 |--src // 存放源代码 |--packageA |--packageA.go |--packageB |--packageB.go |--pkg // 编译后生成的文件 |--bin // 编译后生成的可执行文件 Part 2 基础知识 Go的注释 行注释 // 行注释 ...阅读全文

博文 2018-09-05 23:34:40 gothicrush

DockOne微信分享(一一一):LAIN 平台远程进入容器功能设计与实现

【编者的话】本次分享主要介绍在宜信大数据创新中心的开源 PaaS 平台LAIN中,基于 WebSocket 和 Docker Remote API 远程进入单进程容器功能的设计与实现。 【上海站|3天烧脑式微服务架构训练营】培训内容包括:DevOps、微服务、Spring Cloud、Eureka、Ribbon、Feign、Hystrix、Zuul、Spring Cloud Config、Spring Cloud Sleuth 等。 LAIN 平台介绍LAIN 是宜信大数据创新中心基于 Docker 开发的 PaaS 平台。目前已经开源至 GitHub 并已经在内部生产化。 LAIN 提供了裸机之上、应用开发之下的 DevOps 问题的整体解决方案;规范了应用开发、测试、上线工作流,辅以 S...阅读全文

博文 2017-06-25 16:25:34 DarkForces.

用 golang 实现区块链系列三 | 持久化与命令行

简介 到现在为止,我们已经搞了一个带有工作量证明的区块链,它使得挖矿成为可能。我们的实现已经离一个功能全面的区块链更近了一步,但仍然缺少一些重要的功能。今天我们会开始吧区块链存在一个数据库里,然后做一个简单的命令行接口投操作区块链。本质上,区块链是一个分布式的数据库。我们先省略“分布式”这个部分,集中处理“数据库”这部分。 数据库选择 当前,我们的视线中没有数据库;作为替代,我们每次运行程序会创建区块并存在内存里。我们不能重复使用区块链,我们不能和其他人共享数据,所以我们需要把它存在硬盘上。 我们需要哪种数据库?事实上,一个都不需要。在 比特币论文的原文 中,从来没说过要用哪种依存数据库,所以开发者高兴用哪个就用哪个。 比特币核心,就那个中本聪最初发布的版本,也是目前比特币实现的参考版本,使...阅读全文

博文 2018-11-19 20:34:51 小马哥_Magical

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

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 四火流年