go Création inverse de la structure de la table + requête sql native et lecture des données + utilisation du paradigme

Inverser la création de la structure de la table

Quand avez-vous besoin de créer des tables à l'envers ?
Il y a d'abord les tables de la base de données, lorsqu'il est nécessaire de créer une structure et d'établir une association avec la table de la base de données, il est nécessaire de générer à l'envers la structure de la table à partir de la table de la base de données.
Bibliothèque d'outils (nécessite une installation) : gormt

安装命令
go get -u https://github.com/xxjwxc/gormt

insérez la description de l'image ici

./gormt --help
or
./gormt -h

-------------------------------------------------------
base on gorm tools for mysql database to golang struct

Usage:
  main [flags]

Flags:
  -d, --database string   数据库名
  -f, --foreign           是否导出外键关联
  -F, --fun               是否导出函数
  -g, --gui               是否ui显示模式
  -h, --help              help for main
  -H, --host string       数据库地址.(注意-H为大写)
  -o, --outdir string     输出目录
  -p, --password string   密码.
      --port int          端口号 (default 3306)
  -s, --singular          是否禁用表名复数
  -b, --table_names string 表名称  
  -l, --url string        url标签(json,url)
  -u, --user string       用户名.

commande de génération

// 更加详细可以参考上面的命令
go/bin/gormt -H=ip -d=database -p=pwd -u=username --port=3306 -F=false -b table_name1,table_name2...

Requête SQL native et lecture de données

// err := DB.Raw(sql, args...).Scan(&res).Error
sql := `SELECT c.name as name,SUM(d.num) as total from (SELECT id,num,time from d WHERE time BETWEEN ? AND ?) d INNER JOIN (SELECT id,name,k from c) c on d.id=c.id GROUP BY DAY(d.time),d.id ORDER BY d.time;`
err := DB.Raw(sql, todayStart, todayStop).Scan(&res).Error

utilisation de paradigmes

Peu de temps après mon premier contact avec le go, j'ai pensé que je ne pourrais peut-être pas l'utiliser, alors j'ai vérifié l'information.Le paradigme du go semble tout juste sortir. J'ai vraiment compris.
Pourquoi pensez-vous utiliser des paradigmes ?
En raison de la requête de données ci-dessus, il existe une exigence statistique. Chaque fois qu'une table est vérifiée pour implémenter une fonction, le code est un peu gonflé, car la plupart du code est le même, c'est-à-dire que la table de requête est différente et que le La structure du résultat renvoyé est différente. Tout le reste est identique. J'ai pensé à encapsuler toute la partie du code, mais la structure du résultat renvoyé ne peut pas être codée en dur, elle doit être déterminée en fonction de la situation spécifique, alors je dois utiliser un paramètre de type indéterminé pour traiter un tel problème , et j'ai pensé au paradigme.

// res 就是 所说的范型
func Statistics[T any](context *gin.Context, DB *gorm.DB, sql string, claim string, res []T) {
    
    
	today := time.Now().Add(-time.Hour * 24)
	todayStart := today.Format("2006-01-02") + " 00:00:00"
	todayStop := today.Format("2006-01-02") + " 23:59:59"
	err := DB.Raw(sql, todayStart, todayStop).Scan(&res).Error
	if err != nil {
    
    
		// 加一个 日志对象, 把错误信息打印到日志里。
		fmt.Println(err)
		return
	}
	b, _ := json.Marshal(res)
	bStr := string(b)
	// 把双引号去掉
	bStr = strings.ReplaceAll(bStr, "\"", "")
	msg := todayStart + " ~ " + todayStop + claim + bStr
	uitls.SendMsg(msg)
	data := gin.H{
    
    
		"resList":    res,
		"len":        len(res),
		"todayStart": todayStart,
		"todayStop":  todayStop,
	}
	response.Response(context, 200, data, "查询结果!")
}

// 调用
var res []model.MyStruct
Statistics[model.MyStruct](context, DB, sql, claim, res)

Remplir

反引号 `` 有点折磨人
在字符串拼接的时候,最好还是把双引号去掉。

Je suppose que tu aimes

Origine blog.csdn.net/wjl__ai__/article/details/124760408
conseillé
Classement