
WebGin简单框架-models
Web目录结构
C:. ├─.idea │ └─dictionaries ├─controllers ├─dao │ ├─mysql │ └─redis ├─dist │ └─static │ ├─css │ ├─fonts │ └─js ├─logger ├─logic ├─models ├─pkg │ ├─myJWT │ └─snowflake ├─routers ├─setting └─main.go
1.answer.go
answer.go
package models import "time" type Answer struct { AnswerID uint64 `json:"answer_id,string" db:"answer_id"` AuthorID uint64 `json:"author_id,string" db:"author_id"` QuestionID uint64 `json:"question_id,string" db:"question_id"` Content string `json:"content" db:"content"` VoteUpCount int `json:"vote_up_count" db:"vote_up_count"` Status int8 `json:"status" db:"status"` CreateTime time.Time `json:"create_time" db:"create_time"` UpdateTime time.Time `json:"update_time" db:"update_time"` } type ApiAnswer struct { Answer AuthorName string `json:"author_name" db:"author_name"` } type ApiAnswerList struct { AnswerList []*ApiAnswer `json:"answer_list"` TotalCount int `json:"total_count"` }
2.category.go
category.go
package models /* CREATE TABLE `category` ( `id` int(11) NOT NULL AUTO_INCREMENT, `category_id` int(10) unsigned NOT NULL, `category_name` varchar(128) COLLATE utf8mb4_general_ci NOT NULL, `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `idx_category_id` (`category_id`), UNIQUE KEY `idx_category_name` (`category_name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; */ type Category struct { CategoryID int32 `json:"id" db:"category_id"` CategoryName string `json:"name" db:"category_name"` }
3.question.go
question.go
package models import "time" type Question struct { QuestionID uint64 `json:"question_id,string" db:"question_id"` AuthorID uint64 `json:"author_id,string" db:"author_id"` CategoryID int32 `json:"category_id" db:"category_id"` Status int8 `json:"status" db:"status"` Caption string `json:"caption" db:"caption"` Content string `json:"content" db:"content"` CreateTime time.Time `json:"create_time" db:"create_time"` } type ApiQuestion struct { Question AuthorName string `json:"author_name"` } type ApiQuestionDetail struct { Question AuthorName string `json:"author_name"` CategoryName string `json:"category_name"` } type ApiQuestionList struct { QuestionList []*ApiQuestion `json:"question_list"` TotalCount int `json:"total_count"` }
4.user.go
user.go
package models import ( "encoding/json" "errors" ) // 定义结构体信息 type SignUpForm struct { UserName string `json:"username"` Password string `json:"password"` ConfirmPassword string `json:"confirm_password"` } // UnmarshalJSON SignUpForm类型 自定义JSON反序列化的方法 func (s *SignUpForm) UnmarshalJSON(data []byte) (err error) { required := struct { UserName string `json:"username"` Password string `json:"password"` ConfirmPassword string `json:"confirm_password"` }{} err = json.Unmarshal(data, &required) if err != nil { return } else if len(required.UserName) == 0 { err = errors.New("缺少必填字段username") } else if len(required.Password) == 0 { err = errors.New("缺少必填字段password") } else if required.Password != required.ConfirmPassword { err = errors.New("两次密码不一致") } else { s.UserName = required.UserName s.Password = required.Password s.ConfirmPassword = required.ConfirmPassword } return } type User struct { UserID uint64 `json:"user_id" db:"user_id"` UserName string `json:"username" db:"username"` Password string `json:"password" db:"password"` }