go语言学习第八天==》mysql数据库增删改查、用go语言 客户端(client)发起htttp get请求,post请求,postForm请求,Head请求,Do请求
go语言学习第八天==》mysql数据库增删改查、用go语言写 客户端(client)发起htttp get请求,post请求,postForm请求,Head请求,Do请求
- 引包
import的作用是引包,当引入包时,该包下文件的所有init()函数都会被执行,并且可以使用该包下的所有函数
当使用"_"符号时表示只执行包内init()函数 不引入包名内的其他函数
import ("database/sql"//注意看如上对"_"符号的描述_ "github.com/go-sql-driver/mysql"
)
- 连接数据库函数
注:open在执行时只设置连接参数,没有真正连接数据库
只在实际操作时才真正连接数据库
sql.open(驱动名,数据源dsn)(*DB,err)
//即(其中[]内表示可选)
sql.open(驱动名,“用户名:密码@[连接方式](主机:端口号)/数据库名[?参数=值]”)
//举列
db,err:=sql.open("mysql","root:tiger@(127.0.0.1:3306)/test")
查询:
rows, _ := db.Query("select * from ...");
查询单行
rows, _ := db.QueryRow("select * from ...");
曾删改
rows,_:=db.Exec(...)
预处理语句
stmt,_:=db.Prepare("select * from userinfo where username=?")
demo:
使用预处理语句的增删改查
package mainimport ("database/sql"_ "github.com/go-sql-driver/mysql""fmt"
)//定义结构体用于存储查询到的行数据信息
type userinfo struct{Id int16Username string Age int16
}func main(){//设置连接参数db,_:=sql.Open("mysql","root:tiger@(127.0.0.1:3306)/test")defer db.Close()var uu userinfousername:="aaa"///查询stmt,_:=db.Prepare("select * from userinfo where username=?")rows,_:=stmt.Query(username)for rows.Next(){//Scan里面的参数个数必须和查询得到的行内数据个数一致//比如rows.Scan(&uu.Id,&uu.Username)将取不到值rows.Scan(&uu.Id,&uu.Username,&uu.Age)fmt.Println(uu.Id,uu.Username,uu.Age)}/ 增加// 上面定义过stmt所以不用:=stmt,_=db.Prepare("insert into userinfo values(?,?,?)")uu.Id=98uu.Username="block"uu.Age=98ret,_:=stmt.Exec(uu.Id,uu.Username,uu.Age)//获取影响的行数ins_nums,_:=ret.RowsAffected()fmt.Println("增加数据影响行数",ins_nums)//删除stmt,_=db.Prepare("delete from userinfo where username=?")uu.Username="block"//上面定义过ret所以不用:=ret,_=stmt.Exec(uu.Username)ins_nums,_=ret.RowsAffected()fmt.Println("删除数据影响行数",ins_nums)//修改stmt,_=db.Prepare("update userinfo set age=? where username=?")uu.Username="ttt"uu.Age=999ret,_=stmt.Exec(uu.Age,uu.Username)ins_nums,_=ret.RowsAffected()fmt.Println("修改数据影响行数",ins_nums)///批量增加stmt,_=db.Prepare("insert into userinfo values(?,?,?)")/*u1:=userinfo{Id: 6,Username: "kkk",Age: 777,}u2:=userinfo{7,"kkk",777,}us:=[2]userinfo{u1,u2}*///或者这样初始化us:=[2]userinfo{{66,"kkk",777,},{77,"kkk",777,},}for _,u :=range us{ret,_=stmt.Exec(u.Id,u.Username,u.Age)ins_nums,_=ret.RowsAffected()fmt.Println("增加数据影响行数",ins_nums)}}
- 发起http请求
1发起http的get请求
原型
func (c *Client) Get(url string) (r *Response, err error)
package main
import (
"io/ioutil"
"fmt"
"net/http"
"log"
"encoding/json"
)
func main(){ resp, err := http.Get("http://127.0.0.1:8888/test") if err != nil { log.Fatal(err) } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) if err != nil { log.Fatal(err) } /////如果返回为json数据则可以进行json解析//这里解析为mapmyMap := make(map[string]interface{})// json.Unmarshal([]byte(jsonBuf), &m1)json.Unmarshal(body, &myMap)fmt.Println(myMap)fmt.Println(string(body))
}
2发起post请求
原型
参数为:请求地址、将要 POST 数据的资源类型(MIMEType)、数据的比特流([]byte形式)
func (c *Client) Post(url string, bodyType string, body io.Reader) (r *Response, err error)
//第二个参数要设置成”application/x-www-form-urlencoded”,
//否则post参数无法传递
package main
import (
"io/ioutil"
"fmt"
"net/http"
"log"
"encoding/json"
"strings"
)
func main(){ //第二个参数要设置成”application/x-www-form-urlencoded”,//否则post参数无法传递//传图片使用//resp, err := http.Post("http://example.com/upload", "image/jpeg", &imageDataBuf) resp, err := http.Post("http://127.0.0.1:8888/test","application/x-www-form-urlencoded",strings.NewReader("qqq=aaa")) if err != nil { log.Fatal(err) } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) if err != nil { log.Fatal(err) } /////如果返回为json数据则可以进行json解析//这里解析为mapmyMap := make(map[string]interface{})// json.Unmarshal([]byte(jsonBuf), &m1)json.Unmarshal(body, &myMap)fmt.Println(myMap)fmt.Println(string(body))
}
3发起 PostForm(也属于post请求)
原型
参数:地址、请求参数
不用指定application/x-www-form-urlencoded
func (c *Client) PostForm(url string, data url.Values) (r *Response, err error)
package main
import (
"io/ioutil"
"fmt"
"net/http"
"log"
"encoding/json"
"net/url"
)
func main(){ resp, err := http.PostForm("http://127.0.0.1:8888/test",url.Values{"key1": {"Value1"}, "key2": {"value2"}}) if err != nil { log.Fatal(err) } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) if err != nil { log.Fatal(err) } /////如果返回为json数据则可以进行json解析//这里解析为mapmyMap := make(map[string]interface{})// json.Unmarshal([]byte(jsonBuf), &m1)json.Unmarshal(body, &myMap)fmt.Println(myMap)fmt.Println(string(body))
}
4发起Head请求
原型
只有一个参数,就不剧烈了
func (c *Client) Head(url string) (r *Response, err error)
5发起do请求
原型
如果要发起的请求需要设置头参数,cookie之类的数据就用此方法
参数:设置好的请求参数
func (c *Client) Do(req *Request) (resp *Response, err error)
demo
package main
import (
"io/ioutil"
"fmt"
"net/http""encoding/json"
"strings"
)
func main(){ client := &http.Client{}////设置一系列请求参数req, err := http.NewRequest("POST", "http://127.0.0.1:8888/test", strings.NewReader("aaa=bbb"))if err != nil {// 错误处理}//设置请求类型为参数req.Header.Set("Content-Type", "application/x-www-form-urlencoded")//设置Cookie头req.Header.Set("Cookie", "aaa=bbb")//发起请求resp, err := client.Do(req)///defer resp.Body.Close()body, err := ioutil.ReadAll(resp.Body)if err != nil {// handle error} /////如果返回为json数据则可以进行json解析//这里解析为mapmyMap := make(map[string]interface{})// json.Unmarshal([]byte(jsonBuf), &m1)json.Unmarshal(body, &myMap)fmt.Println(myMap)fmt.Println(string(body))
}
go语言学习第八天==》mysql数据库增删改查、用go语言 客户端(client)发起htttp get请求,post请求,postForm请求,Head请求,Do请求相关推荐
- MYSQL数据库 增删改查基础语句
MYSQL数据库 增删改查基础语句 **********************DDL 语句 ********************* ( DDL 是数据定义语言的缩写,简单的说,就是对数据库内 ...
- mysql数据库增删改查关键字_MySQL数据库(增删改查语句)
MySQL数据库(增删改查语句) 一.登录数据库:----> mysql -uroot -proot;(对应用户名和密码) 二.SQL语句: 数据定义语言DDL 用来定义数据库.表.列,关键 ...
- Mysql (一)Mysql 数据库增删改查
mysql数据库增删改查增:create database DBname charset gbk; 删:drop database DBname; 改:alter database DBname ch ...
- Java连接Mysql数据库增删改查实现
Java连接Mysql数据库增删改查实现 时间比较赶,我这里只实现查询,有时间再添加另外两个 难度 : ⭐⭐⭐(全星5颗星的情况下) 新建一个动态的网站工程, 把jar包全部复制进去,主要要那个mys ...
- mfc连接mysql增删改查_java实现mysql数据库增删改查
1.连接数据库: import java.sql.Connection; import java.sql.DriverManager; public class DBConnection { stat ...
- MySQL数据库增删改查常用语句详解
MySQL数据库增删改查常用语句详解 一 MySQL数据库表结构 1.1 常见数据类型 1.2 常用约束类型 1.3 MySQL存储引擎 二 DDL语句:数据定义语句 2.1 修改数据库密码 2.1. ...
- python操作Oracle、PostgreSQL,MySql数据库增删改查
python操作Oracle.PostgreSQL,MySql数据库增删改查,工作中可运行案例,直接上代码,供大家参考. # _*_ coding:UTF-8 _*_#import ServerCon ...
- flask对mysql数据库增删改查_Flask学习(三) - Flask-SQLAlchemy对数据库增删改查
Flask-SQLAlchemy对数据库增删改查 安装 pip install flask-sqlalchemy 具体不多说了,主要是对数据库进行简单的增删改查,上代码,看注释 @app.route( ...
- mysql数据库增删改查关键字_mysql数据库的增删改查
数据库基本操作:增删改查#DML语言 /* 数据操作语言: 插入:insert 修改:update 删除:delete */ 1.增 插入语句的方式一 表已经存在啦,我们需要往里面插入数据/* 语法: ...
最新文章
- 美团智能问答技术探索与实践
- position:sticky 的 polyfill——stickyfill 源码浅析
- 在win8上安装mysql_如何在Win8系统上安装MySQL 5.6
- java web mysql树形结构_用JAVA写的树结构代码 - WEB源码|JSP源码/Java|源代码 - 源码中国...
- JavaScript 使用[]读取对象属性
- SAP Fiori Elements 框架里 Smart Table 控件的工作原理介绍
- 真实AIS数据,解码,可视化
- ETL异构数据源Datax_使用querySql_08
- 还没做2022年计划?这个超赞工具送给你
- mysql 触发器trigeer_MySQL触发器trigger的使用-阿里云开发者社区
- 设计灵感|展览海报如何编排?
- mysql中IFNULL,IF,CASE的区别
- 计算机图形学几何变换
- java代码怎么动态修改xml配置文件内容_[MyBatis]-MyBatis框架-05-动态sql
- java messagedigest_Java MessageDigest.getInstance返回的实例非线程安全
- Android Canvas.DrawLine绘制线段
- Linux中设置Java程序开机自动运行
- Hacking the PS4, part 1
- 22021年江苏高考成绩查询,江苏省教育考试院2021年江苏高考成绩查询时间及系统入口...
- 被机器学习遗忘的大洲:非洲正尝试建立自己的“NeurIPS会议”
热门文章
- 程序的耦合性与内聚性的概念 以及 “高内聚,低耦合”
- java调用ecdh_java – BouncyCastle ECDH密钥协议失败
- 收音机c语言程序,51单片机驱动TEA5767调频收音机芯片C程序
- 如何通过Java将Word转换为PDF
- ESP8266-01-SDK-IDE开发工具
- python 软件授权系统及注册机二(管理员注册机)
- 带口罩了吗 Python教你 一行命令给猎狐 F4 带口罩 检测是否带口罩
- SXD_Decompile_1
- 开车人千金难买的知识!(组图)
- Visual Studio Code安装中文插件