我需要go语言代码来编写两个静态Dashboard页面,并能够对mysql数据库中的contain表进行增删改查。第一个页面中能够输入user表的用户id,用户名,密码,然后跳转到第二个页面,展示用户id所对应的contain表中所有匹配的contain的contain的id,contain是否在运行,最后一次更新的时间,所需要的镜像id,占用的cpu核数,占用内存大小及暴露的端口号的信息并能够对记录进行增删改查。
时间: 2024-03-27 18:40:31 浏览: 52
Bitcoin_Dashboard-master,c#操作mysql数据库源码,c#
好的,以下是一个简单的Go语言代码示例,实现了您所描述的两个静态Dashboard页面,并对MySQL数据库中的contain表进行增删改查操作。请注意,该示例代码仅供参考,您需要根据实际情况进行修改。
```go
package main
import (
"database/sql"
"fmt"
"html/template"
"log"
"net/http"
_ "github.com/go-sql-driver/mysql"
)
// 数据库配置信息
const (
dbHost = "localhost"
dbPort = 3306
dbUser = "root"
dbPassword = "password"
dbName = "test"
)
// Contain 结构体,对应 contain 表中的一条记录
type Contain struct {
ID int
IsRunning bool
LastUpdated string
ImageID string
CpuCores int
MemorySize int
Port int
}
// 用户信息表单
type UserForm struct {
UserID int
UserName string
Password string
}
// 首页,展示用户信息表单
func indexHandler(w http.ResponseWriter, r *http.Request) {
tmpl, err := template.ParseFiles("index.html")
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
tmpl.Execute(w, nil)
}
// 处理用户信息表单提交请求,跳转到 contain 表信息展示页面
func userHandler(w http.ResponseWriter, r *http.Request) {
// 从表单中获取用户信息
userID := r.FormValue("userID")
userName := r.FormValue("userName")
password := r.FormValue("password")
userForm := UserForm{
UserID: userID,
UserName: userName,
Password: password,
}
// 查询 contain 表中与用户 ID 匹配的记录
db, err := sql.Open("mysql", fmt.Sprintf("%s:%s@tcp(%s:%d)/%s", dbUser, dbPassword, dbHost, dbPort, dbName))
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
defer db.Close()
rows, err := db.Query("SELECT id, is_running, last_updated, image_id, cpu_cores, memory_size, port FROM contain WHERE user_id = ?", userID)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
defer rows.Close()
contains := []Contain{}
for rows.Next() {
var contain Contain
err := rows.Scan(&contain.ID, &contain.IsRunning, &contain.LastUpdated, &contain.ImageID, &contain.CpuCores, &contain.MemorySize, &contain.Port)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
contains = append(contains, contain)
}
// 渲染 contain 表信息展示页面
tmpl, err := template.ParseFiles("contain.html")
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
tmpl.Execute(w, struct {
UserForm UserForm
Contains []Contain
}{
UserForm: userForm,
Contains: contains,
})
}
// 处理 contain 表信息展示页面的增删改查请求
func containHandler(w http.ResponseWriter, r *http.Request) {
// 解析请求参数
action := r.FormValue("action")
containID := r.FormValue("containID")
imageID := r.FormValue("imageID")
cpuCores := r.FormValue("cpuCores")
memorySize := r.FormValue("memorySize")
port := r.FormValue("port")
// 执行增删改查操作
db, err := sql.Open("mysql", fmt.Sprintf("%s:%s@tcp(%s:%d)/%s", dbUser, dbPassword, dbHost, dbPort, dbName))
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
defer db.Close()
switch action {
case "create":
userID := r.FormValue("userID")
_, err := db.Exec("INSERT INTO contain (user_id, image_id, cpu_cores, memory_size, port) VALUES (?, ?, ?, ?, ?)", userID, imageID, cpuCores, memorySize, port)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
case "update":
_, err := db.Exec("UPDATE contain SET image_id = ?, cpu_cores = ?, memory_size = ?, port = ? WHERE id = ?", imageID, cpuCores, memorySize, port, containID)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
case "delete":
_, err := db.Exec("DELETE FROM contain WHERE id = ?", containID)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
}
// 重定向到 contain 表信息展示页面
http.Redirect(w, r, "/contain?userID="+r.FormValue("userID"), http.StatusSeeOther)
}
func main() {
// 注册路由处理函数
http.HandleFunc("/", indexHandler)
http.HandleFunc("/user", userHandler)
http.HandleFunc("/contain", containHandler)
// 启动 Web 服务器
log.Fatal(http.ListenAndServe(":8080", nil))
}
```
在上述代码中,`index.html` 和 `contain.html` 分别对应于第一个页面和第二个页面的 HTML 模板。您需要根据实际情况编写这两个模板文件,并放置在代码所在目录中。
此外,上述代码中使用了 Go 语言的标准库 `database/sql` 和 `net/http`,以及第三方库 `github.com/go-sql-driver/mysql`。请确保这些库已经正确安装和导入。
阅读全文