golang代码实现
1. 目录构造
.├── config //配置文件│ ├── config.go│ ├── config_test.go│ └── dev_custom.yml├── dao // mysql数据库操作│ ├── mysql.go // 初始化mysql│ ├── record.go // 记录表操作│ ├── record_test.go│ ├── users.go │ └── users_test.go├── go.mod├── go.sum├── logic // 业务逻辑│ ├── logic.go│ └── logic_test.go├── main.go // 入口函数├── models // 数据库字段模型│ ├── casbin_rule.go│ ├── record.go│ ├── reverse // xorm数据库主动生成表构造工具│ │ ├── README.txt│ │ ├── custom.yml│ │ └── gennerate.sh // 可执行文件│ ├── user.go│ └── users.go├── sqldao // sql server数据库操作│ ├── connect_test.go │ ├── gorm_test.go│ ├── sql.go // 初始化sql│ ├── users.go // users表操作│ └── users_test.go└── sqlserver.exe
2.各个文件内容
2.1 dev_custom.yml
mySql: dns: "user:passwd@tcp(127.0.0.1:3306)/wzz_db?charset=utf8"sqlServer: dns: "sqlserver://sa:123456@localhost:1433?database=wzz"
2.1 config.go
package configimport ( "fmt" "github.com/mitchellh/mapstructure" "github.com/spf13/viper" "runtime" "strings")// CustomT CustomTtype Mysql struct { DNS string `yaml:"dns"`}type SqlServer struct { DNS string `yaml:"dns"`}// CustomT CustomTtype CustomT struct { Mysql Mysql `yaml:"mySql"` SqlServer SqlServer `yaml:"sqlServer"`}// Custom Customvar Custom CustomT// ReadConfig ReadConfig for customfunc ReadConfig(configName string, configPath string, configType string) *viper.Viper { v := viper.New() v.SetConfigName(configName) v.AddConfigPath(configPath) v.SetConfigType(configType) err := v.ReadInConfig() if err != nil { return nil } return v}func CurrentFileDir() string { _, file, _, ok := runtime.Caller(1) if !ok { return "失败" } i := strings.LastIndex(file, "/") if i < 0 { i = strings.LastIndex(file, "\\") } return string(file[0 : i+1])}// InitConfig InitConfigfunc InitConfig() { path := CurrentFileDir() v := ReadConfig("dev_custom", path, "yml") md := mapstructure.Metadata{} err := v.Unmarshal(&Custom, func(config *mapstructure.DecoderConfig) { config.TagName = "yaml" config.Metadata = &md }) if err != nil { panic(err) return } fmt.Println("InitConfig Success!")}
2.1 dev_custom.yml