golang远程调试 vscode+dlv

作者:matrix 被围观: 1,929 次 发布时间:2023-12-31 分类:Golang | 一条评论 »

远程环境可能会有远程调试需求,比如白名单访问限制等情况要让本地环境调试远程环境数据,本地代码和远程环境执行代码必须保持一致 安装dlv 远程服务器环境安装 dlv $ go install github.com/go-delve/delve/cmd/dlv@latest 查看已安装dlv版本 $ dlv versionDelve DebuggerVersion: 1.21.0Build: $Id: fec0d226b2c2cce1567d5f59169660cf61dc1efe 启动dlv服务 方法a. 监听已启动进程 $ dlv attach 28122 --listen=:8669 --headless --api-version=2 --log 28122 为已启动进程id8669 为dlv开启的监听端口 方法b. 通过dlv直接启动指定bin文件 $ dlv exec --listen=:8669 --headless --api-version=2 --log ./main-hhtjim 8669 为dlv开......

局域网游戏串流工具 parsec

作者:matrix 被围观: 3,600 次 发布时间:2023-12-05 分类:零零星星 | 无评论 »

Parsec https://Parsec.app/Parsec是专门针对游戏玩家的远程桌面工具,有很好的低延迟体验。我用Parsec的Mac端连接PC端来远程玩游戏,完全可替代微软的Microsoft Remote Desktop。MRD虽然可以稍微优化下网络延迟($ sysctl net.inet.tcp.delayed_ack=0),但是效果还是差强人意,MRD远程时拖拽窗口和游戏的高频操作依然能感受到明显延迟。不过MRD在作为办公远程方面还是不错的,毕竟什么粘贴复制那些还是方便。 注册 登录注册需要有外网访问能力,免费版本的个人使用完全够用。https://dash.parsec.app/signup/按照官网提示流程操作即可,这里不打算手把手截图了 安装 widnows: https://builds.parsec.app/package/parsec-windows.exemac:......

GORM中使用虚拟字段

作者:matrix 被围观: 1,942 次 发布时间:2023-11-30 分类:Golang | 无评论 »

使用gorm时,可能需要处理虚拟字段(不在数据库中实际存在的字段)的情况。可以使用结构体tag标签来支持 User结构体模型 type User struct { ID uint `gorm:"primaryKey;not null"` // 主键ID // 虚拟字段 Isvip int `gorm:"-;default:0"` // 是否vip 1是 0否} 说明:IsVip字段被标记为 gorm:"-" ,表示虚拟字段。gorm在进行数据库操作(如查询、插入、更新等)时,将不会考虑此字段。同时,可以使用default 标签为其指定默认值。 自定义获取器 自定义一个Get方法 例如,下面的GetIsVip方法会基于用户的VIP状态来返回相应的值: func (u *User) GetIsVip() int { if u.Vip != nil && u.Vip.IsActive......

ShouldBindQuery获取GET参数默认值

作者:matrix 被围观: 2,075 次 发布时间:2023-10-31 分类:Golang | 一条评论 »

验证器结构体的form标签中设置default即可,仅测试ShouldBindQuery有效读取,其他绑定方法未知验证器结构体 type UserListValidator struct { Type string `form:"type,default=RECOMMEND" binding:"omitempty,oneof=NEAR RECOMMEND" label:"列表类型"` //列表类型 NEAR:附近(默认) RECOMMEND:推荐} 控制器方法 func (u *UserController) List(ctx *gin.Context) { validator := validators.UserListValidator{} if err := ctx.ShouldBindQuery(&validator); err != nil { u.JSONResponseError(ctx, err) return } //validator.Type 参考:https://github.com/gin-gonic/gin/issues/1052#issuec......

JSON Merge Patch 合并结构体字段数据

作者:matrix 被围观: 1,681 次 发布时间:2023-10-18 分类:Golang | 无评论 »

json Merge Patch,是一个Internet Engineering Task Force(IETF)标准。基本思想是,你有一个原始的json对象,然后根据提供的“补丁”JSON对象,最终生成原始JSON对象需要修改的结果。这种机制适用于部分更新(也称为PATCH更新)的场景。 例子 原始对象: { "Account": "old_account", "Name": "old_name", "Avatar": "old_avatar"} 补丁对象(patch object): { "Account": "new_account", "Name": null} 应用补丁对象后的待更新数据(PATCH更新): { "Account": "new_account", "Avatar": "old_avatar"} 简单来说,补丁对象(patch object)描述了以下几种修改: 添加或更新字段:如果补丁中的一个字段在原始对象中不存在,它......

struct结构体类型2 - 嵌入结构体值 指针类型区别

作者:matrix 被围观: 4,112 次 发布时间:2023-07-07 分类:Golang | 3 条评论 »

Golang中嵌入结构体类型有两种:值或指针 结论 创建 含内嵌指针struct实例时,必须手动声明嵌入的结构指针。伪代码如下: package maintype BaseDao struct{name string}# 匿名结构体字段BaseDao type OptDao1 struct{BaseDao} # 嵌入值type OptDao2 struct{*BaseDao} # 嵌入指针func main(){ opt := OptDao2{BaseDao:&BaseDao{}} //必须手动声明嵌入的结构指针} 上面代码中OptDao1、OptDao2嵌入了BaseDao结构体,主要区别只有嵌入值的类型不同。值和指针区别 嵌入值 创建OptDao1对象 mOptDao1 := OptDao1{}mOptDao1.name 代码调用会正常,属性name会获取到空字符串其他例: type Base struct { value int}func (b *Base) Increase......

Golang的结构体类型struct

作者:matrix 被围观: 1,956 次 发布时间:2023-06-24 分类:Golang | 一条评论 »

熟悉面向对象语言的话,Golang的struct结构体有点像面向对象编程中的类。但这两者不是完全一样,只能说都有继承、封装、多态的特点。 结构体(struct) 结构体可以将零个或多个任意类型的值聚合在一起,能描述多个数据类型 type Person struct { name string age int value string address string} 成员方法和接收者 func (p *Person) setName(name string) { p.name = name} 说明:setName 为声明的方法p *Person为接收者(指针类型)struc类型新增成员方法的语法很另类,像是单独给struct做绑定,绑定的时候会有接收者来指定当前实例类型。GOlang其实可以给任何类型创建成员方法: type MyInt intfunc (i MyInt) IsZero() ......

GitHub Action自动release发布版本 + docker镜像打包

作者:matrix 被围观: 1,800 次 发布时间:2023-06-23 分类:零零星星 | 无评论 »

https://github.com/Hootrix/keyword_alert_bot 针对keyword_alert_bot项目早就有添加docker镜像的想法,这次趁着有机会就完成这个feature,也算是使用下GitHub的CI/CD。我的想法是利用GitHub action功能,推送代码更新后自动打包docker镜像且安装所有依赖。打包的时候把最新版本号写入到代码中(当前日期作为版本号)。使用者把docker镜像pull后可以轻松运行整个bot。 流水线配置 项目的 .github/workflows/main.yml路径下新建文件: name: CI/CD Pipelineon: push: # 指定分支push操作触发流水线 branches: # - dev.20230419 # debug - masterjobs: # 自定义job流水线名字 build-and-push: # 指定运行环境 ubuntu......