go 语言------web通信
2019-02-14 16:59
78 查看
版权声明:哇~大橙子 https://blog.csdn.net/qq_37040104/article/details/86704213
第一种直接用http包来编写,我觉得这种方式给转语言的人来说会比较好理解
服务器端(server):
[code]package main import ( "encoding/json" "net/http" "fmt" "io/ioutil" "log" ) type Cmd struct { Req int Name string } func main() { //设置路由,例如:当url为127.0.0.1:9090/test时会调用deal函数 http.HandleFunc("/test",deal) //监听ip地址和端口,建立连接,接受客户端的请求。第二个参数是服务器处理程序,一般为空, err:=http.ListenAndServe(":9090", nil) log.Fatal(err) } //请求通过参数传递过来,具体处理请求 func deal(w http.ResponseWriter, r *http.Request){ t:= &Cmd{} if r.Method == "POST" { b, err := ioutil.ReadAll(r.Body) if err != nil { log.Println("Read failed:", err) } defer r.Body.Close() //将json消息转成结构体 err = json.Unmarshal(b, t) if err != nil { log.Println("json format error:", err) } log.Println("tasklog:", t) } }
客户端(client):
[code]package main import ( "encoding/json" "bytes" "net/http" "io/ioutil" "log" "fmt" ) type Cmd struct { Req int Name string } func main() { url := "http://127.0.0.1:9090/test" contentType := "application/json;charset=utf-8" cmd := Cmd{Req: 12, Name: "plugin"} //将结构体转为json格式 b ,err := json.Marshal(cmd) body := bytes.NewBuffer(b) //发送post请求 resp, err := http.Post(url, contentType, body) defer resp.Body.Close() content, err := ioutil.ReadAll(resp.Body) if err != nil { log.Println("Read failed:", err) return } log.Println("content:", string(content)) }
第二种使用gin包来编写。
服务器端:
[code]package main import ( "encoding/json" "net/http" "github.com/gin-gonic/gin" "fmt" ) type Cmd struct { Req int Name string } func main(){ router := gin.New() router.Use(gin.Logger(), gin.Recovery()) //:name 支持可变,自己决定填什么 router.POST("/test/:name",dealpost) router.GET("/test/:name",dealget) //建立连接,接听端口 router.Run("0.0.0.0:9090") } var cmd_arr []*Cmd func dealpost(c *gin.Context){ cmd:=Cmd{} //可以获得url上的可变参 name := c.Param("name") // urlencoded form or multipart form 从中根据key找value res:=c.PostForm("context") json.Unmarshal([]byte(res), &cmd) add(&cmd) fmt.Println(cmd) //JSON将给定结构序列化为JSON到响应主体中,还将Content-Type设置为“application / json” c.JSON(http.StatusOK,name) } func add(c *Cmd){ cmd_arr=append(cmd_arr,c) } func dealget(c *gin.Context){ for _,v:=range cmd_arr{ c.JSON(http.StatusOK,v) } }
客户端:
[code]package main import ( "encoding/json" "bytes" "net/http" "fmt" ) type Cmd struct { Req int Name string } func main(){ cmd:=Cmd{12,"hello"} b,_:=json.Marshal(cmd) reader := bytes.NewReader(b) if req, err:= http.NewRequest("POST", "127.0.0.1:9090", reader); err == nil { client := &http.Client{} var resp *http.Response resp, err = client.Do(req) fmt.Println(resp) } }
相关文章推荐
- 基于 Web 的 Go 语言 IDE - Wide 1.5.1 发布!
- Go语言Web框架gwk介绍 (四)
- Go语言的Web框架
- 不安分的 Go 语言开始入侵 Web 前端领域了!
- 用 Go 语言创建一个 “Hello World” web 应用
- go语言学习:web服务器 golang版
- golang实战使用gin+xorm搭建go语言web框架restgo详解5.4 控制器参数绑定
- c语言客户端与go语言服务端通信(网络字节序)
- 基于 Web 的 Go 语言 IDE - Wide 1.5.0 发布!
- go语言编写Web程序
- Go语言的几个Web开发框架
- Go语言及其WEB快速开发框架介绍
- 基于 Web 的 Go 语言 IDE - Wide 1.5.1 发布!
- [转]Go语言(Golang)的Web框架比较:gin VS echo
- Go语言Web框架gwk介绍 (一)
- Go语言tcp通信处理粘包问题框架.
- GO语言零基础从入门到精通WEB编程名库讲解全套视频教程
- 基于 Web 的 Go 语言 IDE - Wide 1.3.0 发布!
- 基于 Web 的 Go 语言 IDE - Wide 1.1.0 发布!
- go语言和java+jetty的web hello world 性能测试对比