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请求相关推荐

  1. MYSQL数据库 增删改查基础语句

    MYSQL数据库 增删改查基础语句 **********************DDL 语句 *********************   ( DDL 是数据定义语言的缩写,简单的说,就是对数据库内 ...

  2. mysql数据库增删改查关键字_MySQL数据库(增删改查语句)

    MySQL数据库(增删改查语句) 一.登录数据库:---->  mysql -uroot -proot;(对应用户名和密码) 二.SQL语句: 数据定义语言DDL  用来定义数据库.表.列,关键 ...

  3. Mysql (一)Mysql 数据库增删改查

    mysql数据库增删改查增:create database DBname charset gbk; 删:drop database DBname; 改:alter database DBname ch ...

  4. Java连接Mysql数据库增删改查实现

    Java连接Mysql数据库增删改查实现 时间比较赶,我这里只实现查询,有时间再添加另外两个 难度 : ⭐⭐⭐(全星5颗星的情况下) 新建一个动态的网站工程, 把jar包全部复制进去,主要要那个mys ...

  5. mfc连接mysql增删改查_java实现mysql数据库增删改查

    1.连接数据库: import java.sql.Connection; import java.sql.DriverManager; public class DBConnection { stat ...

  6. MySQL数据库增删改查常用语句详解

    MySQL数据库增删改查常用语句详解 一 MySQL数据库表结构 1.1 常见数据类型 1.2 常用约束类型 1.3 MySQL存储引擎 二 DDL语句:数据定义语句 2.1 修改数据库密码 2.1. ...

  7. python操作Oracle、PostgreSQL,MySql数据库增删改查

    python操作Oracle.PostgreSQL,MySql数据库增删改查,工作中可运行案例,直接上代码,供大家参考. # _*_ coding:UTF-8 _*_#import ServerCon ...

  8. flask对mysql数据库增删改查_Flask学习(三) - Flask-SQLAlchemy对数据库增删改查

    Flask-SQLAlchemy对数据库增删改查 安装 pip install flask-sqlalchemy 具体不多说了,主要是对数据库进行简单的增删改查,上代码,看注释 @app.route( ...

  9. mysql数据库增删改查关键字_mysql数据库的增删改查

    数据库基本操作:增删改查#DML语言 /* 数据操作语言: 插入:insert 修改:update 删除:delete */ 1.增 插入语句的方式一 表已经存在啦,我们需要往里面插入数据/* 语法: ...

最新文章

  1. 对大龄程序员的五大误解
  2. 【UI 设计 - Adobe Illustrator】基本设置 (图像显示 | 图像缩放 | 置入导出 | 标尺 | 网格 | 参考线 | 画板)
  3. JZOJ 3899. 【NOIP2014模拟】逻辑的连通性
  4. fatal error C1071: unexpected end of file found in comment
  5. python读取单波段影像dem
  6. NLP——序列标注之命名实体识别
  7. Android开发环境准备和常用命令总结
  8. App的selenium,Appium爬App!
  9. 关于二进制补码+CS5463
  10. 从Oracle迁移到MySQL的各种坑及自救方案
  11. colormap保存 matlab_matlab中colormap用法
  12. vue项目如何部署?history与hash模式部署时的区别
  13. 你有反馈,我们安排!Sketch 插件升级,新老对比一图看懂
  14. VScode 常用插件推荐,非常全面
  15. Android Push哪家强——分析豌豆荚1400个APP
  16. PokemonGo:LBS游戏开发
  17. LED电性能IV扫描测试方案
  18. Windows命令行学习笔记
  19. LTE学习-PSS主同步信号
  20. python计算灰色关联度

热门文章

  1. netty中实现双向认证的SSL连接
  2. 数据库事务(常被问的)
  3. python笔记(1)
  4. JavaScript控制台打印单词
  5. Visual Studio如何自动或手动加载康耐视VisionPro控件
  6. 基于树莓派的Lede系统安装
  7. redis 作用和应用场景等总结篇
  8. Blazor WebAssembly 渐进式 Web 应用程序 (PWA) 离线处理数据
  9. Python爬取百度搜索的标题和真实URL的代码和详细解析
  10. python中文界面设定_怎么实现python设置中文界面