作者:matrix
被围观: 1,834 次
发布时间: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......
作者:matrix
被围观: 1,913 次
发布时间: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......
作者:matrix
被围观: 1,578 次
发布时间: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)描述了以下几种修改:
添加或更新字段:如果补丁中的一个字段在原始对象中不存在,它......
作者:matrix
被围观: 4,007 次
发布时间: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......
作者:matrix
被围观: 1,770 次
发布时间: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() ......
作者:matrix
被围观: 1,640 次
发布时间: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......
作者:matrix
被围观: 4,403 次
发布时间:2023-04-28
分类:Python |
4 条评论 »
安装构建工具
首先确保安装了setuptools 和wheel。如果没有就运行以下命令安装:
$ pip3 install setuptools wheel twine
配置项目
目录结构可参考:
https://github.com/Hootrix/text-box-wrapper
项目中包含以下文件:
setup.py:包含项目的元数据和依赖关系。README.md:项目的描述文件。LICENSE:选择一个许可证并将其放在此文件中。wrapper.py:自己定义的文件,包含功能代码__init__.py 包定义,以及可引入的方法
配置setup.py
setup.py可配置作者、readme、仓库等信息
import osfrom setuptools import setup, find_packageswith open(os.path.join(os.path.dirname(__file__), "README.md"), encoding="utf-8") as f: long_de......
作者:matrix
被围观: 2,273 次
发布时间:2023-02-10
分类:Golang |
无评论 »
Golang支持跨平台编译,比起python只能编译为当前平台的二进制文件要好太多。
go build help
$ go help buildusage: go build [-o output] [build flags] [packages]...
默认编译(输出当前平台二进制文件)
$ go build -ldflags="-s -w" main.go && upx -9 ./main
说明:upx 该工具用于压缩二进制文件 -9 表示最高压缩率(选择范围为1-9)
跨平台编译
Mac/Linux系统下:
输出Linux可执行文件:
$ CGO_ENABLE=0 GOOS=linux GOARCH=amd64 go build -ldflags='-s -w -extldflags "-static -fpic"' -o main-linux-amd64 main.go && upx -9 ./main-linux-amd64
输出Windows可执行文件:
$ CGO_ENABLE=0 GOOS=windows GOARC......
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
... - 50