scan函数讲解
我们怎样读取用户从键盘(控制台)输入的数据?输入指从键盘或其它标准输入(os.Stdin)读取数据。最简单的方法是使用fmt包里的Scan-或Sscan-系列函数

scan函数会识别空格左右的内容,哪怕换行符号存在也不会影响scan对内容的获取
scanln函数会识别空格左右的内容,但是一旦遇到换行符就会立即结束,不论后续还是否存在需要带输入的内容。

操作数据库

1.导包并连接

import ( "database/sql" "fmt" _ "github.com/Go-SQL-Driver/MySQL" 

)

db,err := sql.Open("mysql","root:123456@tcp(127.0.0.1:3306)/test?charset=utf8") if err != nil{ 	fmt.Printf("connect mysql fail ! [%s]",err) }else{ 	fmt.Println("connect to mysql success") } 

2.增加

result,err := db.Exec("INSERT INTO person(height,address,head)VALUES (?,?,?)","8","8","8") if err != nil{ 	fmt.Println("insert failed,",err) } userId,err:= result.LastInsertId() rowCount,err:=result.RowsAffected()  //影响行 fmt.Println("user_id:",userId) fmt.Println("rowCount:",rowCount) 

3.查询
// Scan 方法会从输入端读取数据并将处理结果存入接收端,接收端必须是有效的指针。
// Scanln 和 Scan 类似,scan遇到换行当做空格,scanln遇到换行符就停止扫描。

rowsQuery,err := db.Query("SELECT * FROM person WHERE height=7") if err != nil{ 	fmt.Println("select db failed,err:",err) 	return } for rowsQuery.Next() { 	var height int 	var head  string 	var address  string 	err = rowsQuery.Scan(&head,&height,&address)// Scan 方法会从输入端读取数据并将处理结果存入接收端,接收端必须是有效的指针。 	if err != nil { 		fmt.Println(err) 		return 	} 	fmt.Println(height,address,head) } rowsQuery.Close() } 

4删除

rowsDelete,err:=db.Exec("DELETE FROM person WHERE height=3") 

5改

rowsUpdate,err:=db.Exec("UPDATE person SET address=0 WHERE height=7") 

代码附录

	package main  	import ( 	"database/sql" 	"fmt" 	_ "github.com/Go-SQL-Driver/MySQL" ) 		func main()  { 	/*	db,err :=sql.Open("mysql","root:123456@tcp(127.0.0.1:3306)/person?charset=utf8")*/ 		db,err := sql.Open("mysql","root:123456@tcp(127.0.0.1:3306)/test?charset=utf8") 		if err != nil{ 			fmt.Printf("connect mysql fail ! [%s]",err) 		}else{ 			fmt.Println("connect to mysql success") 		} 		/*result,err := db.Exec("INSERT INTO person(height,address,head)VALUES (?,?,?)","8","8","8") 		if err != nil{ 			fmt.Println("insert failed,",err) 		} 		userId,err:= result.LastInsertId() 		rowCount,err:=result.RowsAffected() 		fmt.Println("user_id:",userId) 		fmt.Println("rowCount:",rowCount)*/ 	 	 	 		/*rowsQuery,err := db.Query("SELECT * FROM person WHERE height=7") 		if err != nil{ 			fmt.Println("select db failed,err:",err) 			return 		} 		for rowsQuery.Next() { 			var height int 			var head  string 			var address  string 			err = rowsQuery.Scan(&head,&height,&address) 			if err != nil { 				fmt.Println(err) 				return 			} 			fmt.Println(height,address,head) 		} 		rowsQuery.Close()*/ 	 	/*	rowsDelete,err:=db.Exec("DELETE FROM person WHERE height=3") 	 		fmt.Println(rowsDelete.LastInsertId())*/ 	 		rowsUpdate,err:=db.Exec("UPDATE person SET address=0 WHERE height=7") 		fmt.Print( 			rowsUpdate.LastInsertId()) 	} 

postman发送POST请求往数据库增加数据
mysql.go

	import ( "database/sql" "log" _ "github.com/Go-SQL-Driver/MySQL" )  type User struct { 	Id       int    `json:"id" form:"id"` 	Username string `json:"username" form:"username"` 	Password string `json:"password" form:"password"` }  func DBConn()(db *sql.DB) { 	dbDriver := "mysql" 	dbUser := "root" 	dbPass := "123456" 	dbName := "test" 	db, err := sql.Open(dbDriver, dbUser+":"+dbPass+"@/"+dbName) 	if err != nil { panic(err.Error()) } 	return db } 		func add(user User) (Id int, err error) {  	//1.操作数据库 	db:=DBConn() 	//推迟数据库连接的关闭 	defer db.Close() 	stmt, err := db.Prepare("INSERT INTO person(id,username, password) VALUES (?,?, ?)") 	if err //将id类型转换 		Id = int(id) 		defer stmt.Close() 		return 

main.go

router.POST("/add", func(c *gin.Context) { 	var  u User 	err := c.Bind(&u) 	if err != nil { 		log.Fatal(err) 	} 	Id, err := add(u) 	fmt.Print("id=", Id) 	c.JSON(http.StatusOK, gin.H{ 		"message": fmt.Sprintf("%s 插入成功", u.Username), 	}) }) 

Go增删改查 ——mysql