06 2020 档案

摘要:需要下载 $ go get golang.org/x/text/encoding/simplifiedchinese $ go get golang.org/x/text/transform package utils import ( "bytes" "golang.org/x/text/enco 阅读全文
posted @ 2020-06-19 13:48 Binb 阅读(790) 评论(0) 推荐(0) 编辑
摘要:有趣的代码片段 自重写程序 UNIX/Go语言之父 Ken Thompson 在1983年的图灵奖演讲 Reflections on Trusting Trust 就给出了一个C语言的自重写程序。 最短的C语言自重写程序是 Vlad Taeerov 和 Rashit Fakhreyev 的版本: m 阅读全文
posted @ 2020-06-09 19:04 Binb 阅读(361) 评论(0) 推荐(0) 编辑
摘要:Go语言常见坑 可变参数是空接口类型 当参数的可变参数是空接口类型时,传入空接口的切片时需要注意参数展开的问题。 func main() { var a = []interface{}{1, 2, 3} fmt.Println(a) fmt.Println(a...) } 不管是否展开,编译器都无法 阅读全文
posted @ 2020-06-09 18:52 Binb 阅读(454) 评论(0) 推荐(0) 编辑
摘要:分布式系统 分布式id生成器 有时我们需要能够生成类似MySQL自增ID这样不断增大,同时又不会重复的id。以支持业务中的高并发场景。比较典型的,电商促销时,短时间内会有大量的订单涌入到系统,比如每秒10w+。明星出轨时,会有大量热情的粉丝发微博以表心意,同样会在短时间内产生大量的消息。 在插入数据 阅读全文
posted @ 2020-06-09 17:46 Binb 阅读(311) 评论(0) 推荐(0) 编辑
摘要:Web 开发简介 因为Go的net/http包提供了基础的路由函数组合与丰富的功能函数。所以在社区里流行一种用Go编写API不需要框架的观点,在我们看来,如果你的项目的路由在个位数、URI固定且不通过URI来传递参数,那么确实使用官方库也就足够。但在复杂场景下,官方的http库还是有些力有不逮。例如 阅读全文
posted @ 2020-06-08 21:51 Binb 阅读(764) 评论(0) 推荐(0) 编辑
摘要:grpcurl工具 Protobuf本身具有反射功能,可以在运行时获取对象的Proto文件。gRPC同样也提供了一个名为reflection的反射包,用于为gRPC服务提供查询。gRPC官方提供了一个C实现的grpc_cli工具,可以用于查询gRPC列表或调用gRPC方法。但是C版本的grpc_cl 阅读全文
posted @ 2020-06-08 20:16 Binb 阅读(2399) 评论(0) 推荐(0) 编辑
摘要:gRPC和Protobuf扩展 目前开源社区已经围绕Protobuf和gRPC开发出众多扩展,形成了庞大的生态。本节我们将简单介绍验证器和REST接口扩展。 验证器 到目前为止,我们接触的全部是第三版的Protobuf语法。第二版的Protobuf有个默认值特性,可以为字符串或数值类型的成员定义默认 阅读全文
posted @ 2020-06-07 22:18 Binb 阅读(732) 评论(0) 推荐(0) 编辑
摘要:解决步骤: 1:先在IDE访问google/protobuf/descriptor.proto将其copy 2:创建类似结构 -gopath -src -google -protobuf -descriptor.proto 3.将copy的文件赋值到descriptor.proto中(或不需要创建直 阅读全文
posted @ 2020-06-07 17:44 Binb 阅读(15007) 评论(1) 推荐(1) 编辑
摘要:gRPC入门 gRPC是Google公司基于Protobuf开发的跨语言的开源RPC框架。gRPC基于HTTP/2协议设计,可以基于一个HTTP/2链接提供多个服务,对于移动设备更加友好。本节将讲述gRPC的简单用法。 gRPC技术栈 最底层为TCP或Unix Socket协议,在此之上是HTTP/ 阅读全文
posted @ 2020-06-07 13:28 Binb 阅读(592) 评论(0) 推荐(0) 编辑
摘要:玩转RPC 在不同的场景中RPC有着不同的需求,因此开源的社区就诞生了各种RPC框架。本节我们将尝试Go内置RPC框架在一些比较特殊场景的用法。 客户端RPC的实现原理 Go语言的RPC库最简单的使用方式是通过Client.Call方法进行同步阻塞调用,该方法的实现如下: func (client 阅读全文
posted @ 2020-06-06 14:37 Binb 阅读(349) 评论(0) 推荐(0) 编辑
摘要:Protobuf Protobuf是Protocol Buffers的简称,它是Google公司开发的一种数据描述语言,并于2008年对外开源。Protobuf刚开源时的定位类似于XML、JSON等数据描述语言,通过附带工具生成代码并实现将结构化数据序列化的功能。但是我们更关注的是Protobuf作 阅读全文
posted @ 2020-06-06 13:17 Binb 阅读(580) 评论(1) 推荐(1) 编辑
摘要:RPC RPC入门 RPC是远程过程调用的简称,是分布式系统中不同节点间流行的通信方式。在互联网时代,RPC已经和IPC一样成为一个不可或缺的基础构件。因此Go语言的标准库也提供了一个简单的RPC实现,我们将以此为入口学习RPC的各种用法。 RPC版"Hello, World" Go语言的RPC包的 阅读全文
posted @ 2020-06-06 10:27 Binb 阅读(361) 评论(0) 推荐(0) 编辑
摘要:GoroutineID 在操作系统中,每个进程都会有一个唯一的进程编号,每个线程也有自己唯一的线程编号。同样在Go语言中,每个Goroutine也有自己唯一的Go程编号,这个编号在panic等场景下经常遇到。虽然Goroutine有内在的编号,但是Go语言却刻意没有提供获取该编号的接口。本节我们尝试 阅读全文
posted @ 2020-06-05 21:25 Binb 阅读(668) 评论(0) 推荐(0) 编辑
摘要:汇编语言的为例 汇编语言的真正威力来自两个维度:一是突破框架限制,实现看似不可能的任务;二是突破指令限制,通过高级指令挖掘极致的性能。对于第一个问题,我们将演示如何通过Go汇编语言直接访问系统调用,和直接调用C语言函数。对于第二个问题,我们将演示X64指令中AVX等高级指令的简单用法。 系统调用 系 阅读全文
posted @ 2020-06-05 21:08 Binb 阅读(930) 评论(0) 推荐(0) 编辑
摘要:GO汇编-控制流 程序主要有顺序、分支和循环几种执行流程。本节主要讨论如何将Go语言的控制流比较直观地转译为汇编程序,或者说如何以汇编思维来编写Go语言代码。 顺序执行 顺序执行是我们比较熟悉的工作模式,类似俗称流水账编程。所有不含分支、循环和goto语句,并且没有递归调用的Go函数一般都是顺序执行 阅读全文
posted @ 2020-06-03 13:49 Binb 阅读(531) 评论(0) 推荐(0) 编辑
摘要:GO汇编-函数 终于到函数了!因为Go汇编语言中,可以也建议通过Go语言来定义全局变量,那么剩下的也就是函数了。只有掌握了汇编函数的基本用法,才能真正算是Go汇编语言入门。本章将简单讨论Go汇编中函数的定义和用法。 基本语法 函数标识符通过TEXT汇编指令定义,表示该行开始的指令定义在TEXT内存段 阅读全文
posted @ 2020-06-02 22:07 Binb 阅读(1970) 评论(0) 推荐(0) 编辑
摘要:GO汇编常量和全局变量 程序中的一切变量的初始值都直接或间接地依赖常量或常量表达式生成。在Go语言中很多变量是默认零值初始化的,但是Go汇编中定义的变量最好还是手工通过常量初始化。有了常量之后,就可以衍生定义全局变量,并使用常量组成的表达式初始化其它各种变量。本节将简单讨论Go汇编语言中常量和全局变 阅读全文
posted @ 2020-06-01 21:53 Binb 阅读(1384) 评论(0) 推荐(0) 编辑
摘要:计算机结构 汇编语言是直面计算机的编程语言,因此理解计算机结构是掌握汇编语言的前提。当前流行的计算机基本采用的是冯·诺伊曼计算机体系结构(在某些特殊领域还有哈佛体系架构)。冯·诺依曼结构也称为普林斯顿结构,采用的是一种将程序指令和数据存储在一起的存储结构。冯·诺伊曼计算机中的指令和数据存储器其实指的 阅读全文
posted @ 2020-06-01 21:16 Binb 阅读(537) 评论(0) 推荐(0) 编辑