- 博客(272)
- 资源 (34)
- 收藏
- 关注
原创 golang RSA 解密前端jsencrypt发送的数据时异常 crypto/rsa: decryption error 解决方法
golang中 RSA解密前端(jsencrypt)发来的密文后出现 "crypto/rsa: decryption error" , 这个问题首先需要确认你的私匙和公匙是否匹配, 如果匹配 那检查入参数据类型, 前端发送来的rsa加密后的数据一般都是经过base64编码后的, 在后端进行RSA解码时需要对前端发送的数据进行base64解码!
2024-08-24 17:56:20 160
原创 vue element-plus el-drawer 自定义抽屉标题 template slot动态标题定义方法
如果我们需要动态标题,定义一个data变量 title 然后将数据绑定到这个变量上即可。默认抽屉定义, 这里的title就是标题的定义。如果我们需要自定义这个标题,就需要使用slot。
2024-08-19 16:53:32 224
原创 golang reflect反射方式修改对象的值 reflect.Value对象中的SetX类型(xxx) 和 Set(x reflect.Value) 方法的区别和使用总结
了解下面的这些函数, 对象和方法的定义对应我们学习golang的放射至关重要!!func Copy(dst, src Value) int // 数据拷贝函数func DeepEqual(x, y any) bool // 深度相等比较函数func Swapper(slice any) func(i, j int) // 交换函数type Kind // 反射类别type MapIter // map类型数据迭代对象定义。
2024-08-18 19:08:43 829
原创 golang 如何利用defer+recover()函数 将指定类型的panic异常转换为函数返回 error返回 使用方法示例
在golang开发的时候,对于业务逻辑中的某些panic异常,我们希望将某些不可控的panic异常转换为普通的 error并作为函数返回值返回, 如io 或者os中的某些操作就会导致panic异常,对于这个过程中的某些不可控的panic异常我们希望将某些类型的异常转换为 普通的error变量在函数里面返回。
2024-08-18 11:17:09 246
原创 zap日志库 自定义CallerEncoder 方法, 同时适用于其他几个Encoder如 LevelEncoder,TimeEncoder,NameEncoder,DurationEncoder等
从上面的配置中我们可以得知, 这个EncodeCaller他实际上是一个函数定义 type CallerEncoder func(EntryCaller, PrimitiveArrayEncoder) 如下图所示:我们要自定义这个EncodeCaller实际上就是定义这样一个函数即可。定义方式如下:即在我们初始化配置对象的时候对这个EncodeCaller定义一个函数即可,这样每次在zap执行的时候就会调用我们定义的这个函数。即,如下示例。
2024-08-17 15:07:54 409
原创 golang 字符串strings Title, Upper, Lower, Fold的代替处理库golang.org/x/text/cases使用方法总结, Caser对象使用
golang官方提供的这个扩展包text/cases 主要通过 Caser这个对象来处理字符串的大小写,他的定义如下:typeCasertypeOption可见这个结构体的属性t 是一个接口SpanningTransformer, 而这个接口又继承了Transformer接口Reset()
2024-08-17 12:29:41 835
原创 golang字符串首字母大写转换函数strings.Title已弃用解决方法 strings.Title is deprecated, golang.org/x/text/cases 代替用法示例
golang 中在使用strings.Title将首字母转为大写时会提示这个函数已经弃用,原因是这个函数无法正确处理Unicode字符,如中文。建议我们使用 golang.org/x/text/cases 来代替,
2024-08-17 11:40:48 144
原创 golang zap日志库 打印日志时显示的源文件始终是同一个问题解决方法 zap.Option函数可选项 zap.AddCallerSkip(1) 使用示例
golang 获取调用函数的源文件路径和所在行号, 获取异常发生的源文件路径和行号方法 -- runtime.Caller, Callers, CallersFrames获取调用堆栈函数使用与总结-CSDN博客。
2024-08-17 00:16:42 239
原创 viper配置文件读取管理库 一个支持12种文件类型,5种远程协议的配置文件管理和加载工具库 使用方法示例
viper是一个不错的配置文件管理库, 他支持12种文件类型,5种远程协议的配置文件管理和加载工具库 使用方法示例
2024-08-16 23:35:32 461
原创 zap logger 日志记录库 options接口类型 可选参数(函数)使用 总结
zap是go语言中的一个不错的日志记录库, 在我们创建zap.Logger对象的时候,第一个参数就是一个Core, 这个即是这个zap框架的内核,第二个参数options是一个可选参数,他的类型是一个名为Option的接口定义, 这个接口里面就一个方法 apply(*Logger) 参数就是我们要创建的这个Logger指针对象。 如下所示:从上面可见,我们在创建Logger对象的时候对于这个Logger对象,我们只提供了4个属性, 而实际上这个Logger对象里面的属性可不止4个, 那如果我们要对这些属性进
2024-08-15 13:38:16 441
原创 golang 获取调用函数的源文件路径和所在行号, 获取异常发生的源文件路径和行号方法 -- runtime.Caller, Callers, CallersFrames获取调用堆栈函数使用与总结
在golang中,我们可以通过go官方提供的runtime包中的 Caller函数获取是那个文件在哪一行调用了当前函数, 使用Callers, CallersFrames函数,我们可以获取完整的函数调用堆栈信息, 包括 调用函数所在的源码文件, 行号, 函数等信息。 这些信息在我们排查异常和解决异常信息时非常有用,有了这个信息,我们就可以快速定位问题发生的源文件和行号。 Caller函数定义 func runtime.Caller(skip int) (pc uintptr, file string, l
2024-08-15 12:10:18 983
原创 golang gin框架中创建自定义中间件的2种方式总结 - func(*gin.Context)方式和闭包函数方式定义gin中间件
gin框架自定义中间件常用的方式,1.定义一个参数为*gin.Context的函数或者方法。定义的方法就是创建一个 参数类型为 gin.HandlerFunc 【 他的原型定义为 type HandlerFunc func(*Context) 】的中间件,如: func XxxFoo(c *gin.Context) {}注意: 虽然这种方式定义的中间件和入参和路由处理函数的定义是一样的, 但是他们的用途和业务处理方式是有区别的, 在中间件中我们可以通过 c.Next() 方法继续后面的请求, 2....
2024-08-14 11:25:49 1029 1
原创 gin框架中的中断请求c.Abort()方法的作用和使用细节说明
在gin框架中,请求处理链即 handlers HandlersChain 他是一个类型定义为: type HandlerFunc类型的切片, 即 type HandlersChain []HandlerFunc。我们在路由中注册的路由地址和HandlerFunc 都被加入到了handlers中,Abort()方法的调用就会中断当前挂起的HandlerFunc。中断请求Abort()方法定义参考这里将gin上下文中的索引index设置为abortIndex 他的值为63。
2024-08-13 14:52:42 586
原创 vue axios http网络请求头包含非 CORS 白名单的请求标头 也被称作“简单标头”时, post, put,path,delete等请求CORS问题总结与解决方法
在我们从前端发送网络请求时所携带的标头非这些标头“Accept, Accept-Language, Content-Language, Content-Type, Range” 时即“非简单标头”。 当我们发送的请求头包含的请求头不是CORS 白名单的请求标头 时浏览器就会在请求发起之前自动发送一个预检请求。 只有在预检请求的结果OK后才会发起真正的请求。预检请求官方文档https://developer.mozilla.org/zh-CN/docs/Glossary/Preflight_request结果
2024-08-13 11:04:39 884
原创 macos brew 安装被禁止(disable)的Homebrew软件包的方法 - Error: xxx has been disabled because it is not supported
最近在macos上面使用 brew install mariadb@10.3 居然提示 Error: mariadb@10.3 has been disabled because it is not supported upstream!查阅后发现这个版本官方于2024年5月停止维护,所以在brew安装时就提示了不受支持的异常。
2024-08-11 11:30:24 848
原创 macos brew安装的mariadb@10.11启动异常 mysqld_safe A mysqld process already exists 解决方法
最近在macos中通过brew install mariadb@10.11 安装后, 在通过 brew services restart mariadb@10.11 重启居然报异常。注意这个异常日志在所有系统中都是一样的,他位于datadir数据库文件存放目录下 名称为 机器名.err。这个异常日志对于排查mysql/mariadb的启动异常是至关重要的, 通过查看这个日志即可获取所有的相关异常信息。如下示例通过这个xx.err 异常日志文件,我们看到了导致这个文件的根源是没有正常关闭。
2024-08-11 10:34:40 229
原创 macos重装系统 启动U盘制作方法 - createinstallmedia 命令使用方法总结
macos重装系统比windows要稍微复杂一些,不过还好,macos系统安装app这个Apple官方提供的系统软件里面默认就内置了一个可用为我们我们下载的apple安装镜像要门是 dmg/pkg/iso 的压缩档案格式的,要么是 xxx.app的安装文件,不管是那种格式,最后解压后都可以得到一个 macOS xxx.app 的安装文件, 我们需要的这个启动盘制作工具就在这个app文件里面。路径为:“Install\ macOS\.app/
2024-08-10 07:56:42 1131
原创 macos brew mariadb/mysql 自定义数据库存放路径datadir ,工作目录WorkingDirectory , .bash_profile 的配置和使用
在macos系统中,我们可以通过brew 非常方便的安装和管理mariadb/mysql数据库, 安装后数据库文件的默认存储路径即配置中的datadir 路径默认为/usr/local/var/mysql 。 默认的my.cnf配置文件路径为/usr/local/etc/my.cnf 这个文件中使用了目录包含语句!includedir /usr/local/etc/my.cnf.d , 他会将/usr/local/etc/my.cnf.d 目录中的所有配置文件加载为mysql的配置文件。
2024-08-09 22:02:10 559
原创 golang 条件语句中有多条件时多条件的执行顺序和执行效率问题总结 -- if else条件语句 多条件时执行顺序为从左到右
在golang的 条件语句中有多个执行条件时,go的执行顺序为从左到右依次执行, 如果多个条件是 && 条件与的关系,则执行条件的顺序就与程序的效率密切相关,
2024-08-09 19:58:36 299
原创 mariadb/mysql数据库升级后操作异常1728 - Cannot load from mysql.proc. The table is probably corrupted 解决方法
mariadb/mysql数据库升级后操作异常1728 - Cannot load from mysql.proc. The table is probably corrupted 解决方法
2024-08-09 17:40:52 394
原创 golang for range time.Ticker 和 time.Timer时间通道使用示例 - 每隔指定时间执行一次,执行指定时长后退出执行
golang中的 ticker和timer时间通道除了可以使用for select case语句来执行外, 还可以使用 for range语句来执行ticker或者timer时间通道。
2024-08-09 16:17:44 363
原创 golang for select { case } 语句 time.Ticker每隔指定时间间隔就执行一次;time.Timer在指定的时间之后执行一次,Ticker和Timer的区别和用法总结
golang中我们如果要创建一个每隔一段时间就执行一次的逻辑就使用 time.NewTicker 创建时间断续器, 如果我们希望在指定时间之后只执行一次就使用 time.NewTimer 创建一个定时器。 select语句的作用是在多个通道中选择一个可用的通道执行,他最少需要有2个以上的通道, 且每隔case语句后面必须跟的是io操作, 同时select语句会阻塞当前进程直到其中的一个通道可用。
2024-08-08 17:25:58 291
原创 gin框架 自定义404错误页面,自定义500等服务端异常,业务异常,根据不同异常类型显示不同的异常页面方法 整理
gin框架中的自定义异常页面实际上就是一个路由绑定和异常捕获和异常类型断言的过程,其中404异常他就是一个无路由异常,需要使用路由对象的NoRoute方法绑定对应的异常处理函数, 其他类型的异常需要使用 中间件 +defer + recover()的方式来处理不同类型的异常。 在gin 框架中还有一个NoMethod的路由异常,这个异常在Engine.HandleMethodNotAllowed = true时触发,使用方法和NoRoute一样,绑定一个HandlerFunc函数即可。
2024-08-08 07:00:00 1411
原创 gin框架路由处理方法Handle,中间件,9种请求方式(GET, POST, PUT,DELETE... CONNECT, TRACE)使用方法,gin路由接口IRoutes解析
gin框架的路由支持GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS, CONNECT, TRACE这9种请求方式, 请求方式名称必须是大写, 这9种请求方式在gin内部都是通过handle方法来处理, gin框架中的路由处理函数和中间件的定义实际上就是定义一个入参类型为*gin.Context 的函数或者方法。 gin在中间件中通过调用 gin.Context对象中的.Next()方法来继续处理后续请求,通过调用 .Abort() 方法来中断后续请求,通过使用r
2024-08-07 18:02:17 753
原创 用于gin框架的CORS中间件,解决身份凭证和通配符不能同时设置问题,可同时配置附带身份凭证的请求和*通配符,chrome插件CORS跨域请求通配符
用于gin框架的CORS中间件(当然,用在其他的框架和语言中相应的Header头设置和配置信息和应用原理都是一样的),解决Access-Control-Allow-Credentialstrue身份凭证和 Access-Control-Allow-Origin: | * 通配符不能同时设置问题,可同时配置附带身份凭证的请求和*通配符,以及在chrome插件中访问远程CORS跨域请求通配符问题等
2024-08-07 12:17:28 550
原创 golang中的星号*通配符字符串模式匹配 和问号? 通配符字符串模式匹配的2种实现方法 和相关的单元测试用例
在go语言中,我们如果需要对字符串进行星号* 或者问号? 模式匹配, 可以有2种方法实现通配符 * 问号 ? 匹配, 找出给定的输入字符串str是否与pattern字符串模式相匹配。
2024-08-07 11:44:33 903
原创 http跨域网络请求中的CORS(跨源资源共享) 那些事 -- HTTP跨域请求, chrome插件跨域请求使用详解, origin格式,origin通配符等
本文详细讲解了什么是CORS,以及如何使用CORS,包含如何在服务端相应请求中设置CORS的相关请求头,以及origin的格式,通配符,http跨域请求, chrome插件跨域请求的详细设置方法等。
2024-08-07 11:15:43 1651
原创 golang判断某个文件内容是否是二进制文件方法, LimitReader, 获取文件大小,字符串0写入后的byte数据为48, byte零值
go语言中判断某个文件是否是二进制文件的方法, 通过LimitReader读取指定大小的数据后对数据进行判断, 这里有一个很有趣的知识点就是十六进制 0x30。
2024-08-06 13:32:41 287
原创 golang下载、上传文件MD5高效计算方法,利用io.TeeReader函数特性 实时计算文件md5签名
在go语言的开发中,当我们在操作下载或者上传文件对象时, 我们可以利用golang内置的io包中的 TeeReader函数特性,高效实时计算文件的md5值。 方法如下......
2024-08-06 10:31:49 414
原创 golang命名异常 error var Xxx should have name of the form ErrFoo (ST1012) 解决方法
异常原因分析:这个提示通常发生在我们使用var 定义一个变量来接收 error异常信息时的变量名称不规范所致。其实这里的异常信息“error var Xxx should have name of the form ErrFoo (ST1012)” 这个提示里面也已经提醒了" 变量 Xxx 的名称格式应该为 ErrFoo ", 即提醒你变量Xxx的名称应该是 ErrXxx 。
2024-08-04 09:49:31 269
原创 golang转换时间对象,时间字符串,时间戳到自定的时间字符串方法, 支持时间对象、秒/毫秒时间戳,时间字符串转换为统一的时间字符串
转换时间对象,时间字符串,时间戳到自定的时间字符串方法, 支持时间对象、秒/毫秒时间戳,时间字符串转换为统一的时间字符串。
2024-08-03 21:24:43 301
原创 golang 转换时间戳到字符串函数 支持秒和毫秒时间戳 转换到自定字符串
ps: 如果希望返回的时间字符串为默认的格式 time.RFC3339 即 "2006-01-02T15:04:05Z07:00" , 则第二个参数直接传递空字符串即可,即: TsToStr(1722657237,"")使用 strutils.TsToStr(1722683285997,"") // 输出 "2024-08-03T19:08:05+08:00"
2024-08-03 20:12:27 313
原创 go pkg包名,如何在pkg.go.dev发布golang软件包, package包名, import包名, git库名, go.mod module模块名称 区别与使用总结
golang的包名在不同的地方作用不同,用途不同。 在我们通过pkg.go.dev发布自己的包的时候,了解这些包名和他们的用途就很有必要了。 下面我们以go语言中的pkg库 github.com/tekintian/strutils为例说明各种名称的区别和用途。要在pkg.go.dev发布自己的软件包,首先需要创建一个git仓库,然后通过 https://pkg.go.dev/{go软件包仓库地址} 访问后根据提示即可将你的软件包提交到golang的pkg公共仓库。 示例: 将git仓库https://gi
2024-08-03 15:51:27 1184
原创 gin框架中断当前网络请求代码执行的 2种方法总结 - panic, Abort() , return
在go语言的开发中,我们要中断当前代码执行 可以使用 return 语句来中断当前代码的执行。 return 语句中断的是当前函数的代码执行。 在gin框架中,如果要中断当前的网络请求,有2种方法。
2024-07-30 17:58:46 296
原创 GORM 软删除 使用详解
在gorm这个ORM框架中,默认情况下,只要我们的表中包含了字段 deleted_at , 模型中包含的字段类型为那么这个情况下我们的模型就拥有了软删除功能。当调用Delete时,GORM并不会从数据库中删除该记录,而是将该记录的DeleteAt设置为当前时间,而后的一般查询方法将无法查找到此条记录。如果你并不想嵌套gorm.Model,你也可以像下方例子那样开启软删除特性:Deleted。
2024-07-25 21:55:24 332
原创 golang语言 .go文件版本条件编译,xxx.go文件指定go的编译版本必须大于等于xxx才生效的方法, 同一个项目多个go版本文件共存方法
在go语言中,我们不关是可以在编译时指定版本, 在我们的xxx.go文件中也可以指定go的运行版本,即 忽略go.mod中的版本,而是当当前的go运行版本达到指定条件后才生效的xxx.go文件。方法如下: 我们通过在xxx.go文件的头部增加以下代码即可。
2024-07-23 19:33:45 837
原创 一文帮你搞懂golang中的类型判断 x.(type) + switch case 和 反射中的switch 加 rv.Kind类型case reflect.Xxx的用法和区别
在golang中,我们可以通过(type)加的形式来对一个any类型的变量进行类型的判断和处理。这里的 x代表的是你要进行类型判断的any类型的变量,(type)和这个语法模式长得相似的有, 不过他们的用法和结果可完全不一样哦,大家要分清楚了。废话不多说,直接上示例。
2024-07-23 10:09:12 246
原创 golang中如何判断某个interface{}对象是否拥有指定的方法, 判断某个any对象是否实现了指定的接口interface 的方法
判断any对象是否拥有指定的方法在go语言里面,判断某个any对象是否拥有指定的方法 可以有2种途径:一是通过反射方式直接判断是否拥有指定的方法; 另外一种途径就是自己定义一个接口,然后将要判断的方法放到自定义的接口中,然后使用断言判断对象是否实现了指定的接口,这个有点绕,不过效率要搞一些!
2024-07-23 09:40:19 568
原创 js axios 网络请求参数中的 params 和 data 的区别 图示
前端开发中,我们常用的是axios这个网络请求库来发送我们的网络请求, 在axios中,params和data是有区别的,他们分别应对的是不同的使用场景。axios会将所有的请求数据附加到请求的url地址中,有请求数据长度的限制。一般用于GET请求。应用场景: 且请求参数不多,数据流很小的情况下,一般情况和GET配合使用。同时由于请求参数都暴露在了url里面,所以有安全风险,仅适用于非敏感数据的发送。如: 我们在params参数中发送一个ids数组类型的请求参数,则最后会生成类似这样的URL请求地址: /a
2024-07-22 17:04:22 515
原创 golang 字符编码 gbk/gb2312 utf8编码相互转换,判断字符是否gbk编码函数, 字符编码转换基础原理解析, golang默认编码utf8
虽然golang里面的默认编码都是统一的unicode utf8编码, 但是我们在调用外部系统提供的api时,就可能会遇到别人的接口提供的编码非 utf8编码,而是gbk/gb2312编码, 这时候我们就必须要将别人的gbk编码转换为go语言里面的默认编码utf8。GB2312编码的范围: 十进制 => 高位字节:161 - 247, 十六进制:0xA1 - 0xF7;低位字节:161 - 254 , 十六进制:0xA1 - 0xFE。
2024-07-22 12:30:30 802
k2p MT7621A适用的智能路由器OpenWrt 23.05.2最新版刷机固件
2024-01-09
macos中使用的Burpsuite Pro 2023.12.1 中提取的JAVA运行时 jre 20.0.2
2023-12-22
Icu4c 73 brew自定义版本安装源
2023-09-11
Axure RP元件库大全-上千个axure元件库-史上最全.7z
2019-06-25
RedisDesktopManager Win 0.9.8.1156 redis的可视化管理工具
2018-11-06
myeclipse2017 和谐补丁 + 闪退补丁 mac win系统通用
2017-12-26
CI辅助函数 PHP自动获取用户地理位置信息的函数 支持淘宝, 新浪等多个IP数据库
2016-09-25
CodeIgniter 3中文手册 --CI 3.0 官方简体中文版用户手册.chm
2016-09-25
ThinkPHP5.0 php7 Auth权限认证管理模块
2016-04-06
eAccelerator for windows php 5.3.XX VC9 PHP加速模块下载
2015-07-10
ModSecurity Handbook使用手册
2015-07-10
codecanyon_super-ajax-contact-form PHP超级邮件联系表单
2015-04-19
安卓ROM system.img 解包与打包工具unyaffs mkyaffs2image
2014-12-02
Magic Zoom Plus v4.5.28 图片放大镜去水印破解 学习版
2014-05-07
1200元的SEO电子书教程内容.doc
2014-05-05
大型网站架构演变和知识体系.pdf
2011-11-28
百度影音服务端 视频服务器V1.0.2.23 最新版
2011-10-23
alibaba.com new PHP clone 英文版阿里巴巴克隆 PHP完整版源码
2010-03-23
CuteFTP 8.3 Professional简体中文纯录色注册版
2008-10-12
ASP PHP在线解压工具
2008-02-19
IIS6+JSP配置工具
2007-12-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人