随笔分类 -  GoGoGo

摘要:转自 在Go语言项目中使用Zap日志库 介绍 在许多Go语言项目中,我们需要一个好的日志记录器能够提供下面这些功能: 能够将事件记录到文件中,而不是应用程序控制台。 日志切割-能够根据文件大小、时间或间隔等来切割日志文件。 支持不同的日志级别。例如INFO,DEBUG,ERROR等。 能够打印基本信 阅读全文
posted @ 2020-08-04 11:09 Binb 阅读(477) 评论(0) 推荐(0) 编辑
摘要:转自 Go语言配置管理神器——Viper中文教程 Viper是适用于Go应用程序的完整配置解决方案。它被设计用于在应用程序中工作,并且可以处理所有类型的配置需求和格式。 Viper Viper是适用于Go应用程序的完整配置解决方案。它被设计用于在应用程序中工作,并且可以处理所有类型的配置需求和格式。 阅读全文
posted @ 2020-08-03 22:06 Binb 阅读(1174) 评论(0) 推荐(0) 编辑
摘要:转自 使用zap接收gin框架默认的日志并配置日志归档 本文介绍了在基于gin框架开发的项目中如何配置并使用zap来接收并记录gin框架默认的日志和如何配置日志归档。 我们在基于gin框架开发项目时通常都会选择使用专业的日志库来记录项目中的日志,go语言常用的日志库有zap、logrus等。网上也有 阅读全文
posted @ 2020-08-03 21:59 Binb 阅读(1589) 评论(0) 推荐(0) 编辑
摘要:转自 sqlx介绍 在项目中我们通常可能会使用database/sql连接MySQL数据库。sqlx可以认为是Go语言内置database/sql的超集,它在优秀的内置database/sql基础上提供了一组扩展。这些扩展中除了大家常用来查询的Get(dest interface{}, ...) e 阅读全文
posted @ 2020-08-02 11:10 Binb 阅读(6026) 评论(1) 推荐(0) 编辑
摘要:转自 gin框架路由详解 gin框架使用的是定制版本的httprouter,其路由的原理是大量使用公共前缀的树结构,它基本上是一个紧凑的Trie tree(或者只是Radix Tree)。具有公共前缀的节点也共享一个公共父节点。 Radix Tree 基数树(Radix Tree)又称为PAT位树( 阅读全文
posted @ 2020-07-31 20:02 Binb 阅读(1246) 评论(0) 推荐(0) 编辑
摘要:转自 在gin框架中使用JWT 什么是JWT? JWT全称JSON Web Token是一种跨域认证解决方案,属于一个开放的标准,它规定了一种Token实现方式,目前多用于前后端分离项目和OAuth2.0业务场景下。 为什么需要JWT? 在之前的一些web项目中,我们通常使用的是Cookie-Ses 阅读全文
posted @ 2020-07-31 19:52 Binb 阅读(322) 评论(0) 推荐(0) 编辑
摘要:转自 gin框架路由拆分与注册 基本的路由注册 下面最基础的gin路由注册方式,适用于路由条目比较少的简单项目或者项目demo。 路由拆分成单独文件或包 当项目的规模增大后就不太适合继续在项目的main.go文件中去实现路由注册相关逻辑了,我们会倾向于把路由部分的代码都拆分出来,形成一个单独的文件或 阅读全文
posted @ 2020-07-31 19:49 Binb 阅读(1697) 评论(0) 推荐(0) 编辑
摘要:文章转自:https://github.com/qcrao/Go-Questions/edit/master/GC/GC.md 当文中提及目前、目前版本等字眼时均指 Go 1.14,此外,文中所有 go 命令版本均为 Go 1.14。 GC 的认识 1. 什么是 GC,有什么作用? GC,全称 Ga 阅读全文
posted @ 2020-07-27 14:12 Binb 阅读(825) 评论(0) 推荐(0) 编辑
摘要:需要下载 $ 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 阅读(800) 评论(0) 推荐(0) 编辑
摘要:分布式系统 分布式id生成器 有时我们需要能够生成类似MySQL自增ID这样不断增大,同时又不会重复的id。以支持业务中的高并发场景。比较典型的,电商促销时,短时间内会有大量的订单涌入到系统,比如每秒10w+。明星出轨时,会有大量热情的粉丝发微博以表心意,同样会在短时间内产生大量的消息。 在插入数据 阅读全文
posted @ 2020-06-09 17:46 Binb 阅读(314) 评论(0) 推荐(0) 编辑
摘要:grpcurl工具 Protobuf本身具有反射功能,可以在运行时获取对象的Proto文件。gRPC同样也提供了一个名为reflection的反射包,用于为gRPC服务提供查询。gRPC官方提供了一个C实现的grpc_cli工具,可以用于查询gRPC列表或调用gRPC方法。但是C版本的grpc_cl 阅读全文
posted @ 2020-06-08 20:16 Binb 阅读(2405) 评论(0) 推荐(0) 编辑
摘要:gRPC和Protobuf扩展 目前开源社区已经围绕Protobuf和gRPC开发出众多扩展,形成了庞大的生态。本节我们将简单介绍验证器和REST接口扩展。 验证器 到目前为止,我们接触的全部是第三版的Protobuf语法。第二版的Protobuf有个默认值特性,可以为字符串或数值类型的成员定义默认 阅读全文
posted @ 2020-06-07 22:18 Binb 阅读(741) 评论(0) 推荐(0) 编辑
摘要:gRPC入门 gRPC是Google公司基于Protobuf开发的跨语言的开源RPC框架。gRPC基于HTTP/2协议设计,可以基于一个HTTP/2链接提供多个服务,对于移动设备更加友好。本节将讲述gRPC的简单用法。 gRPC技术栈 最底层为TCP或Unix Socket协议,在此之上是HTTP/ 阅读全文
posted @ 2020-06-07 13:28 Binb 阅读(595) 评论(0) 推荐(0) 编辑
摘要:玩转RPC 在不同的场景中RPC有着不同的需求,因此开源的社区就诞生了各种RPC框架。本节我们将尝试Go内置RPC框架在一些比较特殊场景的用法。 客户端RPC的实现原理 Go语言的RPC库最简单的使用方式是通过Client.Call方法进行同步阻塞调用,该方法的实现如下: func (client 阅读全文
posted @ 2020-06-06 14:37 Binb 阅读(350) 评论(0) 推荐(0) 编辑
摘要:Protobuf Protobuf是Protocol Buffers的简称,它是Google公司开发的一种数据描述语言,并于2008年对外开源。Protobuf刚开源时的定位类似于XML、JSON等数据描述语言,通过附带工具生成代码并实现将结构化数据序列化的功能。但是我们更关注的是Protobuf作 阅读全文
posted @ 2020-06-06 13:17 Binb 阅读(583) 评论(1) 推荐(1) 编辑
摘要:RPC RPC入门 RPC是远程过程调用的简称,是分布式系统中不同节点间流行的通信方式。在互联网时代,RPC已经和IPC一样成为一个不可或缺的基础构件。因此Go语言的标准库也提供了一个简单的RPC实现,我们将以此为入口学习RPC的各种用法。 RPC版"Hello, World" Go语言的RPC包的 阅读全文
posted @ 2020-06-06 10:27 Binb 阅读(362) 评论(0) 推荐(0) 编辑
摘要:share/share.go /****** ** @创建时间 : 2020/5/25 20:26 ** @作者 : SongZhiBin ******/ package share import ( "fmt" "net/http" "net/http/httputil" "net/url" "o 阅读全文
posted @ 2020-05-26 13:58 Binb 阅读(521) 评论(0) 推荐(0) 编辑
摘要:中间件是一种计算机软件,可为操作系统提供的软件应用程序提供服务,以便于各个软件之间的沟通,特别是系统软件和应用软件。广泛用于web应用和面向服务的体系结构等。 纵观GO语言,中间件应用比较普遍,主要应用: 记录对服务器发送的请求(request) 处理服务器响应(response ) 请求和处理之间 阅读全文
posted @ 2020-05-16 23:12 Binb 阅读(485) 评论(0) 推荐(0) 编辑
摘要:runtime.SetFinalizer func SetFinalizer(obj interface{}, finalizer interface{}) SetFinalizer sets the finalizer associated with obj to the provided fin 阅读全文
posted @ 2020-05-16 17:29 Binb 阅读(3323) 评论(0) 推荐(0) 编辑
摘要:大家都知道slice是一个引用类型,废话不多说,上代码 func test(res [][]int) { res[0] = []int{2,2,2,2} res[1][0] = 3 } func main() { res := [][]int{[]int{1,1,1,1},[]int{2,2,2,2 阅读全文
posted @ 2020-05-10 10:51 Binb 阅读(346) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示