2012-09-20 6 views
9

ユーザーがサイトにアクセスし、文字列とintを書き込む非常に単純なWebサーバーを設定しようとしています。 2つの入力、私のアイデアは、ブラウザにも表示することができるテキストファイルにそれを行うことでした:.../textfile/HTMLフォームから入力を読み込んでファイルに保存する方法 - Golang

どのくらいのコードがOKであるかはわかりません

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) 

} 

そして、私のHTMLフォームを:ポストが、ここでは、私がこれまで持っているものである(すべての整形なし)

 Name: <input type="text" name="Name"> 
     <input type="submit" value="submit"></br> 
    Hours: <input type="text" name="Hours"> 
      <input type="submit" value="submit"> 

私の最初の考えはreturnInput()とsaveInput()の2つの関数を実装することでしたが、使い易い関数が組み込まれているのでしょうか?

誰かが私が非常に幸せになるよりもHTMLフォームからの入力を保存する方法について正しい方向で私を指すことができたら!前もって感謝します。

答えて

13

ファイルに書き込むためにフォーマットを選択する必要があります。 JSONを特に理由なく選択しましょう。以下のようなので、フォーム与えられた:あなたは次のハンドラに

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

感謝を持っている可能性が

<form action="/save" method="post"> ... </form> 

、それは本当に便利でした。私はFormValueで試していましたが、プログラミングに新しくなって以来、私はエンコーディングについて少し懐疑的でした。しかし、あなたは私にそれを非常に明確にしました。 – miner

+1

確かに、エンコードのpkg docsをチェックアウトしてください。http://golang.org/pkg/encoding/ たとえば、エンコード/バイナリpkgを使用してraw構造体を読み書きすることができます。 JSONは何かを説明し、結果を簡単に検査するための素晴らしい中間地です。 – dskinner

関連する問題