my_gopkg

module
v0.0.0-...-4b0c422 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 25, 2024 License: MulanPSL-2.0

README

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)。该模块不仅提供了数据库连接函数,还能自动生成数据表对应的结构体,极大简化了数据库的初始化操作。

功能概述
  • 连接函数:

    • ConnMysql(username, password, host, port, dbname string): 连接 MySQL 数据库。
    • ConnPostgres(username, password, host, port, dbname string): 连接 PostgreSQL 数据库。
    • ConnSQLite(filepath string): 连接 SQLite 数据库。
    • ConnSQLServer(username, password, host, port, dbname string): 连接 SQL Server 数据库。
  • 结构体生成:

    • GenStruct(db *gorm.DB, tableName string): 生成数据库中指定表的结构体。
    • GenAllStructs(db *gorm.DB): 生成数据库中所有表的结构体。

    这两个函数利用GORM的GEN工具,将数据库中的表映射为Golang的结构体,并自动生成外键字段。极大地提高了开发效率和代码的可维护性。

使用示例

以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。

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL