绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
go语言编程web应用之数据库应用
2019-11-12 15:25:34

1,先看下model文件夹下的g.go文件,这是链接数据库文件,这里导入了gorm,如果没有这个可以用

go get github.com/jinzhu/gorm获取一下

package model

import (
 "github.com/jinzhu/gorm"
 _ "github.com/jinzhu/gorm/dialects/mysql"
)

var db *gorm.DB

func SetDB(database *gorm.DB) {
 db = database
}
func ConnectToDB() *gorm.DB{
 db, err := gorm.Open("mysql", "root:@/fenlei?charset=utf8&parseTime=True&loc=Local")
 if err != nil {
 panic("Failed to connect database")
 }
 db.SingularTable(true)
 return db
}

ConnectToDB函数就是连接了数据库,如果不太清楚gorm的用法可以看一下官方文档。

2,然后看一下model文件夹下的user.go文件

package model

import "fmt"

type User struct {
 ID int `gorm:"primary_key"`
 Username string `gorm:"type:varchar(64)"`
 Email string `gorm:"type:varchar(120)"`
 PasswordHash string `gorm:"type:varchar(128)"`
 Posts []Post
 Followers []*User `gorm:"many2many:follower;association_jointable_foreignkey:follower_id"`
}

func (u *User) SetPassword(password string) {
 u.PasswordHash = GeneratePassword(password)
}
func GetUserByUsername(username string) User{
 var user User
 fmt.Println(db)
 db.Where("username=?", username).Find(&user)
 return user
}

这里定义user结构体,写了两个函数,通过用户名获取用户和设置用户密码

3.medel/utils.go的GeneratePassword函数

package model

import (
 "crypto/md5"
 "encoding/hex"
)

func GeneratePassword(pwd string) string{
 hasher :=md5.New()
 hasher.Write([]byte(pwd))
 pwdHash :=hex.EncodeToString(hasher.Sum(nil))
 return pwdHash
}

生成密码

4.model/post.go帖子的文件

package model

import "time"

type Post struct {
 ID int `gorm:"primary_key"`
 UserID int
 User User
 Body string `gorm:"type:varchar(180)"`
 Timestamp *time.Time `sql:"DEFAULT:current_timestamp"`
}

func GetPostsByUserID(id int) (*[]Post, error) {
 var posts []Post
 if err := db.Preload("User").Where("user_id=?", id).Find(&posts).Error; err != nil {
 return nil, err
 }
 return &posts, nil
}

GetPostsByUserID通过用户id获取到用户发的帖,这样model文件夹的文件建立好了,基本是定义了一些数据文件结构和通用查询方法。


5,改造一下vm/index.go文件


import (
 "model"
)

type IndexViewModel struct {
 BaseViewModel
 model.User
 Posts []model.Post
}

// IndexViewModelOp struct
type IndexViewModelOp struct{}

// GetVM func
func (IndexViewModelOp) GetVM() IndexViewModel {
 u1:=model.GetUserByUsername("rene")

 posts,_:=model.GetPostsByUserID(u1.ID)
 v := IndexViewModel{BaseViewModel{Title: "Homepage"}, u1,*posts}
 return v
}


GetVM方法之前是写死的数据,现在调用数据库的数据。

这样运行index.go,打开浏览器,就可以看到运行效果了。


来源:php程序媛

分享好友

分享这个小栈给你的朋友们,一起进步吧。

应用开发
创建时间:2020-06-17 15:31:04
应用软件开发是指使用程序语言C#、java、 c++、vb等语言编写,主要是用于商业、生活应用的软件的开发。
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

技术专家

查看更多
  • 栈栈
    专家
戳我,来吐槽~