package main
import (
"encoding/json"
"fmt"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"strings"
)
type Mobile string
// Scan 将数据库中取出的数据,赋值给目标类型
func (s *Mobile) Scan(v interface{}) error {
if vt, ok := v.([]byte); ok {
*s = Mobile(string(vt[:3]) + "****" + string(vt[7:]))
}
return nil
}
type Name string
// Scan 将数据库中取出的数据,赋值给目标类型
func (s *Name) Scan(v interface{}) error {
if vt, ok := v.([]byte); ok {
nvt := []rune(string(vt))
if len(nvt) == 2 {
*s = Name(string(nvt[:1]) + "*")
}
if len(nvt) == 3 {
*s = Name(string(nvt[:1]) + "*" + string(nvt[2:]))
}
if len(nvt) > 4 {
*s = Name(string(nvt[:2]) + strings.Repeat("*", len(nvt)-3) + string(nvt[len(nvt)-1:]))
}
if len(nvt) < 2 {
*s = Name(nvt)
}
}
return nil
}
type Email string
// Scan 将数据库中取出的数据,赋值给目标类型
func (s *Email) Scan(v interface{}) error {
if nvt, ok := v.([]byte); ok {
if string(nvt) == "" {
*s = ""
} else {
email := strings.Split(string(nvt), "@")
emailPrefix := email[0]
if len(email) == 1 {
*s = Email(emailPrefix[:1] + strings.Repeat("*", len(emailPrefix)-1) + emailPrefix[len(emailPrefix)-1:])
} else {
*s = Email(emailPrefix[:1] + strings.Repeat("*", len(emailPrefix)-1) + emailPrefix[len(emailPrefix)-1:] + "@" + email[1])
}
}
}
return nil
}
// SysAdministrator 管理员表
type SysAdministrator struct {
ID int64 `gorm:"column:id"` // 主键id
Mobile Mobile `gorm:"column:mobile" json:"mobile"` // 手机号码
Nickname Name `gorm:"column:nickname" json:"nickname"` // 名称
Email Email `gorm:"column:email" json:"email"` // 邮箱
}
func (SysAdministrator) TableName() string {
return "sys_administrator"
}
func main() {
db, _ := gorm.Open(mysql.Open("root:root@tcp(127.0.0.1:3306)/dbname?parseTime=true&collation=utf8mb4_unicode_ci&loc=Asia%2FShanghai&charset=utf8mb4"), &gorm.Config{})
var resp []SysAdministrator
db.Model(&SysAdministrator{}).Scan(&resp)
for _, v := range resp {
fmt.Println(`v.Mobile`, v.Mobile)
fmt.Println(`v.Nickname`, v.Nickname)
fmt.Println(`v.Email`, v.Email)
}
marshal, _ := json.Marshal(resp)
fmt.Println(string(marshal))
}
打印效果