go
文章平均质量分 58
lsjweiyi
足够折腾
展开
-
sitemap.xml生成(go语言版)
遍历一个文件夹及其子目录下的html文件,生成sitemap.xml。原创 2024-06-25 17:15:19 · 490 阅读 · 0 评论 -
github.com/gin-contrib/timeout应前置使用
首先,gin的中间件是有执行顺序的,就是按照添加的顺序进行的。这里也就意味着,加入你原来已经在body和header中写入了一些内容,在后续的代码中你就无法获取到原来的内容改了,获取到的是新的header 和body。所以他这里所做的就是把原始的writer下层一级,然后new了新的body和headers,也就是进行一层封装。就是旧header,用一个for循环新header中的值合并到旧header中,也就是原始的。,那么旧的key就会被覆盖掉。这里他就没考虑到这个问题,所以,就是新header,原创 2024-05-04 15:30:42 · 519 阅读 · 0 评论 -
go http框架下的静态资源代理实现(压缩,缓存验证自定义)
之前在说了我的第一版静态资源代理,后面我又完善了一下:照着以上思路,可以在其他语言其他框架中实现,因为对框架没有依赖,都是使用的一些基本功能。原创 2024-05-02 15:16:21 · 616 阅读 · 1 评论 -
nuxt3使用记录五:启动压缩构建并自定义静态资源代理(不仅限于nuxt3)
nuxt3也同样自带压缩功能,默认支持两种格式gzip,br对比可以发现,压缩后大小减少很多,其中br格式压缩率最高nuxt3通过SSG构建完静态资源,它会提醒你直接执行命令即可代理运行,并且会根据请求头判断客户端是否支持压缩格式,支持的话优先返回压缩后的文件。不得不说nuxt3在细节方面还是做得不错的。原创 2024-04-19 19:55:56 · 1017 阅读 · 0 评论 -
使用gin 代理 web网页
业界常用的方案是nginx做代理,这个是网上最多资料的。因为我需要定制化入口,做自己的流量转发,如果再加个nginx来做第一层方向代理和网页的静态资源代理的话,那么就多了一层,哪怕都在一台服务器里,那也是多了一层性能损耗,所以我就在想,golang没有自己的网页代理方案吗?不应该呀,非要依赖nginx?网上的资料模模糊糊,提到gin框架有静态资源代理的方法。但是有写得不是很具体。我实测,是可以做到的。原创 2023-11-22 21:24:00 · 743 阅读 · 0 评论 -
go语言实现高性能自定义ip管理模块(ip黑名单)
对于IPV4而言,理论上有256^4个,也就是约42亿个。我想了好久,也查了挺多资料,但是,确实没有通用现成的解决方案。原创 2023-11-21 21:08:07 · 836 阅读 · 0 评论 -
gin 解析 formData带文件和json字符串的一起的方式
gin解析文件和json字符串多个参数一起的,需求是前端使用的形式上传文件以及需要的参数。后端使用golang 的gin 框架解析这两种参数。原创 2023-07-17 23:04:41 · 1348 阅读 · 0 评论 -
gocv Windows10下编译和安装(opencv4.8)
opencv 在Windows 上编译golang版。原创 2023-06-19 20:28:11 · 1995 阅读 · 2 评论 -
golang使用mongo-driver操作——改(进阶)
改的基础知识在前面几篇都涉及了的,很容易举一反三,这篇是为了记录一些还没涉及的知识。将字段设置为当前时间,可以在需要记录字段更新时间时使用该方法(如果字段不存在,则会创建字段),他有两种形式,一种是我们常见的时间格式,另一种是时间戳。默认使用常见时间格式,结果如下:当然也可以指定时间,直接使用golang的时间去赋值就好了,但是,存到mongo中都是固定的时间格式,并不会按照我们指定的时间格式去存储。也可以以指定时间戳的形式更新,时间戳是以秒为单位的,第二个参数就是表示同一秒内操作次数区别,可选,当原创 2022-07-07 19:28:14 · 927 阅读 · 0 评论 -
golang使用mongo-driver操作——查(进阶)
更复杂的查询一时也想不到什么场合用得着,所以以后有了再慢慢补充。and 和or组合:我认为复杂的查询往往是组合各种关键字进行查询,所以,下面将一些还未实践过的关键字给列出来,方便以后查询。...原创 2022-06-26 19:44:34 · 646 阅读 · 1 评论 -
golang使用mongo-driver操作——查(数组相关)
数组的查稍微有点不同,篇幅原因,分开来写。需要完全一样才能匹配到,包括元素的顺序。且演示输出时转化成字符串形式:用all关键字实现:查询数组中包含以下元素,且与顺序无关的查询。遍历结果时可以转化成只包含值而不包含key的数组:数组类型的字段后面对应一个值,表明是查询数组中是否包含该元素。遍历结果时转化成键值对的数组形式:多个条件的查询和我们正常的理解不太一样,结果还可以按数组下标去取:下面这种多条件查询才和我们正常的理解差不多。结果还可以用key去取值:按照数组长度查询,结果还可以用Lookup取原创 2022-06-26 12:09:09 · 1265 阅读 · 0 评论 -
golang使用mongo-driver操作——查(基础)
不管任何数据库,查都是最复杂的操作。基本查询,并且解析成结构体:匹配多个值,且解析成结构体数组:大于和等于的匹配查询,并遍历结果:通常我们查询条件都是隐式and关系,可以使用or关键字表示多个条件只需满足其一:嵌套字段的查询匹配:之前的查询我们都是返回所有字段,还可以选择查询指定字段:与上面相反,可以指定一个字段不要,查询剩余字段:对于嵌套的文档也同样受用,且用LookupErr遍历时,仅获取想要的key值:...原创 2022-06-26 11:58:39 · 2014 阅读 · 0 评论 -
golang使用mongo-driver操作——增(进阶)
mongo db for golang curd 操作,新增操作进阶版原创 2022-06-25 14:27:11 · 800 阅读 · 0 评论 -
golang使用mongo-driver操作——增(基础)
golang中使用mango的增删改查原创 2022-06-20 21:55:22 · 1129 阅读 · 1 评论 -
golang gin http请求中断后停止后端的任务运行
一个常见的场景:有一个接口请求需要较长的时间(如5秒),那么,用户很可能等不及,直接就放弃了请求。而这个接口的任务,如果在用户放弃请求后依然继续执行,那么就是浪费服务器的资源了。所以,我们需要在得知请求中断后,主动结束耗时的任务。这里面其实都是用到go 提供的一个上下文库context。然而这个问题的核心是如何得知http的请求是否中断。这个问题在网上居然没什么资料。。。示例演示首先,我模拟了两个任务:任务taskFunc1需要执行1秒,任务taskFunc2需要执行5秒:// 该方法模拟进行原创 2022-05-23 21:13:42 · 3285 阅读 · 5 评论 -
go-admin框架分析—(终)
go-admin框架还没分析完,我决定提前放弃了。。。导火线是写上一篇“go-admin框架分析(4)—jwt”后,我想搞明白在文件“common/middlerware/init.go”中的sdk.Runtime.SetMiddleware(JwtTokenCheck, (*jwt.GinJWTMiddleware).MiddlewareFunc)一句话到底有什么作用。因为我文章中不需要这句话也能实现功能。百度查资料,去github仓库翻issue,甚至想加QQ群(加群居然还要我点星星,点了星星也没通原创 2022-02-28 21:40:36 · 1957 阅读 · 2 评论 -
基于go实现简单的计算自资源监控
局域网内的计算机资源监控,包括CPU,内存和磁盘。项目共包括四个部分:前端负责展示监控的结果客户端负责收集本机的资源数据,并上报数据库数据库存储各客户端发来的数据服务端负责整个数据库的数据,对接前端的请求。以及定时清理数据库的数客户端地址,服务端地址,webUI地址此外呢,数据库还有一些要求:目前配置的数据库名叫“monitor”其中必须要包含一个表“template”,就是一个模板,使用以下语句创建即可CREATE TABLE `template` ( `id` int NOT原创 2022-03-14 16:52:47 · 1488 阅读 · 0 评论 -
go 实现aes加密的自定义token
在web项目中,无状态的token较为通用的是jwt。对他了解了一番之后,发现在普通的web应用中,似乎 也不是那么的好:jwt token 非常的长性能一般个人认为除了无状态的优势以外,选择它的理由就是它业界通用,对于目前各种授权登录的方式有好处。想了一圈,还是决定放弃他,自己实现一个自己的token。我设计的token包含三部分内容:token创建的时间,放在最开头,以时间戳的形式,并装为byte数组形式,固定占8个byte中间放用户的信息,这个可以自定义内容。转为字符串即可最后一原创 2022-03-13 17:47:58 · 1427 阅读 · 0 评论 -
cannot use column (type Column) as type gorm.ColumnType in append
golang 运行时报错:# gorm.io/driver/postgresC:\Users\Administrator\go\pkg\mod\gorm.io\driver\postgres@v1.2.2\migrator.go:337:24: cannot use column (type Column) as type gorm.ColumnType in append: Column does not implement gorm.ColumnType (missing AutoI原创 2022-03-06 10:43:09 · 3144 阅读 · 5 评论 -
go-admin框架分析(4)—jwt
jwt go已经封装得其实已经得很好了,然后go-admin又对它进行了封装。go-admin对他封装的时候将它和casbin耦合得很深,确实一个完整的鉴权系统通常是由这两部分组成,但是讲其耦合到一起也不是很喜欢。为了便于理解,我还是先将角色控制的内容先去除。使用它的步骤大概是:实现它必须的几个回调函数:PayloadFunc,IdentityHandler,Authenticator,Authorizator,Unauthorized在路由中初始化它在需要鉴权的路由上以中间件的形式添加它那原创 2022-02-28 15:06:15 · 613 阅读 · 0 评论 -
go-admin框架分析(3—2)—日志系统使用正确方式
前面一篇已经把日志系统给讲明白了,我之前直接调用logger.Info(name)去记录日志,这样看确实也能记录到日志,但是存在两个问题:同一次请求的x-request-id会不相同,因为使用的是不同的日志对象程序启动后的首次请求会可能记录的日志不全。那么正确的日志记录方式是:log, ok:=c.Get(pkg.LoggerKey).(*logger.Helper)然后用这个log记录或者使用官方的方法:type SysApi struct { api.Api}func (e原创 2022-02-27 18:12:13 · 350 阅读 · 0 评论 -
go-admin框架分析(3—1)—日志系统遗留问题分析
此前分析日志系统时,有两个中间件没搞明白它的作用,后面再看了下,大概理解了。这里再记录下。 // 添加 requestID r.Use(RequestId(pkg.TrafficKey)) // 添加 go-admin-logger-request r.Use(api.SetRequestLogger)这两个中间件,加了和没加,记录的日志是一样的。当时没搞明白,再看了一下框架的源码,大概理解了:X-Request-Id首先呢,RequestId(pkg.TrafficKey)的目的是检测请求原创 2022-02-26 15:47:22 · 542 阅读 · 0 评论 -
go 计算两个时间的时间差
计算与当前时间的时间差:time1 := time.Now() // 假设是我们的某个时间点time.Since(time1)).Seconds() // 返回time1与当前时间的秒级差值计算两个时间之间的差值:time1=time.Now() // 假设是我们的某个时间点time2=time.Now() // 假设是我们的某个时间点time2.Since(time1)).Seconds()...原创 2022-02-24 17:39:15 · 6082 阅读 · 2 评论 -
go-admin框架分析(4—1)访问数据库查询
代码还是在db分支,相关业务代码全部在app/other目录下上一篇分析完了数据库的连接。这篇就是实现代码来印证一下。首先呢,这里的数据来源是go-admin官方提供的初始化导入的。我的数据库取名叫做“go_admin”。说实话,我看看它自带的那些业务代码,一个简简单单的get查询,都实现得很复杂似的。其中好几个方法,都是知道到底在干吗,查资料后,我删掉了大部分代码。留下一些好理解的。我取其中的一个接口 “getPage”做实践。首先看page的接口层:它首先是为了提供对外的接口,然后再做一些基本原创 2022-02-23 15:42:40 · 673 阅读 · 0 评论 -
go-admin框架分析(4)基于gorm的数据库模块
代码地址,db分支:https://gitee.com/lsjWeiYi/go-admin/tree/db/web系统到现在还不能连接数据库。作为核心部件,该实现了。其实网上使用gorm实现db挺容易的,但是go-admin封装得很复杂,特别是查询的时候,它不用常见的查询方式,使用的那种方式,多少有点难理解。代码实现过程修改配置文件添加以下内容: database: # 数据库类型 mysql,sqlite3, postgres driver: mysql # 数据库连原创 2022-02-23 11:59:13 · 931 阅读 · 0 评论 -
go-admin框架分析(3)—日志系统
代码地址:https://gitee.com/lsjWeiYi/go-admin/tree/logger/ logger分支go-admin的日志系统看起来很详细,真的是整个流程的每个过程都有记录,而且他贯穿了整个框架,它封装了非常多的模块。里面都和日志系统强耦合。优点:丰富的日志,对复杂系统的运维非常有帮助。开发人员无需关注http请求和数据库操作的日志记录,只需要关注业务对于分布式系统,能够做到同一请求的日志唯一ID追踪。缺点:耦合在整个框架中,无法单独剥离下来也许会占用系统的原创 2022-02-23 10:44:38 · 1270 阅读 · 0 评论 -
go-admin框架分析(2—1)—多版本路由
代码地址:basic-2分支:https://gitee.com/lsjWeiYi/go-admin/tree/basic-2/这是在basic分支的基础上,添加了少量代码,为了说明基于gin的post请求以及多版本路由管理,代码不多,也很好理解,直接看代码即可。...原创 2022-02-21 20:17:00 · 430 阅读 · 0 评论 -
gin 结构体json解析的坑
当我们使用:gin.Context.JSON(200,struct)去返回数据的时候,一定会遇到首字母大写转小写的问题。首先,结构体字段的首字母如果小写,是无法解析的。然后,我们就要使用json tag去标记字段:type User struct { Username string `json:"username"` Password string `json: "password"`}这样能解析了。重点是这里的坑:json: 和 "username"之间,不能有空格。仔细看上面的例原创 2022-02-20 22:58:50 · 2565 阅读 · 0 评论 -
go-admin框架分析(2)—简化到最简单的框架
代码:https://gitee.com/lsjWeiYi/go-admin/tree/basic/在go-admin的源码上,删除了几乎全部能删的,保留了最基本的web功能和go-admin的结构。目的是让框架变得好理解,否则一个刚接触框架的人上来,真的很难理解框架各个部分都在干什么。用着很蒙蔽,后期一旦想改,无从下手。PS:再怎么样,也需要对go有基本的了解,才好交流该框架剩下的功能有:http监听,这是web框架的基础,肯定得有go-admin的日志系统,写的很死,不知道怎么关掉。sw原创 2022-02-20 18:34:21 · 2352 阅读 · 9 评论 -
go-admin框架分析(1)—vs code下debug程序
go-admin debug启动方式原创 2022-02-20 11:42:52 · 847 阅读 · 0 评论 -
gin框架适配1.0以上的 sentinel-golang包
现在最新的go-admin web 框架发布到2.0.8版本,根据官网的指南很快就能把程序跑起来,然后我发现它使用的依赖依然没有持续更新,大部分依赖都能自己慢慢升级到最新的版本,但是唯独这个sentinel-golang,从0.6.2升级到最新的1.0.4之后,原来的引用就报错了。在文件:“common\middleware\sentinel.go”文件中,对sentinel-golang的引用是:sentinelPlugin "github.com/alibaba/sentinel-golang/ad原创 2022-02-11 16:40:29 · 1028 阅读 · 0 评论