diff --git a/db/initialize.go b/db/initialize.go index c268700..243c1e6 100644 --- a/db/initialize.go +++ b/db/initialize.go @@ -12,7 +12,7 @@ import ( ) func init() { - initDatabase() + //initDatabase() //initHttps() } diff --git a/go.mod b/go.mod index ba75aab..4d0564a 100644 --- a/go.mod +++ b/go.mod @@ -22,6 +22,8 @@ require ( github.com/gorilla/websocket v1.4.2 // indirect github.com/hashicorp/golang-lru v0.5.4 // indirect github.com/hashicorp/hcl v1.0.0 // indirect + github.com/jinzhu/inflection v1.0.0 // indirect + github.com/jinzhu/now v1.1.5 // indirect github.com/konsorten/go-windows-terminal-sequences v1.0.3 // indirect github.com/lib/pq v1.7.0 // indirect github.com/magiconair/properties v1.8.1 // indirect @@ -50,8 +52,10 @@ require ( golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550 // indirect golang.org/x/net v0.0.0-20190620200207-3b0461eec859 // indirect golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1 // indirect - golang.org/x/text v0.3.2 // indirect + golang.org/x/text v0.26.0 // indirect google.golang.org/protobuf v1.23.0 // indirect gopkg.in/ini.v1 v1.51.0 // indirect gopkg.in/yaml.v2 v2.3.0 // indirect + gorm.io/driver/mysql v1.6.0 // indirect + gorm.io/gorm v1.30.0 // indirect ) diff --git a/go.sum b/go.sum index 6666bef..b2a459a 100644 --- a/go.sum +++ b/go.sum @@ -158,6 +158,10 @@ github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2p github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= +github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E= +github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc= +github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ= +github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= @@ -384,6 +388,8 @@ golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M= +golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -459,6 +465,10 @@ gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gorm.io/driver/mysql v1.6.0 h1:eNbLmNTpPpTOVZi8MMxCi2aaIm0ZpInbORNXDwyLGvg= +gorm.io/driver/mysql v1.6.0/go.mod h1:D/oCC2GWK3M/dqoLxnOlaNKmXz8WNTfcS9y5ovaSqKo= +gorm.io/gorm v1.30.0 h1:qbT5aPv1UH8gI99OsRlvDToLxW5zR7FzS9acZDOZcgs= +gorm.io/gorm v1.30.0/go.mod h1:8Z33v652h4//uMA76KjeDH8mJXPm1QNCYrMeatR0DOE= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/goGet.sh b/goGet.sh index 9049ee9..f79b516 100755 --- a/goGet.sh +++ b/goGet.sh @@ -5,4 +5,9 @@ chmod 777 $HOME/goftpdir go get github.com/astaxie/beego || echo github.com/astaxie/beego go get github.com/satori/go.uuid || echo github.com/satori/go.uuid go get github.com/beego/bee || echo github.com/beego/bee -go get github.com/go-sql-driver/mysql || echo github.com/go-sql-driver/mysql \ No newline at end of file +go get github.com/go-sql-driver/mysql || echo github.com/go-sql-driver/mysql + +#gorm +go get -u gorm.io/gorm +#gorm mysql driver +go get -u gorm.io/driver/mysql \ No newline at end of file diff --git a/gormdb/initialize.go b/gormdb/initialize.go new file mode 100644 index 0000000..07b08be --- /dev/null +++ b/gormdb/initialize.go @@ -0,0 +1,60 @@ +package gormdb + +import ( + "fmt" + "gorm.io/driver/mysql" + "gorm.io/gorm" + "log" + "time" +) + +func init() { + fmt.Println("gorm db init()") + initDatabase() +} + +var DB *gorm.DB + +func initDatabase() { + + //dsn := "root:Skyinno251,@tcp(192.168.2.18:3306)/gorm?charset=utf8mb4&parseTime=True&loc=Local" + //dsn := "root:Skyinno251,@tcp(47.242.184.139:3306)/appserver?charset=utf8mb4&parseTime=True&loc=Local" + dsn := "root:Skyinno251,@tcp(localhost:3306)/goftp?charset=utf8mb4&parseTime=True&loc=Local" + //dsn := "root:Skyinno251,@tcp(192.168.3.29:3306)/appserver?charset=utf8mb4&parseTime=True&loc=Local" + + db, err := gorm.Open(mysql.New(mysql.Config{ + DSN: dsn, // DSN data source name + DefaultStringSize: 255, // string 类型字段的默认长度 + DisableDatetimePrecision: true, // 禁用 datetime 精度,MySQL 5.6 之前的数据库不支持 + DontSupportRenameIndex: true, // 重命名索引时采用删除并新建的方式,MySQL 5.7 之前的数据库和 MariaDB 不支持重命名索引 + DontSupportRenameColumn: true, // 用 `change` 重命名列,MySQL 8 之前的数据库和 MariaDB 不支持重命名列 + SkipInitializeWithVersion: false, // 根据当前 MySQL 版本自动配置 + }), &gorm.Config{}) + + //db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{}) + if err != nil { + fmt.Println("failed to connect database") + } + + // 获取通用数据库对象 sql.DB ,然后使用其提供的功能 + sqlDB, errDB := db.DB() + if errDB != nil { + return + } + + // SetMaxIdleConns 用于设置连接池中空闲连接的最大数量。 + sqlDB.SetMaxIdleConns(5) + // SetMaxOpenConns 设置打开数据库连接的最大数量。 + sqlDB.SetMaxOpenConns(20) + // SetConnMaxLifetime 设置了连接可复用的最大时间。 + sqlDB.SetConnMaxLifetime(time.Minute * 5) // 连接最大生命周期 + + err = sqlDB.Ping() // 检查连接是否成功建立。如果失败,则返回错误。 + if err != nil { + // 处理连接失败的情况。例如,打印错误信息并退出程序。 + log.Println("数据库连接失败") + fmt.Println("Connection failed:", err) + return + } + DB = db +} diff --git a/models/file.go b/models/file.go index f01dad2..dce2395 100644 --- a/models/file.go +++ b/models/file.go @@ -1,44 +1,65 @@ package models import ( + "fmt" + "goftp/gormdb" "time" - - "github.com/astaxie/beego/orm" ) +type File struct { + Id string `gorm:"primaryKey;size:20"` + Downloadcount int64 `gorm:"size:20" json:"downloadcount"` + Name string `gorm:"size:50" json:"fileName"` + LastDownloadtime time.Time `json:"last_downloadtime"` +} + func init() { - orm.RegisterModelWithPrefix("cm_", new(File)) + fmt.Println("File init()") + gormdb.DB.AutoMigrate(&File{}) } -type File struct { - Id string `orm:"pk" json:"id"` - Downloadcount int64 `json:"downloadcount"` - Name string `json:"fileName"` - LastDownloadtime time.Time `json:"last_downloadtime"` +// TableName 会将 User 的表名重写为 `user` +func (File) TableName() string { + return "file" } func FindFileById(id string) (*File, error) { - fileModel := new(File) - err := orm.NewOrm().QueryTable(new(File)).Filter("id", id).One(fileModel) - if err != nil { - return nil, err - } - return fileModel, nil + var file File + gormdb.DB.First(&file, id) + return &file, nil } -func FindFileByFileName(name string) (*File, error) { - fileModel := new(File) - err := orm.NewOrm().QueryTable(new(File)).Filter("name", name).One(fileModel) - if err != nil { - return nil, err - } - return fileModel, nil +func FindFileByFileName(name string) *File { + var file File + gormdb.DB.Where("name = ?", name).First(&file) + return &file + + //fileModel := new(File) + //err := orm.NewOrm().QueryTable(new(File)).Filter("name", name).One(fileModel) + //if err != nil { + // return nil, err + //} + //return fileModel, nil } -func UpdateFile(file *File) (int64, error) { - return orm.NewOrm().Update(file) +func UpdateFile(file *File) error { + result := gormdb.DB.Save(&file) + if result.Error != nil { + fmt.Println("Failed to UpdateFile:", result.Error) + return result.Error + } else { + fmt.Println("UpdateFile successfully!") + } + return nil } -func InsertFile(file *File) (int64, error) { - return orm.NewOrm().Insert(file) +func InsertFile(file *File) error { + result := gormdb.DB.Save(&file) + if result.Error != nil { + fmt.Println("Failed to create InsertFile:", result.Error) + return result.Error + } else { + fmt.Println("InsertFile created successfully!") + } + return nil } diff --git a/models/ip.go b/models/ip.go index dd1b612..2c397fb 100644 --- a/models/ip.go +++ b/models/ip.go @@ -1,24 +1,44 @@ package models import ( - "github.com/astaxie/beego/orm" + "fmt" + "goftp/gormdb" ) +type Ip struct { + Id string `gorm:"primaryKey;size:20"` + Ip string `gorm:"size:30"` + Updatetime string `gorm:"size:30"` +} + func init() { - orm.RegisterModelWithPrefix("cm_", new(Ip)) + fmt.Println("Ip init()") + gormdb.DB.AutoMigrate(&Ip{}) } -type Ip struct { - Id string `orm:"pk" json:"id"` - Ip string `json:"ip"` - Updatetime string `json:"updatetime"` +// TableName 会将 User 的表名重写为 `user` +func (Ip) TableName() string { + return "ip" } -func GetIpById(id string) string { - ipModel := new(Ip) - err := orm.NewOrm().QueryTable(new(Ip)).Filter("id", id).One(ipModel) - if err != nil { - return "" +func SaveIp(ip *Ip) { + result := gormdb.DB.Create(&ip) + if result.Error != nil { + fmt.Println("Failed to create Ip:", result.Error) + } else { + fmt.Println("Ip created successfully!") } - return ipModel.Ip +} + +func GetIpById(id string) string { + var ip Ip + gormdb.DB.First(&ip, id) + return ip.Ip + + //ipModel := new(Ip) + //err := orm.NewOrm().QueryTable(new(Ip)).Filter("id", id).One(ipModel) + //if err != nil { + // return "" + //} + //return ipModel.Ip } diff --git a/service/file.go b/service/file.go index 3cc153a..3aedca2 100644 --- a/service/file.go +++ b/service/file.go @@ -7,13 +7,13 @@ import ( ) func UpdateDownloadCount(fileName string) bool { - file, err := models.FindFileByFileName(fileName) - if err == nil { + file := models.FindFileByFileName(fileName) + if file != nil { //文件存在 currentCount := file.Downloadcount file.Downloadcount = currentCount + 1 file.LastDownloadtime = time.Now() - _, errUpdate := models.UpdateFile(file) + errUpdate := models.UpdateFile(file) if errUpdate == nil { return true } @@ -24,7 +24,7 @@ func UpdateDownloadCount(fileName string) bool { insertFile.Name = fileName insertFile.Downloadcount = 1 insertFile.LastDownloadtime = time.Now() - _, errInsert := models.InsertFile(insertFile) + errInsert := models.InsertFile(insertFile) if errInsert == nil { return true }