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
", 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

原文地址:https://www.cnblogs.com/foxcharon/p/8961412.html