百度收录网站需要多久,在线设计logo图片,淮安做网站找哪家公司,网站类型分类投票系统
数据库的建立
先分析需求#xff0c;在sql中建立数据库#xff0c;关于项目数据库如何建立可以在“goweb项目创建流程分析中看如何去建表”
成功后目前有四个表#xff1a;
vote#xff0c;user#xff0c;vote_opt,vote_opt_user 建立数据库#xff0c;可以…投票系统
数据库的建立
先分析需求在sql中建立数据库关于项目数据库如何建立可以在“goweb项目创建流程分析中看如何去建表”
成功后目前有四个表
voteuservote_opt,vote_opt_user 建立数据库可以使用网上的sql转gorm网站把建表语句直接转换成结构体
放在model下的model.go文件下作为全部数据库存放处
package modelimport database/sql//这里存放各种gorm建表语句type VoteOptUser struct {Id sql.NullInt64 gorm:column:id;primary_key;AUTO_INCREMENTUserId sql.NullInt64 gorm:column:user_idVoteId sql.NullInt64 gorm:column:vote_idVoteOptId sql.NullInt64 gorm:column:vote_opt_idCreateTime sql.NullString gorm:column:create_timeUpdateTime sql.NullString gorm:column:update_time
}func (v *VoteOptUser) TableName() string {return vote_opt_user
}type VoteOpt struct {Id sql.NullInt64 gorm:column:id;primary_key;AUTO_INCREMENTName sql.NullString gorm:column:nameVoteId sql.NullInt64 gorm:column:vote_idCount sql.NullInt32 gorm:column:countCreatedTime sql.NullString gorm:column:created_timeUpdateTime sql.NullString gorm:column:update_time
}func (v *VoteOpt) TableName() string {return vote_opt
}type Vote struct {Id sql.NullInt64 gorm:column:id;primary_key;AUTO_INCREMENTTitle sql.NullString gorm:column:titleType sql.NullInt32 gorm:column:type;comment:0是单选1是多选Status sql.NullInt32 gorm:column:status;comment:0开放1超时Time sql.NullInt64 gorm:column:time;comment:有效时长UserId sql.NullInt64 gorm:column:user_id;comment:创建人是谁CreatedTime sql.NullString gorm:column:created_time;comment:创建时间UpdatedTime sql.NullString gorm:column:updated_time;comment:更新时间
}func (v *Vote) TableName() string {return vote
}type User struct {Id sql.NullInt64 gorm:column:id;primary_key;AUTO_INCREMENTName sql.NullString gorm:column:namePassword sql.NullString gorm:column:passwordCreatedTime sql.NullString gorm:column:created_timeUpdateTime sql.NullString gorm:column:update_time
}func (u *User) TableName() string {return user
}建立完成可以先测试是否成功 测试
在model中建立votemodel_test文件测试数据库是否连接成功能否查出数据
//model_text测试文件:
package model
import (fmttesting
)
func TestGetVotes(t *testing.T) { //该方法测试vote是否生效NewMysql() //连接数据库//测试用例r : GetVotes() //查询方法fmt.Printf(ret:%v, r)//%v 是一个格式化占位符表示以“扩展”格式输出变量的值。对于结构体struct类型的变量%v 会输出字段名和字段值。//和%v区别通用的格式化占位符根据变量的实际类型进行格式化输出。对于结构体它会输出字段的值但不会包括字段名。Close()
}//vote文件其实和user文件中方法基本一致都是封装查表方法
package modelimport fmtfunc GetVotes() []Vote { //该方法会输出Vote切片类型的值//封装查询方法,查询投票项目的详情ret : make([]Vote, 0) //定义ret为切片类型0表示长度为0内部存放具体值为vote类型err : Conn.Table(vote).Find(ret).Errorif err ! nil {fmt.Printf(err:%s, err.Error())}return ret
}当在vote中加入数据 再在test方法中测试输出 后边没截完
因为ret是切片类型所以能同时查多条记录测试完成可以写逻辑层和router层代码啦
将所有表名展示到网页上
首先先试试把vote的Title展示到页面上
将index.tmpl代码改为
写模板文件
!doctype html
html langen
headtitle香香编程-投票项目/title
/head
body
main{{range $key,$value : .vote}}h2{{$value.Title}}/h2{{/* 用模板写出只要所有ret的title*/}}{{end}}
/main
/body
/html逻辑层下
func Index(context *gin.Context) {ret : model.GetVotes()context.HTML(http.StatusOK, index.tmpl, gin.H{vote: ret})
}
加载模板文件传入的.表示ret,即整个查到的vote数据效果展示
数据库 一个简单的投票表名展示就做好了
按照这个思路我们可以设置点击表名查看每个表的具体数据