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. position:sticky 的 polyfill——stickyfill 源码浅析
  3. 在win8上安装mysql_如何在Win8系统上安装MySQL 5.6
  4. java web mysql树形结构_用JAVA写的树结构代码 - WEB源码|JSP源码/Java|源代码 - 源码中国...
  5. JavaScript 使用[]读取对象属性
  6. SAP Fiori Elements 框架里 Smart Table 控件的工作原理介绍
  7. 真实AIS数据,解码,可视化
  8. ETL异构数据源Datax_使用querySql_08
  9. 还没做2022年计划?这个超赞工具送给你
  10. mysql 触发器trigeer_MySQL触发器trigger的使用-阿里云开发者社区
  11. 设计灵感|展览海报如何编排?
  12. mysql中IFNULL,IF,CASE的区别
  13. 计算机图形学几何变换
  14. java代码怎么动态修改xml配置文件内容_[MyBatis]-MyBatis框架-05-动态sql
  15. java messagedigest_Java MessageDigest.getInstance返回的实例非线程安全
  16. Android Canvas.DrawLine绘制线段
  17. Linux中设置Java程序开机自动运行
  18. Hacking the PS4, part 1
  19. 22021年江苏高考成绩查询,江苏省教育考试院2021年江苏高考成绩查询时间及系统入口...
  20. 被机器学习遗忘的大洲:非洲正尝试建立自己的“NeurIPS会议”

热门文章

  1. 程序的耦合性与内聚性的概念 以及 “高内聚,低耦合”
  2. java调用ecdh_java – BouncyCastle ECDH密钥协议失败
  3. 收音机c语言程序,51单片机驱动TEA5767调频收音机芯片C程序
  4. 如何通过Java将Word转换为PDF
  5. ESP8266-01-SDK-IDE开发工具
  6. python 软件授权系统及注册机二(管理员注册机)
  7. 带口罩了吗 Python教你 一行命令给猎狐 F4 带口罩 检测是否带口罩
  8. SXD_Decompile_1
  9. 开车人千金难买的知识!(组图)
  10. Visual Studio Code安装中文插件