gin投票系統2

投票系統

數據庫的建立

先分析需求,在sql中建立數據庫,關于項目數據庫如何建立可以在“goweb項目創建流程分析中看如何去建表”

成功后目前有四個表:

vote,user,vote_opt,vote_opt_user

image-20231120163637699

建立數據庫,可以使用網上的sql轉gorm網站,把建表語句直接轉換成結構體,

放在model下的model.go文件下,作為全部數據庫存放處

package modelimport "database/sql"//這里存放各種gorm建表語句type VoteOptUser struct {Id         sql.NullInt64  `gorm:"column:id;primary_key;AUTO_INCREMENT"`UserId     sql.NullInt64  `gorm:"column:user_id"`VoteId     sql.NullInt64  `gorm:"column:vote_id"`VoteOptId  sql.NullInt64  `gorm:"column:vote_opt_id"`CreateTime sql.NullString `gorm:"column:create_time"`UpdateTime 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_INCREMENT"`Name        sql.NullString `gorm:"column:name"`VoteId      sql.NullInt64  `gorm:"column:vote_id"`Count       sql.NullInt32  `gorm:"column:count"`CreatedTime sql.NullString `gorm:"column:created_time"`UpdateTime  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_INCREMENT"`Title       sql.NullString `gorm:"column:title"`Type        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_INCREMENT"`Name        sql.NullString `gorm:"column:name"`Password    sql.NullString `gorm:"column:password"`CreatedTime sql.NullString `gorm:"column:created_time"`UpdateTime  sql.NullString `gorm:"column:update_time"`
}func (u *User) TableName() string {return "user"
}

建立完成,可以先測試是否成功

image-20231120164752983

測試:

在model中建立:vote,model_test文件,測試數據庫是否連接成功,能否查出數據

//model_text測試文件:
package model
import ("fmt""testing"
)
func TestGetVotes(t *testing.T) { //該方法測試vote是否生效NewMysql() //連接數據庫//測試用例r := GetVotes() //查詢方法fmt.Printf("ret:%+v", r)//%+v 是一個格式化占位符,表示以“擴展”格式輸出變量的值。對于結構體(struct)類型的變量,%+v 會輸出字段名和字段值。//和%v區別:通用的格式化占位符,根據變量的實際類型進行格式化輸出。對于結構體,它會輸出字段的值,但不會包括字段名。Close()
}
//vote文件:其實和user文件中方法基本一致,都是封裝查表方法
package modelimport "fmt"func 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中加入數據:

image-20231120165210734

再在test方法中測試:輸出

外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳

(后邊沒截完)

因為ret是切片類型,所以能同時查多條記錄,測試完成,可以寫邏輯層和router層代碼啦!!!

將所有表名展示到網頁上

首先先試試把vote的Title展示到頁面上:

將index.tmpl代碼改為:

寫模板文件
<!doctype html>
<html lang="en">
<head><title>香香編程-投票項目</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數據

效果展示:

數據庫

image-20231120174403074

一個簡單的投票表名展示就做好了,

按照這個思路,我們可以設置點擊表名,查看每個表的具體數據

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/212297.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/212297.shtml
英文地址,請注明出處:http://en.pswp.cn/news/212297.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Flink基本轉換算子map/filter/flatmap

map map是大家非常熟悉的大數據操作算子&#xff0c;主要用于將數據流中的數據進行轉換&#xff0c;形成新的數據流。簡單來說&#xff0c;就是一個“一一映射”&#xff0c;消費一個元素就產出一個元素。 我們只需要基于DataStream調用map()方法就可以進行轉換處理。方法需要…

案例026:基于微信小程序的原創音樂系統的設計與實現

文末獲取源碼 開發語言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 數據庫&#xff1a;mysql 5.7 開發軟件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序開發軟件&#xff1a;HBuilder X 小程序…

什么是Restful?

Rest簡介 REST是英文representational state transfer(表象性狀態轉變)或者表述性狀態轉移。Rest是web服務的一種架構風格。使用HTTP,URI,XML,JSON,HTML等廣泛流行的標準和協議。輕量級,跨平臺,跨語言的架構設計。它是一種設計風格,不是一種標準,是一種思想。 Rest架構的主要…

java程序定時器

