记录版本
安装
go get -u github.com/go-spring/spring-core@v1.1.0-rc2
go get -u github.com/go-spring/starter-gin@v1.1.0-rc2
go get -u github.com/go-spring/starter-echo@v1.1.0-rc2
go get -u github.com/go-spring/starter-gorm@v1.1.0-rc2
go get -u github.com/jinzhu/gorm
go get -u github.com/go-spring/starter-go-redis@v1.1.0-rc2
go get -i github.com/go-spring-starter-redigo@v1.1.0-rc2
Web 应用集成starter-gorm
1.配置文件config/application.yml
db:
url: root:password@tcp(host:3306)/db_name?charset=utf8mb4&parseTime=True&loc=Local
2.main.go
package main
import (
"github.com/go-spring/spring-core/gs"
"github.com/go-spring/spring-core/web"
_ "github.com/go-spring/starter-gin"
_ "github.com/go-spring/starter-gorm/mysql"
"github.com/jinzhu/gorm"
"log"
)
type user struct {
Id int64 `json:"id" gorm:"primary_key"`
Username string `json:"username"`
Age int `json:"age"`
Email string `json:"email"`
}
func (u *user) TableName() string {
return "user"
}
type gormController struct {
db *gorm.DB `autowire:"?"`
}
func (c *gormController) selectUsers(ctx web.Context) {
var users []user
c.db.Model(&user{}).Find(&users)
ctx.JSON(&users)
}
func init() {
gs.Object(new(gormController)).Init(func(c *gormController) {
gs.GetMapping("/users", c.selectUsers)
})
}
func main() {
log.Fatal(gs.Run())
}
Web 应用集成gorm多数据源
1.config/application.yml
dbs:
- name: gorm-db1
url: root:password@tcp(host:3306)/db_name?charset=utf8mb4&parseTime=True&loc=Local
type: mysql
- name: gorm-db2
url: root:password@tcp(host:3306)/db_name?charset=utf8mb4&parseTime=True&loc=Local
type: mysql
2.创建一个dbs.go文件用来单独注入*gorm.DB实例
package main
import (
"github.com/go-spring/spring-core/gs"
"github.com/jinzhu/gorm"
"github.com/labstack/gommon/log"
_ "github.com/jinzhu/gorm/dialects/mysql"
)
type DBConfig struct {
Name string `value:"${name}"`
Url string `value:"${url}"`
Type string `value:"${type}"`
}
func init() {
gs.OnProperty("dbs", func(config []DBConfig) {
for _, dbConfig := range config {
db, err := CreateDB(dbConfig)
if err != nil {
log.Fatal(err)
}
gs.Object(db).Destroy(CloseDB).Name(dbConfig.Name)
}
})
}
func CreateDB(config DBConfig) (*gorm.DB, error) {
return gorm.Open(config.Type, config.Url)
}
func CloseDB(db *gorm.DB) {
log.Info("close gorm mysql")
if err := db.Close(); err != nil {
log.Error(err)
}
}
3.main.go
package main
import (
"github.com/go-spring/spring-core/gs"
"github.com/go-spring/spring-core/web"
_ "github.com/go-spring/starter-gin"
"github.com/jinzhu/gorm"
"log"
)
type user struct {
Id int64 `json:"id" gorm:"primary_key"`
Username string `json:"username"`
Age int `json:"age"`
Email string `json:"email"`
}
func (u *user) TableName() string {
return "user"
}
type gormController struct {
db *gorm.DB `autowire:"gorm-db1"`
}
func (c *gormController) selectUsers(ctx web.Context) {
var users []user
c.db.Model(&user{}).Find(&users)
ctx.JSON(&users)
}
func init() {
gs.Object(new(gormController)).Init(func(c *gormController) {
gs.GetMapping("/users", c.selectUsers)
})
}
func main() {
log.Fatal(gs.Run())
}
Web 应用集成starter-go-redis/starter-redigo
1.config/application.yml
redis:
host: host
port: 6379
password: password
database: 0
2.main.go
package main
import (
"github.com/go-spring/spring-core/gs"
"github.com/go-spring/spring-core/redis"
"github.com/go-spring/spring-core/web"
_ "github.com/go-spring/starter-gin"
"log"
_ "github.com/go-spring/starter-go-redis"
)
type redisController struct {
redisClient redis.Client `autowire:"?"`
}
func (c *redisController) get(ctx web.Context) {
key := ctx.QueryParam("key")
value, err := c.redisClient.Get(ctx.Context(), key)
if err != nil {
ctx.JSON(web.ERROR.Error(err))
} else {
ctx.JSON(web.SUCCESS.Data(value))
}
}
func init() {
gs.Object(new(redisController)).Init(func(c *redisController) {
gs.GetMapping("/redis/get", c.get)
})
}
func main() {
log.Fatal(gs.Run())
}