1."net/http"包可以用来做什么?
可以通过url接口进行参数、文件的传递,并获取响应response。方法包括:GET、PUT、DELETE、POST等。
举个例子:
在浏览器中输入:http://localhost:8080/start_test?projectid=QQ%E9%A3%9E%E8%BD%A6&zoneid=0,则将参数projectid=QQ%E9%A3%9E%E8%BD%A6和zoneid=0传递给服务器,服务器会返回一个响应,在浏览器页面显示。
这是采用在浏览器中输入url的方式访问,也可以采用代码的方式进行同样的操作,如下:
package main
import (
"fmt"
"io/ioutil"
"net/http"
"strings"
)
func Post() {
url := "http://xxxxx:8080/v2/repos/wh_flowDataSource1/data"
payload := strings.NewReader("a=111")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Date", "Tue, 11 Sep 2018 10:57:09 GMT")
req.Header.Add("Authorization", "oqSBNbmgAAGI155F6MJ3N2Tk9ruL_6XQpx-uxkkg:8bUg3Iy5CVzU3vXyJyZXNvdXJjZSI6Ii92Mi9yZXBvcy93aF9mbG93RGF0YVNvdXJjZTEvZGF0YSIsImV4cGlyZXMiOjE1MzY2OTkwODgsIIiLCJjb250ZW50VHlwZSI6InRleHQvcGxhaW4iLCJoZWFkZXJzIjoiIiwibWV0aG9kIjoiUE9TVCJ9")
req.Header.Add("Content-Type", "text/plain")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
func Get() {
url := "http://xxxxx:8080/v2/repos/wh_flowDataSource1"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "BNbmgAAGI155F6MJ3N2Tk9ruL_6XQpx-uxkkg:tGCY3xCsgybHd5IjcDMi9yZXBvcy93aF9mbG93RGF0YVNvdXJjZTEiLCJleHBpcmVzIjoxNTM2NzU4NjQ3LCJjb250ZW5VudFR5cGUiOiIiLCJoZWFkZXJzIjoiIiwibWV0aG9kIjoiR0VUIn0=")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
func Put() {
url := "http://xxxxx:8080/v2/repos/wh_flowDataSource1"
payload := strings.NewReader("{\n \"schema\": [\n {\n \"key\": \"a\",\n \"valtype\": \"string\",\n \"required\": false\n }\n ]\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Content-Type", "application/json")
req.Header.Add("Authorization", "bmgAAGI155F6MJ3N2Tk9ruL_6XQpx-uxkkg:yKx_OYDtI3njD7-c7Y87Oov0GpI=:eyJyZXNvdXJBvcy93aF9mbG93RGF0YVNvdXJjZTEiLCJleHBpcmVzIjoxNTM2NzU1MjkwLCJjb250ZW50TUQ1IjoiIiwiY29udGVudFR5cGUiOiJhcHBsaWNhdGlvbi9qc29uIiwiaGVhZGVycyI6IiIsIm1ldGhvZCI6IlBVVCJ9")
req.Header.Add("Date", "Wed, 12 Sep 2018 02:10:09 GMT")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
func Delete() {
url := "http://xxxxx:8080/v2/repos/wh_flowDataSource1"
req, _ := http.NewRequest("DELETE", url, nil)
req.Header.Add("Authorization", "5F6MJ3N2Tk9ruL_6XQpx-uxkkg:o56-nIwtgTzUX80YCNpbcjUL8iM=:eyJyZXNvdXJjZSI6IF9mbG93RGF0YVNvdXJjZTEiLCJleHBpcmVzIjoxNTM2NzU4ODE2LCJjb250ZW50TUQ1IjoiIiwiY29udGVudFR5cGUiOiIiLCJoZWFkZXJzIjoiIiwibWV0aG9kIjoiREVMRVRFIn0=")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
2."github.com/gin-gonic/gin"包可以用来做什么?
可以开发web服务器。
g := gin.Default()
g.Use(Cors())
Cors()
g.GET("/ping", c.ping)
//开启gin web服务
err = g.Run()
if err != nil {
log.Println(err)
os.Exit(1)
}
func (w *controller) ping(c *gin.Context) {
c.String(http.StatusOK, "ok!")
}
当在浏览器中输入http://localhost:8080/ping时,浏览器返回“ok”。