如何从HTML表单中读取输入并将其保存在文件中 - Golang

min*_*ner 9 forms go

我正在尝试建立一个非常简单的Web服务器,用户访问一个站点并写一个字符串和一个int.然后我想保存这两个输入,我的想法是将它做成一个文本文件,也可以显示在浏览器:.../textfile /

我不知道SO上的标准是关于可以发布多少代码的规范,但这是我到目前为止的内容:

type Person struct {
    name  string
    hours int
}

const filename string = "timelister"

func upload(w http.ResponseWriter, r *http.Request) {
    t, _ := template.ParseFiles("upload.html")
    t.Execute(w, nil)
}

func (person *Person) open() {
    newFilename := filename + ".txt"
    _, err := os.OpenFile(newFilename, os.O_RDWR|os.O_APPEND|os.O_CREATE, 0666)
    if err != nil {
        log.Fatal("Open Filename: ", err)
    }
}

func returnInput() //want to implement this
func saveInput() //want to implemet this


func main() {
    http.HandleFunc("/", upload)
    http.ListenAndServe(":8080", nil)

}
Run Code Online (Sandbox Code Playgroud)

我的HTML表单:(没有全部格式化)

     Name: <input type="text" name="Name">
        <input type="submit" value="submit"></br>
     Hours: <input type="text" name="Hours">
            <input type="submit" value="submit">
Run Code Online (Sandbox Code Playgroud)

所以我最初的想法是实现两个函数returnInput()和saveInput()但是可能有更容易使用的函数内置的som?

如果有人能指出我如何从HTML表单保存输入的正确方向,那么我会非常感激!提前致谢.

dsk*_*ner 13

您需要选择要写入文件的格式.让我们毫无理由地选择JSON.所以给出了一个形式:

<form action="/save" method="post"> ... </form>
Run Code Online (Sandbox Code Playgroud)

你可以拥有以下处理程序

import (
    "strconv"
    "http"
    "os"
    "encoding/json"
)

type Data struct {
    Name string
    Hours int
}

func save(w http.ResponseWriter, r *http.Request) {
    name := r.FormValue("Name")
    hours, err := strconv.Atoi(r.FormValue("Hours"))
    if err != nil {
        http.Error(w, err.Error(), 500)
        return
    }

    data := &Data{name, hours}

    b, err := json.Marshal(data)
    if err != nil {
        http.Error(w, err.Error(), 500)
        return
    }

    f, err := os.Open("somefile.json")
    if err != nil {
        http.Error(w, err.Error(), 500)
        return
    }

    f.Write(b)
    f.Close()
}

func init() {
    http.HandleFunc("/save", save)
}
Run Code Online (Sandbox Code Playgroud)