目錄 1.java定時器原生方法 1.java定時器原生方法 實現每天早上8點執行任務的示例代碼 import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit;public class TimeTest{pub…

汽車網絡安全--關于UN R155認證的思考

1.UN R155概述 2020年6月25日,聯合國頒布了全球首個汽車網絡安全強制性法規 -- UN 155,詳細規定了關于評估網絡安全措施的審核條款、制造商和供應商降低網絡安全風險的方法以及實施風險評估的義務等。 法規適用于與信息安全相關的M類(4輪及以上載客汽車)、N類(四輪載貨汽車)…

SpringBoot項目連接Graylog

直接用logback將控制臺輸出的日志發送到graylog上 1.導入logback依賴 <dependency> <groupId>de.siegmar</groupId> <artifactId>logback-gelf</artifactId> <version>1.1.0</version> </dependency> 2.創建logback-spring.x…

淺談低代碼

低代碼開發是近年來迅速崛起的軟件開發方法&#xff0c;讓編寫應用程序變得更快、更簡單。有人說它是美味的膳食&#xff0c;讓開發過程高效而滿足&#xff0c;但也有人質疑它是垃圾食品&#xff0c;缺乏定制性與深度。你認為低代碼到底是美以下方向僅供參考。味的膳食還是垃圾…

SpringBoot - 四種常見定時器

常見實現方案 Scheduled注解&#xff1a;基于注解Timer().schedule創建任務&#xff1a;基于封裝類Timer線程&#xff1a;使用線程直接執行任務即可&#xff0c;可以與thread、線程池、ScheduleTask等配合使用quartz配置定時器&#xff1a;基于spring的quartz框架 Scheduled注…

golang學習筆記——編寫最簡單的命令行工具

編寫最簡單的命令行工具 用戶輸入bufio 使用go語言編寫最簡單的命令行工具 mkdir hello-cli-demo cd hello-cli-demo # 查看環境變量 go envgo mod初始化 go mod init gitcode.com/m打開vscode&#xff0c;創建main.go package mainimport ("fmt""bufio&qu…

RK3568 CIF和ISP的關聯

1. 引言 在本文檔中&#xff0c;我們將介紹RK3568芯片的CIF&#xff08;Camera Interface&#xff09;和ISP&#xff08;Image Signal Processor&#xff09;模塊。這兩個模塊是RK3568芯片的關鍵組成部分&#xff0c;用于圖像采集和處理。 CIF是一個標準接口&#xff0c;用于…

快速測試 3節點的redis sentinel集群宕機2個節點以后是否仍能正常使用

有同事問我&#xff0c;三個redis sentinel節點&#xff0c;宕機兩個節點以后&#xff0c;是否還能夠正常的通過redis sentinel正常訪問redis的數據。我想了想&#xff0c;理論上是可以的&#xff0c;但是我沒試過&#xff0c;今天有時間就測試了一下。搭建環境和測試代碼的過程…

Java并發(十七)----變量的線程安全分析

1、成員變量和靜態變量是否線程安全 如果它們沒有共享&#xff0c;則線程安全 如果它們被共享了&#xff0c;根據它們的狀態是否能夠改變&#xff0c;又分兩種情況 如果只有讀操作&#xff0c;則線程安全 如果有讀寫操作&#xff0c;則這段代碼是臨界區&#xff0c;需要考慮線…

深入了解Python pydash庫

更多資料獲取 &#x1f4da; 個人網站&#xff1a;ipengtao.com 在數據處理和分析領域&#xff0c;Python一直是一種強大的編程語言。然而&#xff0c;在處理大規模數據集和執行復雜操作時&#xff0c;有時候需要更高效的工具。在本文中&#xff0c;我們將深入探討pydash庫&am…

語義分割 簡介及數據集簡介

參考文章 MS COCO數據集介紹以及pycocotools簡單使用-CSDN博客

[MySQL--進階篇]存儲引擎的體系結構、簡介、特點、選擇

前言 ?Hello!這里是歐_aita的博客。 ?今日語錄&#xff1a;不要在乎別人怎么看你&#xff0c;因為他們根本就沒有時間&#xff0c;他們只關心他們自己。 ?個人主頁&#xff1a;歐_aita ψ(._. )>?個人專欄&#xff1a; 數據結構與算法 MySQL數據庫 存儲引擎 前言MySQL體…

代碼隨想錄算法訓練營第四十一天|343. 整數拆分、96.不同的二叉搜索樹

代碼隨想錄算法訓練營第四十一天|343. 整數拆分、96.不同的二叉搜索樹 整數拆分 343. 整數拆分 文章講解&#xff1a;https://programmercarl.com/0343.%E6%95%B4%E6%95%B0%E6%8B%86%E5%88%86.html 題目鏈接&#xff1a;https://leetcode.cn/problems/integer-break/ 視頻講解…

李宏毅gpt個人記錄

參考&#xff1a; 李宏毅機器學習--self-supervised&#xff1a;BERT、GPT、Auto-encoder-CSDN博客 用無標注資料的任務訓練完模型以后&#xff0c;它本身沒有什么用&#xff0c;GPT 1只能夠把一句話補完&#xff0c;可以把 Self-Supervised Learning 的 Model做微微的調整&am…

32.768KHz時鐘RTC晶振精度PPM值及頻差計算

一個數字電路就像一所城市的交通&#xff0c;晶振的作用就是十字路口的信號燈&#xff0c;因此晶振的品質及其電路應用尤其關鍵。數字電路又像生命體&#xff0c;它的運行就像人身體里的血液流通&#xff0c;它不是由單一的某個器件或器件單元構成&#xff0c;而是由多個器件及…

【Spring Boot 源碼學習】ApplicationListener 詳解

Spring Boot 源碼學習系列 ApplicationListener 詳解 引言往期內容主要內容1. 初識 ApplicationListener2. 加載 ApplicationListener3. 響應應用程序事件 總結 引言 書接前文《初識 SpringApplication》&#xff0c;我們從 Spring Boot 的啟動類 SpringApplication 上入手&am…

如何查詢川菜食材配料的API接口

在當今的美食文化中&#xff0c;菜譜不只是一張簡單的食譜&#xff0c;更是了解美食文化和飲食知識的重要途徑。然而&#xff0c;若沒有準確的食材配料&#xff0c;烹制出的每道菜品都將難以達到完美的味道。因此&#xff0c;為了更好地滿足人們對于菜譜和食譜的需求&#xff0…