我正在尝试建立一个非常简单的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)