go : 连接数据库并插入数据
package main import ( "database/sql" "fmt" "log" "net/http" "reflect" "strings" _ "github.com/go-sql-driver/mysql" ) func sayhelloName(w http.ResponseWriter, r *http.Request) { r.ParseForm() //解析参数,默认是不会解析的 fmt.Println(r.Form) //这些信息是输出到服务器端的打印信息 fmt.Println("path", r.URL.Path) fmt.Println("scheme", r.URL.Scheme) fmt.Println(r.Form["url_long"]) fmt.Println("type:", reflect.TypeOf(r)) // printData(r) fmt.Fprintf(w, "Hello astaxie!") //这个写入到w的是输出到客户端的 var ret int ret = max(1, 2) fmt.Printf("最大值是 : %d\n", ret) dbFun(r) } func main() { http.HandleFunc("/hello", sayhelloName) //设置访问的路由 err := http.ListenAndServe(":9091", nil) //设置监听的端口 if err != nil { log.Fatal("ListenAndServe: ", err) } } func max(num1, num2 int) int { /* 定义局部变量 */ var result int if num1 > num2 { result = num1 } else { result = num2 } return result } func printData(a *http.Request) { // fmt.Println("num", a) var str string fmt.Println(a.Form) fmt.Println(a.Form["name"]) str = string(a.Form["name"][0]) fmt.Println(str) for k, v := range a.Form { fmt.Println("key:", k) fmt.Println("val:", strings.Join(v, "")) } } func dbFun(a *http.Request) { fmt.Println("===database===") //初始化数据库信息,此时就是一个数据库连接池 db, err := sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/test?charset=utf8") fmt.Println("type2:", reflect.TypeOf(db)) IsErr(err) //封装SQL指令 stmt, err := db.Prepare("INSERT hello SET name=?,age=?") IsErr(err) //执行影响指令 var balance [2]string balance[0] = a.Form["name"][0] balance[1] = a.Form["age"][0] result, err := stmt.Exec(balance[0], balance[1]) IsErr(err) fmt.Print(result.RowsAffected()) defer stmt.Close() defer db.Close() } func IsErr(err error) { if err != nil { fmt.Println("程晗错误:%s", err) } }
然后浏览器访问 http://localhost:9091/hello ,就可以插入数据了。
比如用Postman提交数据:
关于数据类型:
*http.Request 的数据类型就是 *http.Request(指针),直接照着传过去就行了。
为什么是a.Form["name"][0]?
因为post传上来的数据的结构是这样的:
参考:
https://studygolang.com/articles/5269
https://www.cnblogs.com/zhja/p/5604553.html
posted on 2018-04-27 11:09 fox_charon 阅读(974) 评论(0) 编辑 收藏 举报