12 2021 档案

摘要:grpc无缝接入的数据序列化反序列化协议就是protobuf,所以先讲解一下protobuf protobuf(protocol buffer)的优点和缺点 python下体验protobuf 安装 python -m pip install grpcio # 安装grpc python -m pi 阅读全文
posted @ 2021-12-26 16:00 专职 阅读(153) 评论(0) 推荐(0) 编辑
摘要:## grpc简介 * gRPC由google开发,是一款语言中立、平台中立、开源的远程过程调用系统 * gRPC客户端和服务端可以在多种环境中运行和交互,例如用java写一个服务端,可以用go语言写客户端调用 ## grpc和protobuf介绍 * 微服务架构中,由于每个服务对应的代码库是独立运 阅读全文
posted @ 2021-12-22 17:47 专职 阅读(759) 评论(0) 推荐(0) 编辑
摘要:RPC简介 远程过程调用(Remote Procedure Call,RPC)是一个计算机通信协议 该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程 如果涉及的软件采用面向对象编程,那么远程过程调用亦可称作远程调用或远程方法调用 golang中如何实现R 阅读全文
posted @ 2021-12-21 17:27 专职 阅读(122) 评论(0) 推荐(0) 编辑
摘要:func main() { // 字符串转bytes类型 name := "马亚南" fmt.Println(name) // 马亚南 bName := []byte(name) fmt.Println(bName) // [233 169 172 228 186 154 229 141 151] 阅读全文
posted @ 2021-12-21 11:42 专职 阅读(995) 评论(0) 推荐(0) 编辑
摘要:gin的路由算法 gin的是路由算法其实就是一个Trie树(也就是前缀树). 有关数据结构的可以自己去网上找相关资料查看. 注册路由预处理 我们在使用gin时通过下面的代码注册路由 普通注册 router.GET("/ping", func(context *gin.Context) { conte 阅读全文
posted @ 2021-12-20 16:59 专职 阅读(185) 评论(0) 推荐(0) 编辑
摘要:Gin封装的最好的地方就是context和对response的处理. github的README的介绍,基本就是对这两个东西的解释. 本篇文章主要解释context的使用方法, 以及其设计原理 为什么要将Request的处理封装到Context中 在阅读gin的源码时, 请求的处理是使用type H 阅读全文
posted @ 2021-12-20 16:10 专职 阅读(459) 评论(0) 推荐(0) 编辑
摘要:数据如何在gin中流转 func main() { gin.SetMode(gin.DebugMode) // 设置为开发模式 router := gin.Default() _ = router.SetTrustedProxies([]string{"172.19.10.13"}) // 设置信任 阅读全文
posted @ 2021-12-20 15:09 专职 阅读(410) 评论(0) 推荐(1) 编辑
摘要:gin框架预览 router.Run()的源码: func (engine *Engine) Run(addr ...string) (err error) { defer func() { debugPrintError(err) }() if engine.isUnsafeTrustedProx 阅读全文
posted @ 2021-12-20 14:20 专职 阅读(275) 评论(0) 推荐(0) 编辑
摘要:golang中实现RPC非常简单,官方提供了封装好的库,还有一些第三方的库 golang官方的net/rpc库使用encoding/gob进行编解码,支持tcp和http数据传输方式,由于其他语言不支持gob编解码方式,所以golang的RPC只支持golang开发的服务器与客户端之间的交互 官方还 阅读全文
posted @ 2021-12-19 19:09 专职 阅读(226) 评论(0) 推荐(0) 编辑
摘要:package main import ( "fmt" "strconv" ) func f2i(f float64) int { i, _ := strconv.Atoi(fmt.Sprintf("%1.0f", f)) return i } func main() { var floats = 阅读全文
posted @ 2021-12-19 12:01 专职 阅读(6497) 评论(0) 推荐(0) 编辑
摘要:基于xml的rpc调用 rpcserver.py from xmlrpc.server import SimpleXMLRPCServer # python中类的命名方式遵循驼峰命名法 # 1. 没有出现url的映射 # 2. 没有出现编码和解码 # 3. 序列化和反序列化协议是:xml class 阅读全文
posted @ 2021-12-18 20:41 专职 阅读(870) 评论(0) 推荐(0) 编辑
摘要:什么是RPC 本地过程调用 远程过程调用带来的3个问题 RPC的调用过程 RPC的具体过程如下 总结 RPC、HTTP、Restful之间的区别 通过httpserver实现rpc 首先一点需要明确:一定会发起一个网络请求,一定会有一个网络连接(tcp/udp), a把远程的函数变成一个Http请求 阅读全文
posted @ 2021-12-18 14:16 专职 阅读(178) 评论(0) 推荐(0) 编辑
摘要:package main import ( "fmt" "github.com/gin-gonic/gin" ) func main() { gin.SetMode("release") // 设置为生产模式 r := gin.Default() r.SetTrustedProxies([]stri 阅读全文
posted @ 2021-12-17 17:39 专职 阅读(4412) 评论(1) 推荐(0) 编辑
摘要:概念 权限管理几乎是每个系统或者服务都会直接或者间接涉及的部分. 权限管理保障了资源(大部分时候就是数据)的安全, 权限管理一般都是和业务强关联, 每当有新的业务或者业务变化时, 不能将精力完全放在业务实现上, 权限的调整往往耗费大量的精力. 其实, 权限的本质没有那么复杂, 只是对访问的控制而已, 阅读全文
posted @ 2021-12-16 18:05 专职 阅读(1206) 评论(0) 推荐(0) 编辑
摘要:生成解析token 如今有很多将身份验证内置到API中的方法 -JSON Web令牌只是其中之一。JSON Web令牌(JWT)作为令牌系统而不是在每次请求时都发送用户名和密码,因此比其他方法(如基本身份验证)具有固有的优势。要了解更多信息,请直接进入jwt.io上的介绍,然后再直接学习。 以下是J 阅读全文
posted @ 2021-12-14 16:02 专职 阅读(637) 评论(0) 推荐(0) 编辑
摘要:Air实时加载 本章我们要介绍一个神器——Air能够实时监听项目的代码文件,在代码发生变更之后自动重新编译并执行,大大提高gin框架项目的开发效率。 1.1.1. 为什么需要实时加载? 之前使用Python编写Web项目的时候,常见的Flask或Django框架都是支持实时加载的,你修改了项目代码之 阅读全文
posted @ 2021-12-14 11:12 专职 阅读(265) 评论(0) 推荐(0) 编辑
摘要:结构体验证 用gin框架的数据验证,可以不用解析数据,减少if else,会简洁许多。 处理请求方法 func structValidator(context *gin.Context) { var person Person if err := context.ShouldBind(&person 阅读全文
posted @ 2021-12-13 16:45 专职 阅读(1152) 评论(0) 推荐(0) 编辑
摘要:go 的time.Time,在json序列化是默认 2006-01-02T15:04:05Z07:00 的格式,十分不便, encoding/json包在序列化和反序列化的时候分别调用encode.go 下的Marshaler接口的MarshalJSON方法和decode.go下的Unmarshal 阅读全文
posted @ 2021-12-13 14:09 专职 阅读(1404) 评论(0) 推荐(0) 编辑
摘要:package tool import ( "crypto/md5" "crypto/sha256" "encoding/base64" "encoding/hex" "fmt" "io" ) func EncoderSha256(data string) string { h := sha256. 阅读全文
posted @ 2021-12-12 16:21 专职 阅读(815) 评论(0) 推荐(0) 编辑
摘要:功能和验证码使用原理 本案例中没有使用redis作为缓存,而是使用的内存存储方法 github链接地址 下载命令 go get github.com/mojocn/base64Captcha 请求处理函数 // 生成图片验证码 func (m *MemberController) captcha(c 阅读全文
posted @ 2021-12-11 21:18 专职 阅读(1503) 评论(0) 推荐(0) 编辑
摘要:浏览器发送options预检请求的前提: 在非简单请求且跨域的情况下,浏览器会发起options预检请求 简单请求 需要满足以下两个条件 1. 请求方法 get head post 2. http的头信息不超过以下几种字段 Accept Accept-Language Content-Languag 阅读全文
posted @ 2021-12-11 12:25 专职 阅读(769) 评论(0) 推荐(0) 编辑
摘要:Cookie介绍 Http协议是无状态的,服务器不能记录浏览器的访问状态,也就是说服务器不能判断请求的客户端是否已经登录 Cookie就是解决http协议无状态的方案之一 Cookie实际上就是服务器保存在浏览器上的一小段文本信息,浏览器有了Cookie之后,每次向服务器发送请求时都会同时将该信息发 阅读全文
posted @ 2021-12-10 15:48 专职 阅读(168) 评论(0) 推荐(0) 编辑
摘要:全局中间件 所有请求都经过此中间件 中间件中设置值 func MiddleWare() gin.HandlerFunc { return func(context *gin.Context) { t := time.Now() fmt.Println("中间件开始执行了") // 设置变量到Cont 阅读全文
posted @ 2021-12-10 11:20 专职 阅读(206) 评论(0) 推荐(0) 编辑
摘要:goroutine机制可以方便地实现异步处理 另外,在启动新的goroutine时,不应该使用原始上下文,必须使用它的只读副本 // 异步 func longAsync(context *gin.Context) { copyContext := context.Copy() go func() { 阅读全文
posted @ 2021-12-09 17:02 专职 阅读(333) 评论(0) 推荐(0) 编辑
摘要:重定向redirect func someRedirect(context *gin.Context) { context.Redirect(http.StatusMovedPermanently, "https://www.mayanan.cn") } 阅读全文
posted @ 2021-12-09 16:41 专职 阅读(96) 评论(0) 推荐(0) 编辑
摘要:各种数据格式的响应 json、结构体、XML、YAML类似于java的properties、ProtoBuf 点击查看代码 // json响应 func someJson(context *gin.Context) { context.JSON(http.StatusOK, gin.H{"statu 阅读全文
posted @ 2021-12-09 16:24 专职 阅读(89) 评论(0) 推荐(0) 编辑
摘要:Json数据解析与绑定 客户端传参,后端接收并解析到结构体 func Login(context *gin.Context) { // 声明接收的变量 var login LoginJson // 将request的body中的数据,自动按照json格式解析到结构体 // 等价于:context.S 阅读全文
posted @ 2021-12-09 14:46 专职 阅读(209) 评论(0) 推荐(0) 编辑
摘要:基本的路由注册 下面最基础的gin路由注册方式,适用于路由条目比较少的简单项目或者项目demo。 package main import ( "net/http" "github.com/gin-gonic/gin" ) func helloHandler(c *gin.Context) { c.J 阅读全文
posted @ 2021-12-07 18:07 专职 阅读(272) 评论(0) 推荐(0) 编辑
摘要:基本路由 gin框架中采用的路由库是基于httrouter做的 地址为:https://github.com/julienschmidt/httprouter httprouter路由库 点击查看代码 package main import ( "fmt" "github.com/juliensch 阅读全文
posted @ 2021-12-07 16:30 专职 阅读(312) 评论(0) 推荐(0) 编辑
摘要:介绍 Gin是一个golang的微框架,封装比较优雅,API友好,源码注释比较明确,具有快速灵活,容错方便等特点 对于golang而言,web框架的依赖要远比Python,Java之类的要小。自身的net/http足够简单,性能也非常不错 借助框架开发,不仅可以省去很多常用的封装带来的时间,也有助于 阅读全文
posted @ 2021-12-07 11:11 专职 阅读(860) 评论(0) 推荐(0) 编辑
摘要:反射 反射是指程序在运行期对程序本身访问和修改的能力 变量的内在机制 变量包含类型信息和值信息 var arr [10]int arr[0] = 10 类型信息:是静态的元信息,是预先定义好的 值信息:是程序运行过程中动态改变的 反射的使用 reflect包封装了反射相关的方法 获取类型信息:ref 阅读全文
posted @ 2021-12-06 18:07 专职 阅读(39) 评论(0) 推荐(0) 编辑
摘要:数据格式介绍 是系统中数据交互不可缺少的内容 这里主要介绍JSON、XML、MSGPack JSON json是完全独立于语言的文本格式,是k-v的形式 name:zs 应用场景:前后端交互,系统间数据交互 json使用go语言内置的encoding/json 标准库 编码json使用json.Ma 阅读全文
posted @ 2021-12-03 15:08 专职 阅读(103) 评论(0) 推荐(0) 编辑
摘要:简介 golang 中的创建一个新的 goroutine , 并不会返回像c语言类似的pid,所有我们不能从外部杀死某个goroutine,所有我就得让它自己结束,之前我们用 channel + select 的方式,来解决这个问题,但是有些场景实现起来比较麻烦,例如由一个请求衍生出的各个 goro 阅读全文
posted @ 2021-12-03 11:05 专职 阅读(179) 评论(0) 推荐(0) 编辑
摘要:在 Go http包的Server中,每一个请求在都有一个对应的 goroutine 去处理。请求处理函数通常会启动额外的 goroutine 用来访问后端服务,比如数据库和RPC服务。用来处理一个请求的 goroutine 通常需要访问一些与请求特定的数据,比如终端用户的身份认证信息、验证相关的t 阅读全文
posted @ 2021-12-02 18:04 专职 阅读(92) 评论(0) 推荐(0) 编辑
摘要:Go语言内置的net/http包十分的优秀,提供了HTTP客户端和服务端的实现。 http客户端 基本的HTTP/HTTPS请求 Get、Head、Post和PostForm函数发出HTTP/HTTPS请求。 resp, err := http.Get("http://5lmh.com/") ... 阅读全文
posted @ 2021-12-01 18:23 专职 阅读(299) 评论(0) 推荐(0) 编辑
摘要:html/template包实现了数据驱动的模板,用于生成可对抗代码注入的安全HTML输出。它提供了和text/template包相同的接口,Go语言中输出HTML的场景都应使用text/template包。 模板 在基于MVC的Web架构中,我们通常需要在后端渲染一些数据到HTML文件中,从而实现 阅读全文
posted @ 2021-12-01 15:31 专职 阅读(429) 评论(0) 推荐(0) 编辑

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