Gemini 写的一个简单基于golang的网址导航程序
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 复制
[
{
"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文件相同的目录中。 - 你可以根据自己的需求修改代码,例如添加新的功能或修改界面。