0001 package main 0002 0003 import ( 0004 "log" 0005 "net/http" 0006 ) 0007 0008 var HTDOCS_DIR = "/var/www/html" 0009 0010 func main() { 0011 http.Handle("/", http.FileServer(http.Dir(HTDOCS_DIR))) 0012 http.HandleFunc("/search", formSearchHandler) 0013 0014 // func ListenAndServe(addr string, handler Handler) error 0015 err := http.ListenAndServe(":8080", nil) 0016 if err != nil { 0017 log.Fatal(err) 0018 } 0019 } 0020 package main 0021 0022 import ( 0023 "fmt" 0024 "net/http" 0025 ) 0026 0027 func formSearchHandler(w http.ResponseWriter, r *http.Request) { 0028 // func (r *Request) FormValue(key string) string 0029 key := r.FormValue("key") 0030 if len(key) > 0 { 0031 fmt.Fprintf(w, "%s\n", sql_query(key)) 0032 } else { 0033 fmt.Fprintf(w, "no query\n") 0034 } 0035 } 0036 package main 0037 0038 import ( 0039 "fmt" 0040 0041 "database/sql" 0042 _ "github.com/go-sql-driver/mysql" 0043 ) 0044 0045 func sql_query(key string) string { 0046 db, err := sql.Open("mysql", "root:1qaz2wsx@(mysql:3306)/test") 0047 if err != nil { 0048 fmt.Println(err) 0049 return err.Error() 0050 } 0051 defer db.Close() 0052 0053 // ping: check if mysql is alive or not 0054 err = db.Ping() 0055 if err != nil { 0056 fmt.Println(err) 0057 return err.Error() 0058 } 0059 0060 // query> select ... 0061 query := fmt.Sprintf("SELECT name,price FROM shop_menu WHERE name='%s';", key) 0062 rows, err := db.Query(query) 0063 if err != nil { 0064 fmt.Println(err) 0065 return err.Error() 0066 } 0067 0068 var name string 0069 var price int 0070 var r string 0071 for rows.Next() { 0072 err := rows.Scan(&name, &price) 0073 if err != nil { 0074 fmt.Println(err) 0075 } else { 0076 if price > 0 { 0077 r = fmt.Sprintf("%s\t=>\t%d\n", name, price) 0078 } 0079 } 0080 } 0081 0082 if len(r) == 0 { 0083 r = fmt.Sprintf("sorry, not selling %s\n", key) 0084 } 0085 0086 return r 0087 }