my_gopkg
自定义的golang包,包含许多实用和方便的功能,以下是使用说明和该项目的介绍。
一、使用说明
打开项目根目录,在该目录下打开命令行,然后按如下步骤操作。
(1)初始化mod(有则跳过此步)
go mod init 你的模块名
(2)下载包的最新版本(第一次下载可省略@master)
go get gitee.com/zht639/my_gopkg@master
(3)导包
import "gitee.com/zht639/my_gopkg/包名"
二、包的介绍
1.strtrans
用于字符串和基本类型的相互转换,ToString()可将任意基本类型转为字符串,包括单个ASCII字符和非ASCII字符(如汉字)的转换。ToInt(),ToFloat(),ToBool()可将任意合法的字符串转为基本类型。注意,ToString()不处理float32,而是由Float32ToStr()处理,但存储小数建议用float64,不会出错。
2.rwtxt
批量读取多个txt文件的内容到内存,或批量保存内存变量到一个txt,适用于基于命令行的管理系统。注意,该包用到了泛型技术:[T any],适用于go1.18及以上版本。
ReadFromTXT()将txt每行的内容看作是一个结构体的字段,将每行的内容都保存到结构体,最后返回结构体切片。调用例子如下:
Data, err := ReadFromTXT[TestStruct](filiepath)
其中TestStruct是用户自定义的结构体,data是结构体切片,filepath是txt文件路径。
ReadFromALLTXT()遍历当前目录下所有txt,然后对每个txt调用ReadFromTXT(),最后返回二维结构体切片。调用例子除了函数名之外,和ReadFromTXT()一样。
Save2TXT()将传入的结构体切片中的内容取出,依次写入txt,调用例子如下:
err := Save2TXT(filePath, dataToSave)
其中dataToSave是需要保存的内容,类型为结构体切片。
注意:
1.txt每行的字段默认以空格隔开,如想修改可在本地跳转到源码修改,但这对读写数据没有影响,不建议修改。
2.结构体的内容默认是基本类型,如果有组合类型,需要读者分别定义结构体,再调用函数。比如基本类型和切片组合,则需要定义另一个结构体保存切片的元素类型。
3.goredis
封装了初始化redis操作,ConnectRedis()创建 Redis 客户端并返回客户端和上下文,用户无需每次在操作redis前手动测试服务器连接。
4. autosql
autosql
是一个简化数据库使用的模块,支持常见的数据库(MySQL、PostgreSQL、SQLite、SQL Server)。该模块不仅提供了数据库连接函数,还能自动生成数据表对应的结构体,极大简化了数据库的初始化操作。
功能概述
使用示例
以mysql为例,连接数据库并生成表对应的结构体:
package main
import (
"fmt"
"gitee.com/zht639/my_gopkg/autosql"
)
func main() {
db, err := autosql.ConnMysql("root", "123456", "localhost", "3306", "db01")
if err != nil {
fmt.Println(err)
return
}
// 生成数据库中所有表的结构体
autosql.GenAllStructs(db)
//或者生成指定表对应的结构体
//autosql.GenStruct(db, "category")
}
该函数将会在当前目录下生成一个model包,包含数据库中所有表的结构体定义及返回表名的方法,
目录结构如下:
├─model
│ category.gen.go
│ problem.gen.go
打开其中一个文件,它不仅包含了GEN工具生成的代码,还包含了本人额外添加的外键字段:
// Code generated by gorm.io/gen. Modified by gitee.com/zht639
package model
import (
"time"
"gorm.io/gorm"
)
const TableNameProblem = "problem"
// Problem mapped from table <problem>
type Problem struct {
Category *Category `gorm:"foreignKey:CategoryID;references:ID" json:"category"` // 外键字段
ID int32 `gorm:"column:id;primaryKey;autoIncrement:true" json:"id"`
Title string `gorm:"column:title;comment:问题标题" json:"title"` // 问题标题
Content string `gorm:"column:content;comment:问题内容" json:"content"` // 问题内容
MaxRuntime int32 `gorm:"column:max_runtime;comment:最大运行时间" json:"max_runtime"` // 最大运行时间
MaxMem int32 `gorm:"column:max_mem;comment:最大运行内存" json:"max_mem"` // 最大运行内存
PassNum int32 `gorm:"column:pass_num;comment:所有用户通过的次数" json:"pass_num"` // 所有用户通过的次数
SubmitNum int32 `gorm:"column:submit_num;comment:所有用户提交的次数" json:"submit_num"` // 所有用户提交的次数
CreatedAt time.Time `gorm:"column:created_at" json:"created_at"`
UpdatedAt time.Time `gorm:"column:updated_at" json:"updated_at"`
DeletedAt gorm.DeletedAt `gorm:"column:deleted_at" json:"deleted_at"`
CategoryID int32 `gorm:"column:category_id;not null" json:"category_id"`
}
// TableName Problem's table name
func (*Problem) TableName() string {
return TableNameProblem
}
之后若数据库中的表结构发生变化,只需用GenStruct()或GenAllStructs()重新生成结构体即可。
注意:
1.必须在mod同级目录调用GenStruct()或GenAllStructs()。
2.该包基于GORM相关的包,但本人的包已包含相关依赖,直接下载本人的包即可使用GORM。
3.除了MySQL,其他数据库不支持无符号整数,若要使用,请在结构体字段中的int前加上u。