|  | package main | 
|  |  | 
|  | import ( | 
|  | "flag" | 
|  | "log" | 
|  | "net/http" | 
|  | "text/template" | 
|  | ) | 
|  |  | 
|  | var addr = flag.String("addr", ":1718", "http service address") // Q=17, R=18 | 
|  |  | 
|  | var templ = template.Must(template.New("qr").Parse(templateStr)) | 
|  |  | 
|  | func main() { | 
|  | flag.Parse() | 
|  | http.Handle("/", http.HandlerFunc(QR)) | 
|  | err := http.ListenAndServe(*addr, nil) | 
|  | if err != nil { | 
|  | log.Fatal("ListenAndServe:", err) | 
|  | } | 
|  | } | 
|  |  | 
|  | func QR(w http.ResponseWriter, req *http.Request) { | 
|  | templ.Execute(w, req.FormValue("s")) | 
|  | } | 
|  |  | 
|  | const templateStr = ` | 
|  | <html> | 
|  | <head> | 
|  | <title>QR Link Generator</title> | 
|  | </head> | 
|  | <body> | 
|  | {{if .}} | 
|  | <img src="http://chart.apis.google.com/chart?chs=300x300&cht=qr&choe=UTF-8&chl={{urlquery .}}" /> | 
|  | <br> | 
|  | {{html .}} | 
|  | <br> | 
|  | <br> | 
|  | {{end}} | 
|  | <form action="/" name=f method="GET"><input maxLength=1024 size=70 | 
|  | name=s value="" title="Text to QR Encode"><input type=submit | 
|  | value="Show QR" name=qr> | 
|  | </form> | 
|  | </body> | 
|  | </html> | 
|  | ` |