Go 实现的科学计算库Gosl
Gosl 是用 Go 编写的科学计算库,用于帮助科学研究软件的开发。 这个库尽可能做到通用,它使用了多线程并发技术,以及基于消息传递的并发计算。它还实现了几何计算,随机数生成和概率分布的功能和结构、优化算法以及绘图和可视化...阅读全文
Gosl 是用 Go 编写的科学计算库,用于帮助科学研究软件的开发。 这个库尽可能做到通用,它使用了多线程并发技术,以及基于消息传递的并发计算。它还实现了几何计算,随机数生成和概率分布的功能和结构、优化算法以及绘图和可视化...阅读全文
Protobuf对于Golang通过插件进行支持,因些需要安装protoc的执行环境,下面我们来一步步看下,如何搭建一个编译环境。 1. 安装protoc 2. 下载并安装protobuf-go插件 从github上下载插件,并解压(https://github.com/golang/protobuf),得到以下的目录 drwxr-xr-x 6 root root 4096 Jun 16 15:45 . drwxr-xr-x 3 root root 4096 Jun 16 15:48 .. -rw-r--r-- 1 root root 173 Jun 15 06:31 AUTHORS -rw-r--r-- 1 root root 170 Jun 15 06:31 CONTRIBUTORS d...阅读全文
笔者之前有写过关于 xml 的使用文章,今天来给大家介绍关于数据序列化和反序列化的一种常见方式 JSON. 尤其是在 http,rpc 的微服务调用中。 基础语法 在 Go 中我们主要使用官方的 encoding/json 包对 json 数据进行序列化和反序列化,主要使用方法有: 序列化: 反序列化: 简单的例子 当我们运行代码的时候可以得到如下输出结果: 在这个列子中,我们使用 unmarshal 和 marshal 将一个整数的 JSON 二进制转化为 go int 数据 注意:在实际应用中,我们在序列化和反序列化的时候,需要检查函数返回的 err,如果 err 不为空,表示数据转化失败。 例如:我们把上面例子中 value 类型由 int 修改为 string 后再次运行代码,你将得...阅读全文
## xingo 高性能 golang 网络库,游戏开发脚手架。 默认通信协议如下(支持自定义协议处理部分代码,支持灵活的重载协议部分代码): * Len uint32 数据 Data 部分长度 * MsgId uint32 消息号 * Data []byte 数据 * 消息默认通过 google 的 protobuf 进行序列化 服务器全局配置对象为 GlobalObject,支持的配置选项及默认值如下: * TcpPort: 8109,//服务器监听端口 * MaxConn: 12000,//支持最大链接数 * LogPath: "./log",//日志文件路径 * LogName: "server.log",//日志文件名 * M...阅读全文
大家好,我是徐超,从事 Kubernetes 开发已经两年多了。 今天,我从一个开发者的角度来讲一讲 client-go repository,以及怎么用 client-go 搭建 Controller。同时,也给大家讲一讲开发过程中遇到的坑,希望大家在开发的时候可以绕坑而行。 另外,我还会讲一下 Kubernetes 的 API,让 controller 功能变的更加强大。 那我们现在先来讲,有哪些方法可以跟 APIserver 进行通讯。最常用的,可能就是 kubectl,以及官方支持的 UI,Kube Dashboard,这是 google 最近投入很多的一个项目。 开发过程中 debug 的时候可以直接去调用 k8s 的 Restful API,通过写脚本去实现 Controller...阅读全文
Redis 作为一个非关系数据库,以key-value 的方式存储数据,在后台开发时常被用于处理缓存。在golang 中的结构体的存储也是经常需要接触到,以下是几种结构体存储的方式的对比。 1.hash类型方式 func DoHashStore(conn redis.Conn) { //以hash类型保存 conn.Do("hmset",redis.Args{"struct1"}.AddFlat(testStruct)...) //获取缓存 value, _ := redis.Values(conn.Do("hgetall", "struct1")) //将values转成结构体 object := &TestStruct{} redis.ScanStruct(value, object) ...阅读全文
# goweb 一个基于go语言开发API的工具,这个工具受到了SpringMVC的启发,结合了go语言本身的特性,整体比较简单,接下来,看看如何使用它。 下载安装: ``` go get github.com/alberliu/goweb ``` [TOC] ### 1.核心功能 #### 请求体参数注入 ```go package main import "github.com/alberliu/goweb" type User struct { Id int `json:"id"` Name string `json:"name"` } func handler(user User) User { return user } func main() { goweb.HandlePost...阅读全文
在计算中,可视化编程语言(VPL)允许用户通过图形化操作程序元素而不是通过文本指定来创建程序。但一直以来,除了在一些非常有限的领域外,可视化编程都未成功。对此,有人认为文本编程语言混淆了编程的本质,也有网友表示为支持编程而开发的工具并不重要,那么可视化编程的出路到底在哪里?对此,本文作者 Ivan Daniluk 发表了长文剖析可视化编程语言失败的原因,并探讨新兴的 Go 语言在可视化编程中的应用与解决方案。 作者 | Ivan Daniluk译者 | 弯月,责编 | 屠敏出品 | CSDN(ID:CSDNnews)以下为译文:我希望能够开门见山,直接讨论主题,但是我觉得还是有必要首先介绍一下背景。这一切都因为我感觉编写文本代码太让人失望了。IDE与火把你知道代码编辑器和火把之间有什么共同之...阅读全文
GRPC是一个高性能、通用的开源RPC框架,其由Google主要面向移动应用开发并基于HTTP/2协议标准而设计,基于ProtoBuf(ProtocolBuffers)序列化协议开发,且支持众多开发语言。gRPC提供了一种简单的方法来精确地定义服务和为iOS、Android和后台支持服务自动生成可靠性很强的客户端功能库。客户端充分利用高级流和链接功能,从而有助于节省带宽、降低的TCP链接次数、节省CPU使用、和电池寿命。 1 安装 go get google.golang.org/grpc 2 创建helloworld.proto syntax = "proto3"; option java_package = "io.grpc.examples"; package helloworld; ...阅读全文
JSON(Javascript Object Notation)已经成为了一种非常流行的数据交换格式,golang 自然不会忽视对 json 的支持,golang 自带的标准库就可以方便的处理 json。另外,推荐一种号称全世界最快的 JSON 解析器 -- jsoniter。 简介 json 中提供的处理 json 的标准包是 encoding/json,主要使用的是以下两个方法: // 序列化 func Marshal(v interface{}) ([]byte, error) // 反序列化 func Unmarshal(data []byte, v interface{}) error 序列化前后的数据结构有以下的对应关系: bool, for JSON booleans floa...阅读全文
----目录---- 命名 文件命名 package 变量 常量 接口 结构体 方法 注释 README 命名 文件命名 文件命名一律采用小写,不用驼峰式,尽量见名思义,看见文件名就可以知道这个文件下的大概内容。 其中测试文件以test.go结尾,除测试文件外,命名不出现。 例子: stringutil.go, stringutil_test.go 包名package 包名用小写,使用短命名,尽量和标准库不要冲突。 包名统一使用单数形式。 变量 变量命名一般采用驼峰式,当遇到特有名词(缩写或简称,如DNS)的时候,特有名词根据是否私有全部大写或小写。 例子: apiClient、URLString 常量 同变量规则,力求语义表达完整清楚,不要嫌名字长。 如果模块复杂,为避免混淆,可按功能统一...阅读全文
gob是Golang包自带的一个数据结构序列化的编码/解码工具。编码使用Encoder,解码使用Decoder。一种典型的应用场景就是RPC(remote procedure calls)。 gob和json的pack之类的方法一样,由发送端使用Encoder对数据结构进行编码。在接收端收到消息之后,接收端使用Decoder将序列化的数据变化成本地变量。 有一点需要注意, 发送方的结构和接受方的结构并不需要完全一致 结构体中缺省的字段将不会被发送。而且在接收方,并不需要所有的字段都要有对应的结构属性对应。godoc中的这个例子很形象: 当发送方传递的是struct{A, B int}结构的值的时候,接收方可以允许前9种结构,但是后面4种结构确实不允许的。 个人觉得这种设定是很符合逻辑的:接收...阅读全文
Google gRPC 简介 1. 简介 Google 刚刚开源了grpc, 一个基于HTTP2 和 Protobuf 的RPC 实现。 其中github地址: https://github.com/grpc/grpc Protobuf 本身虽然提供了RPC 的定义语法,但是一直以来,Google 只开源了Protobuf 序列化反序列化的代码,而没有开源RPC 的实现,于是存在着众多良莠不齐的第三方RPC 实现。 从实现和特性看来,grpc 更多的是考虑移动场景情况下客户端和服务端的通信,正如其自称的「general RPC framework that puts mobile and HTTP/2 first」。HTTP2 本身提供了连接多路复用、Body 和 Header 压缩等机制,...阅读全文
带入gRPC:gRPC Streaming, Client and Server 原文地址:带入gRPC:gRPC Streaming, Client and Server 前言 本章节将介绍 gRPC 的流式,分为三种类型: Server-side streaming RPC:服务器端流式 RPC Client-side streaming RPC:客户端流式 RPC Bidirectional streaming RPC:双向流式 RPC 流 任何技术,因为有痛点,所以才有了存在的必要性。如果您想要了解 gRPC 的流式调用,请继续 图 gRPC Streaming 是基于 HTTP/2 的,后续章节再进行详细讲解 为什么不用 Simple RPC 流式为什么要存在呢,是 Simple ...阅读全文
package main import ( "bytes" "encoding/binary" "fmt" ) type Register struct { ACTION int32 SID int32 } func ExampleWrite() []byte { buf := new(bytes.Buffer) var info Register info.ACTION = 20004 info.SID = 6 err := binary.Write(buf, binary.LittleEndian, info) if err != nil { fmt.Println("binary.Write failed:", err) } fmt.Printf("% x\n", buf.Bytes(...阅读全文
年前公司接入了微信国际版的支付,当时WeChat Wallet本身的接口还没开发完(上几周WeChat Wallet 终于结束灰度全面开放了), 接入时踩了一大堆坑。 除了当时因为给的文档并不全或错误造成的一些困扰外, 另外有个接口问题折磨了好一阵。 当时有这样一个问题,当支付完成时,需要去WeChat支付后台查看支付状态。 但我依文档的JSON格式,加密和序列化后,提交给WeChat查单接口,老提示签名不对。 查询的规则很简单,前面支付的规则也是类似写法也没问题,按理查询不应当出现这种问题的。 后来在前端经验丰富的同事和微信那边开发的支持下才查出,原来问题出在JSON序列化上. Go语言序列化会自动对一些特殊字符会作编码处理,而WeChat后台查询那边接口不会识别, 但WeChat支付那边...阅读全文
第一:复杂度估算和排序算法(上) 1) 时间复杂度和空间复杂度 2)认识对数器 3)冒泡排序 4)选择排序 5)插入排序 6)如何分析递归过程的时间复杂度 7)归并排序 8)小和问题 第二:复杂度估算和排序算法(下) 1)荷兰国旗问题 2)随机快速排序 3)堆结构与堆排序 4)认识排序算法的稳定性 5)认识比较器 6)桶排序 7)计数排序 8)基数排序 9)数组排序后的最大差值问题 10)排序算法在工程中的应用 第三:章栈、队列、链表、数组和矩阵结构 1)栈结构 2)队列结构 3)链表结构 4)数组结构 5)矩阵结构 6)二分搜索的扩展 第四:二叉树结构 1)二叉树结构 2)二叉树的递归与非递归遍历 3)打印二叉树 4)判断搜索二叉树 5)判断完全二叉树 6)判断平衡二叉树 7)折纸问题 8...阅读全文
到现在为止,我已经忘记了我在写什么,但我确定这篇文章是关于Go语言的。这主要是一篇,关于运行速度,而不是开发速度的文章——这两种速度是有区别的。 我曾经和很多聪明的人一起工作。我们很多人都对性能问题很痴迷,我们之前所做的是尝试逼近能够预期的(性能)的极限。应用引擎有一些非常严格的性能要求,所以我们才会做出改变。自从使用了Go语言之后,我们已经学习到了很多提升性能以及让Go在系统编程中正常运转的方法。 Go的简单和原生并发使其成为一门非常有吸引力的后端开发语言,但更大的问题是它如何应对延迟敏感的应用场景?是否值得牺牲语言的简洁性使其速度更快?让我们来一起看一下Go语言性能优化的几个方面:语言特性、内存管理、并发,并根据这些做出合适的优化决策。所有这里介绍的测试代码都在这里.一、Channels...阅读全文
package main import ( "encoding/json" "fmt" ) type Change struct { Mid int //菜单Id Actions []string //拥有的权限 "add" "view" "delete" "update" } type Change_slice struct { ChgArr []Change //一个角色对应的菜单以及权限 } func main() { //对象序列化为json字符串---------------------------------Begin var c1, c2 Change var msg Change_slice c1.Mid = 1 c1.Actions = []string{"view", "...阅读全文
见代码注释: package main import ( "fmt" "sync" ) func main() { sourceArray := [...]string{"a", "b", "c", "d", "e", "f", "g"} fmt.Println(sourceArray) slice_1 := sourceArray[:4] slice_2 := sourceArray[2:] slice_3 := sourceArray[1:] slice_4 := slice_3[1:] slice_5 := slice_4[1:] slice_1[3] = "i" fmt.Println(sourceArray) fmt.Println(slice_1) fmt.Println(sli...阅读全文
```go package main import ( "bytes" "encoding/gob" "fmt" ) type Users struct { Username string Password string } func main() { user := Users{ "pengjin", "123456", } var result bytes.Buffer encoder := gob.NewEncoder(&result) encoder.Encode(user) userBytes := result.Bytes() //fmt.Println(userBytes) var account Users decoder := gob.NewDecoder(bytes.Ne...阅读全文
说到rpc让我想起了刚毕业面试的时候,被问到是否了解rpc?我记得当时我的回答是“课本上学过rpc,只知道是远程过程调用,但没有用过,具体也不知道是什么”。的确,大学中间件这门课程里有讲到rpc,里面还引入了一个非常难理解的概念——“桩”,英文应该叫”stub”。现在的rpc实现里,stub这个概念好像都没见到了,应该都是叫”method”。 实现一个rpc服务器很难吗?rpc服务器也就是在tcp服务器的基础上加上自定义的rpc协议而已。一个rpc协议里,主要有个3个非常重要的信息。 调用的远程method名字,一般就是一个函数名 call参数,也就是发送给服务器的数据 客户端生成的调用请求seq 除了最后一点,其他两点显然就是组成一个普通的函数调用而已,这也就是远程过程调用了。最后一点的s...阅读全文
boltDB Blot Bolt 是由 Howard Chu 的 LMDB 项目启发的一个纯粹的 Go key/value数据库。 该项目的目标是为不需要完整数据库服务器(如Postgres或MySQL)的项目提供一个简单,快速和可靠的数据库。 由于 Bolt 是用来作为这样一个低层次的功能,简单是关键。 该API将是小的,只专注于获取值和设置值而已。 项目状态 Blot 稳定,API固定,文件格式固定。 使用完整的单元测试覆盖率和随机黑箱测试来确保数据库一致性和线程安全性。 Blot 目前用于高达1TB的高负载生产环境。 Shopify 和 Heroku等许多公司每天都使用 Bolt 来支持服务。 A message from the author Bolt 最初的目标是提供一个简单的纯 ...阅读全文
image.png 1. 前言 大家好,我是Asong,今天不做知识分享,在这里给大家推荐一款论文降重神器,有了它,解决了我不少烦恼。这几天在忙论文,维普查询一次就花掉了我80大洋,想想心都在颤呀!!!重复率在27%,为了保险,只好降重,在查重,啊啊啊,我的银子!!!!好在这次降重通过了,只折腾了一次,我的一个同学折腾了4次,心疼!!! 但是今天Asong发现了一款论文降重神器 "MyEpoch论文降重系统" ,有了它,我们就不用在绞尽脑汁去想了,直接复制粘贴,完事,齐活!论文完美达到复制比检测! 2. 降重效果演示 asong去知网下载了一篇学术论文,在降重前后分别使用PaperPass进行了查重,降重前重复率为92%,降重后为19%,这效果杠杠滴呀!!!这里我就是把降重后的句段直接复制粘...阅读全文
Golang实现的自动玩微信跳一跳 需要安装adb驱动, 这里有一篇国外作者的[教程](https://www.xda-developers.com/install-adb-windows-macos-linux/) 手机连接电脑后,进入设置-开发者选项-打开usb调试 准备就绪后,在终端输入`adb devices`, 如果可以看到对应设备,表示adb驱动已经安装配置完毕 安装方法一: 一键下载安装,无需搭建环境,傻瓜化使用方法 请在[release](https://github.com/sundy-li/wechat_autojump_game/releases) 页面下载对应操作系统的二进制压缩包,解压后,执行jump文件即可 安装方法二: 手动安装,开发调试 利用a...阅读全文
如果一门语言可以用来写爬虫,那么它就需要一个优雅的数据可视化库。 ---沃.兹基硕德 在 Golang 这门语言中,目前数据可视化的第三方库还是特别少,go-echarts 的开发就是为了填补这部分的空隙。Echarts 是百度开源的非常优秀的可视化图表库,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。也有其他语言为其实现了相应语言版本的接口,如 Python 的 pyecharts,go-echarts 也是借鉴了 pyecharts 的一些设计思想。 安装 $ go get -u github.com/chenjiandongx/go-echarts/... 特性 简洁的 API 设计,使用如丝滑般流畅 囊括了 20+ 种常见图表,应有尽有 高度灵活的配置项,可轻松搭配出精...阅读全文
章节1:Golang环境搭建章节2:数据类型章节3:字符串原理和时间日期类型章节4:流程控制章节5:函数介绍1章节6:函数详解2章节7:数组章节8:切片章节9:指针类型章节10:map数据类型章节11:package介绍章节12:结构体介绍一章节13:结构体介绍二章节14:IO操作一章节15:IO操作二章节16:接口讲解1章节17:日志库项目开发(接口应用实战)章节18:反射详解章节19:单元测试和调试章节20:并发编程章节21:select和线程安全章节22:网络编程章节23:web编程基础章节24:数据格式章节25:依赖管理和Mysql开发章节26:redis开发章节27:nsq消息队列章节28:gin框架讲解章节29:博客项目实战章节30:博客系统2章节31:golang性能分析章节3...阅读全文
VirtualBox配置私有云 初始准备 AMD处理器电脑需要开启AMD-V Intel处理器电脑需要开启Intel-VT 下载VirtualBox并安装 下载CentOs7(可以选择普通版也可以选择最小ISO) 创建Linux虚拟机 配置内网互联用的网卡 新建网卡: VirtualBox菜单 :管理 -> 主机网络管理器,创建一块虚拟网卡 配置参数: 网址分配:192.168.100.1/24,在主机 windows 命令行窗口输入 ipconfig 就可以看到 VirtualBox Host-Only Network #?: 的网卡 安装CentOs 新建系统: 分配资源:分配内存和处理器,建议分配1/3左右的资源给虚拟机,虚拟机硬盘最好大于30GB。 第一块网卡必须是 NAT;第二块网...阅读全文
首先需要澄清一个事实:redis服务端是单线程处理客户端请求,也就是说客户端请求在服务端是串行化执行的,因此对服务端来说,并不存在并发问题。但业务方却存在并发操作redis中的同一个key的情况。所以如何让A客户端知道B客户端正在操作它想操作的 key,就成了必须要讨论的问题。 那么开始总结下方案吧: 1. SETNX key value //key存在就不做任何操作,返回0;不存在操作成功返回1 这种方式通过对需要操作的key加锁来保证并发操作的串行化。这里我们以Golang代码为例来举例说明该操作。先看多个协程写同一个key的情况。代码如下: package main import ( "fmt" "github.com/garyburd/redigo/redis" "runtime" ...阅读全文
看着好高大上啊!     https://eng.uber.com/atg-dataviz...阅读全文
课时列表 • 第1 章 : 安全问道 • 课时1:如何通过“安全等级保护制度”?其实并不难 • 课时2:吴翰清:WannaCry事件最“细思恐极“的一个事实是? • 课时3:吴瀚清:漏洞披露的前世今生 • 课时4:为何初创企业也会被DDos攻击? • 课时5:白帽子为什么那么有钱? • 课时6:企业数据泄露,祸从何起? • 课时7:从你家的防盗门窗,看服务器安全 • 课时8:物联网安全知多少 • 课时9:云上安全三字经(上) • 课时10:云上安全三字经(下) • 第2 章 : 云端安全攻略 • 课时11:开始使用云盾Web应用防火墙 • 课时12:用态势感知2分钟搭建你的安全可视化大屏 ...阅读全文
摘要: 金融行业的网络安全策略演进,Windows SMB服务0day漏洞预警,新型 “无文件” 勒索软件Sorebrect进化攻击预警,普惠金融的反欺诈挑战与方法论,Gartner:2017年中国新兴技术成熟度曲线 【本周头条】 金融行业的网络安全策略演进。点击查看原文 概要:金融行业所面对的挑战更加复杂多变:例如数据安全、IoT安全、勒索软件、更严格的合规要求等,相应的,金融行业的网络安全防护方法论也需要随之进化。“隔离式”的入侵防护方法,和传统的终端防护逐渐弱化。金融行业应当更加重视这三个能力:精准的检测和识别,快速的事件响应以及威胁情报。 点评:Fortinet的观点与阿里云安全...阅读全文
syncd是一款开源的代码部署工具,它具有简单、高效、易用等特点,可以提高团队的工作效率.
**目前只支持类Linux系统.**
## 目录
- [特性](#特性)
- [原理](#原理)
- [安装](#安装)
- [使用](#使用)
- [帮助](#帮助)
- [授权](#授权)
## 特性
- Go语言开发,编译简单、运行高效
- Web界面访问,交互友好
- 灵活的角色权限配置
- 支持Git仓库
- 分支、tag上线
- 部署hook支持
- 完善的上线工作流
- 邮件通知机制
## 原理
阅读全文
概述 jsoniter(json-iterator)是一款快且灵活的 JSON 解析器;从 dsljson和 jsonparser 借鉴了大量代码。 Jsoniter 有三个不同的 api 用于不同的场合: iterator-api:用于处理超大的输入 bind-api:日常最经常使用的对象绑定 any-api:lazy 解析大对象,具有 PHP Array 一般的使用体验 一句话总结就是简单快捷方便,性能OK!并且完美兼容:encoding/json 性能 性能压测 对比 在不使用代码生成的前提下,Jsoniter 的 Golang 版本可以比标准库(encoding/json)快 6 倍之多。(提前给个赞行不行<_>)更多性能 使用 第一步: 引入jsonitor: go get git...阅读全文
Protobuf3入门指南2018年04月22日 11:56:16 mingkai_beijing 阅读数:482 标签: 序列化数据处理golangprotobuf 更多个人分类: 软件开发版权声明:本文为博主原创文章,更多博客请访问mikezhang.cc https://blog.csdn.net/u014029783/article/details/80037654Protobuf是google开发的一种跨语言和平台的序列化数据结构的方式,类似于XML但是更小更快而且更简单,只需要定义一次结构体,通过生成的源代码可以在不同的数据流和不同的语言平台上去读写数据结构。最新的protobuf3支持更多的语言使用,比如go 、 object-c等等。另外proto2与proto3并非完全兼容...阅读全文
>一年时间转瞬即逝,16年11月份因为业务需要,开始构建actor工具库,因为cluster下grain实现太困难,17年4月切换到具有该特征的protoactor,到现在,使用这个框架快一年。一路踩坑无数,趁这几天规划下阶段业务,就抽空聊聊。 ## ProtoActor框架的基本要点 *Actor*框架的提出基本上与CSP差不多处于同一个年代,相对于后者,过去10年Actor还是要稍微火一些,毕竟目前都强调快速开发,绝大部分的开发人员更关注业务实现,这符合*Actor*侧重于接收消息的对象(*CSP*更强调传输通道)一致。ProtoActor的设计与实现,绝大部分和*AKKA*很相似,只是在序列化、服务发现与注册、生命周期几个地方略有差异。框架使用上整体与*AKKA*相同,但受限于go语言...阅读全文
go 自带的 encoding/json 支持json的序列化和反序列化, 然而它是基于反射的,有下面几个缺点: 反射是性能差的代名词, 并且无法在编译时进行优化。 只有 Public 字段才可以,反射库只能反射出暴露出来的字段,这意味着你无法对private 字段进行JSON转化。 https://github.com/benbjohnson/megajson 针对这个问题做了优化,它是一个代码生成工具, 通过使用 go/parser 和 go/ast 包去产生你自己类型实体的自定义的 序列号和反序列化代码。 这里的序列号和反序列化知道你的数据类型,所以不会用反射,继而解决了上面问题。 通过测试, Go 1.2 下, Megajson 比 encoding/json 包有2倍的性能提升。 ...阅读全文
 插图来自于“A Journey With Go”,由 Go Gopher 组织成员 Renee French 创作。 本文基于 Go 1.12。 关于标准库 `encoding/json` 性能差的问题在很多地方被讨论过,也有很多第三方库在尝试解决这个问题,比如[easyjson](https://github.com/mailru/easyjson),[jsoniter](https://github.com/json-iterator/g...阅读全文
算法学习的一个好工具:https://visualgo.net/e...阅读全文
Bulma 框架最大的特点,就是简单好用。所有样式都基于 class,只需为 HTML 元素指定class,样式立刻生效。 - 官网 https://bulma.io - 源码 https://github.com/jgthms/bulma Bulma 中文网正在翻译中,欢迎感兴趣的一起加入。 - 中文网 https://bulma.studygolang.com/ - 翻译项目 https://github.com/polaris1119/bulm...阅读全文
一、概括 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,现在是主流的数据格式,常用于web开发中前端与后端进行数据交互的一种方式 二、在go中常见的几种序列化成json的方式 1、将结构体序列化成json package main import ( "encoding/json" "fmt" ) type Student struct { Name string `json:"name"` // 姓名 Age int `json:"age"` // 年龄 Gender string `json:"gender"` // 性别 Score float64 `json:"score"` // 分数 Course []string `json:"cou...阅读全文
现在的redis大红大紫,而且很多应用场景都适合使用Reids来做缓存或者直接做存储,典型的如mysql前端缓存、手游里面的排行榜等。那么我们怎样用golang来操作redis呢?熟悉redis的同学,肯定第一反应就是按照redis的协议,实现一个客户端与redis服务进行通信即可。不熟悉redis的同学,可能会说用cgo封装下官方的c客户端,妥妥的。是的,这两种方法都可以。既然redis这么火,那么这些工作有没有人做呢?答案是肯定的。在redis的官方网站的客户端列表里就有众多golang的客户端。这个时候,可能你又要犯难了,我该用哪一个呢?熟悉reids的同学都知道,官网加星星的客户端都是好客户端,就像棒子天上的星星一样神奇。可是坑爹的时,golang不同于python有两个都是加星星的...阅读全文
先把结论列在前面: Golang的性能可以做到非常好,但是一些native包的性能很可能会拖后腿,比如regexp和encoding/json。如果在性能要求较高的场合使用,要根据实际情况做相应优化。 on-cpu/off-cpu火焰图的使用是程序性能分析的利器,往往一针见血。虽然生成一张火焰图比较繁琐(尤其是off-cpu图),但绝对值得拥有! 之前一直使用Logstash作为日志文件采集客户端程序。Logstash功能强大,有丰富的数据处理插件及很好的扩展能力,但由于使用JRuby实现,性能堪忧。而Filebeat是后来出现的一个用go语言实现的,更轻量级的日志文件采集客户端。性能不错、资源占用少,但几乎没有任何解析处理能力。通常的使用场景是使用Filebeat采集到Logstash解析...阅读全文
其实现在游戏服务端基本上都是多语言组合开发的,C++已经不再是唯一选择,Java、Python、Golang、Erlang、C#以及各种脚本语言都会涉及。但是为什么现如今大多数游戏服务端还是用C++来写呢?我认为一个项目在做技术选型时把C++作为游戏服务端的主要开发语言主要基于以下原因:十多年前,技术栈,包含编程语言的选择还不是很多。C++是当时看来少数,被证明稳定,可靠,高性能,具备丰富功能的高级语言。所以理所当然被选择作为开发主力。基于此,进程框架,诸如线程模型,定时器,容器等;IPC,比如socket,共享内存,并由共享内存进一步衍生出的数据恢复技术等都蓬勃发展。而且大厂之前都有封闭的思想,这和现在开源流行完全不同。生怕别人知道自己的技术优势,也非常不信任社区产品的质量。结果就是——造...阅读全文
本教程使用proto3版本的protocol buffer语言,提供了一个基本的在Go程序中使用protocol buffer的介绍。通过创建一个简单的示例应用程序,向你展示如何 在.proto文件中定义消息格式。 使用protoc编译器编译生成Go代码。 使用Go的protocol buffer API读写消息。 它不是一个全面的在Go中使用protocol buffer的指南,更详细的参考信息请查看前面的两个教程。 Protobuf语言指南 Protobuf生成Go代码指南 为什么使用protocol buffer 我们将要使用的示例是一个非常简单的“地址簿”应用程序,可以在文件中读取和写入人员的联系人详细信息。地址簿中的每个人都有姓名,ID,电子邮件地址和联系电话号码。 如何序列化和检...阅读全文
写法有点怪异,记一下吧 _, implemented := this.delegate.(IGenTcpServerDelegate) if implemented { this.delegate.GenTcpServerClientConnected(this.getClientInfoMap(conn)) } 也就是传说中的接口查询,话说go的一些东西真心让人真气逆行啊,哎,就不能设计的人性化点。。...阅读全文
Golang的json序列化果真是静态语言的范呀。各种的麻烦,各种的标准。 用pyhon的时候毫无顾忌,各种的数据各种的塞。 各个功能模块需要传递信息,一般是需要序列化的,常用的序列化模式有json、msgpack啥的。 这里就先扯扯golang的json模块。 对于相当复杂又各种嵌套的json数据,应该如何解析成go内置的数据类型? 需要你写一堆的关联struct的。 golang json里的struct变量首字母需要大写的,如果给你的json是小写咋办?在type后面跟着别名就可以了,格式是 json:"字段名" 。 该文章写的有些乱,欢迎来喷 ! 另外文章后续不断更新中,请到原文地址查看更新。 http://xiaorui.cc/2016/03/06/golang%E8%A7%A3%...阅读全文
ProtoBuf: 是一套完整的 IDL(接口描述语言),出自Google,基于 C++ 进行的实现,开发人员可以根据 ProtoBuf 的语言规范生成多种编程语言(Golang、Python、Java 等)的接口代码,本篇只讲述 Golang 的基础操作。据说 ProtoBuf 所生成的二进制文件在存储效率上比 XML 高 3~10 倍,并且处理性能高 1~2 个数量级,这也是选择 ProtoBuf 作为序列化方案的一个重要因素之一。 安装: 安装 protoc :Protoc下载地址,可以根据自己的系统下载相应的 protoc,windows 用户统一下载 win32 版本。 配置 protoc 到系统的环境变量中,执行如下命令查看是否安装成功: $ protoc --version如果...阅读全文