Gemini 写的一个简单基于golang的网址导航程序

Saturday, Aug 31, 2024 | 2 minute read | Updated at Saturday, Aug 31, 2024

@

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)
	}
}

使用方法:

  1. 创建一个名为 websites.json 的文件,并添加一些网站信息。以下是一个示例:

Json 复制

[
  {
    "name": "Google",
    "url": "https://www.google.com",
    "description": "搜索引擎"
  },
  {
    "name": "Facebook",
    "url": "https://www.facebook.com",
    "description": "社交网络"
  }
]
  1. 运行 go run main.go 命令启动服务器。
  2. 打开浏览器访问 http://localhost:8080 即可访问网站导航页面。

功能说明:

  • 主页: 显示所有网站的列表,包括网站名称、链接和描述。
  • 添加网站: 可以添加新的网站到列表中。
  • 删除网站: 可以从列表中删除网站。

代码说明:

  • Website 结构体用于存储网站信息。
  • websites 变量用于存储所有网站信息。
  • loadWebsites() 函数用于从 websites.json 文件加载网站数据。
  • saveWebsites() 函数用于将网站数据保存到 websites.json 文件。
  • handleIndex() 函数处理主页请求,并渲染 index.html 模板。
  • handleAdd() 函数处理添加网站请求,并将新的网站添加到 websites 列表中。
  • handleDelete() 函数处理删除网站请求,并从 websites 列表中删除网站。
  • renderTemplate() 函数用于渲染模板。

注意:

  • 为了运行这个程序,你需要安装 Go 语言开发环境。
  • 确保 index.htmladd.htmlwebsites.json 文件存在于与 main.go 文件相同的目录中。
  • 你可以根据自己的需求修改代码,例如添加新的功能或修改界面。

© 2018 - 2026 vpslala

🌱 Powered by Hugo with theme Dream.