Gemini 写的一个简单基于golang的网址导航程序
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
go
package main
import (
"encoding/json"
"fmt"
"io/ioutil"
"log"
"net/http"
"os"
)
// 网站信息结构体
type Website struct {
Name string `json:"name"`
URL string `json:"url"`
Description string `json:"description"`
}
// 网站导航列表
var websites []Website
func main() {
// 加载网站数据
loadWebsites()
// 创建 HTTP 服务器
http.HandleFunc("/", handleIndex)
http.HandleFunc("/add", handleAdd)
http.HandleFunc("/delete", handleDelete)
log.Fatal(http.ListenAndServe(":8080", nil))
}
// 处理主页请求
func handleIndex(w http.ResponseWriter, r *http.Request) {
// 渲染主页模板
data := map[string]interface{}{
"Websites": websites,
}
renderTemplate(w, "index.html", data)
}
// 处理添加网站请求
func handleAdd(w http.ResponseWriter, r *http.Request) {
if r.Method == "POST" {
// 获取表单数据
name := r.FormValue("name")
url := r.FormValue("url")
description := r.FormValue("description")
// 创建新的网站对象
newWebsite := Website{
Name: name,
URL: url,
Description: description,
}
// 添加到列表
websites = append(websites, newWebsite)
// 保存数据
saveWebsites()
// 重定向到主页
http.Redirect(w, r, "/", http.StatusFound)
} else {
renderTemplate(w, "add.html", nil)
}
}
// 处理删除网站请求
func handleDelete(w http.ResponseWriter, r *http.Request) {
if r.Method == "POST" {
// 获取要删除的网站 ID
id := r.FormValue("id")
// 从列表中删除网站
for i, website := range websites {
if website.Name == id {
websites = append(websites[:i], websites[i+1:]...)
break
}
}
// 保存数据
saveWebsites()
// 重定向到主页
http.Redirect(w, r, "/", http.StatusFound)
}
}
// 加载网站数据
func loadWebsites() {
// 从 JSON 文件加载数据
data, err := ioutil.ReadFile("websites.json")
if err != nil {
log.Fatal(err)
}
// 解析 JSON 数据
err = json.Unmarshal(data, &websites)
if err != nil {
log.Fatal(err)
}
}
// 保存网站数据
func saveWebsites() {
// 序列化网站数据为 JSON
data, err := json.MarshalIndent(websites, "", " ")
if err != nil {
log.Fatal(err)
}
// 将 JSON 数据写入文件
err = ioutil.WriteFile("websites.json", data, 0644)
if err != nil {
log.Fatal(err)
}
}
// 渲染模板
func renderTemplate(w http.ResponseWriter, filename string, data interface{}) {
// 加载模板
tmpl, err := ioutil.ReadFile(filename)
if err != nil {
log.Fatal(err)
}
// 渲染模板
err = template.Must(template.New(filename).Parse(string(tmpl))).Execute(w, data)
if err != nil {
log.Fatal(err)
}
}
使用方法:
- 创建一个名为
websites.json
的文件,并添加一些网站信息。以下是一个示例:
Json复制
1
2
3
4
5
6
7
8
9
10
11
12
[
{
"name": "Google",
"url": "https://www.google.com",
"description": "搜索引擎"
},
{
"name": "Facebook",
"url": "https://www.facebook.com",
"description": "社交网络"
}
]
- 运行
go run main.go
命令启动服务器。 - 打开浏览器访问
http://localhost:8080
即可访问网站导航页面。
功能说明:
- 主页: 显示所有网站的列表,包括网站名称、链接和描述。
- 添加网站: 可以添加新的网站到列表中。
- 删除网站: 可以从列表中删除网站。
代码说明:
Website
结构体用于存储网站信息。websites
变量用于存储所有网站信息。loadWebsites()
函数用于从websites.json
文件加载网站数据。saveWebsites()
函数用于将网站数据保存到websites.json
文件。handleIndex()
函数处理主页请求,并渲染index.html
模板。handleAdd()
函数处理添加网站请求,并将新的网站添加到websites
列表中。handleDelete()
函数处理删除网站请求,并从websites
列表中删除网站。renderTemplate()
函数用于渲染模板。
注意:
- 为了运行这个程序,你需要安装 Go 语言开发环境。
- 确保
index.html
、add.html
和websites.json
文件存在于与main.go
文件相同的目录中。 - 你可以根据自己的需求修改代码,例如添加新的功能或修改界面。