在Ubuntu 16.04.3 LTS上运行go+https+json示例

前端之家收集整理的这篇文章主要介绍了在Ubuntu 16.04.3 LTS上运行go+https+json示例前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

下面是我依据网上资料的实操过程,记录以作备忘。该示例给出了https通信并处理json文件的例子。

平台:Ubuntu 16.04.3 LTS

go版本:1.10

1.生成自签名的服务器端的私钥KEY和公钥证书

openssl genrsa -out server.key 2048


openssl req -new -x509 -key server.key -out server.crt -days 3650


2.编写https通信的服务器和客户端程序
server.go
  1. package main
  2.  
  3. import (
  4. "encoding/json"
  5. "fmt"
  6. "net/http"
  7. )
  8.  
  9. type MyData struct {
  10. Name string `json:"item"`
  11. Other float32 `json:"amount"`
  12. }
  13.  
  14. //仅是构造一个json数据并发送给客户端
  15. func handler(w http.ResponseWriter,r *http.Request) {
  16. var detail MyData
  17. detail.Name = "1"
  18. detail.Other = 2
  19.  
  20. body,err := json.Marshal(detail)
  21. if err != nil {
  22. panic(err.Error())
  23. }
  24.  
  25. fmt.Fprintf(w,string(body))
  26. }
  27.  
  28. func main() {
  29. http.HandleFunc("/",handler)
  30. fmt.Println("http server listen at 8086")
  31. http.ListenAndServeTLS(":8086","server.crt","server.key",nil)
  32. }
client.go
  1. package main
  2.  
  3. import (
  4. "crypto/tls"
  5. "encoding/json"
  6. "fmt"
  7. "github.com/bitly/go-simplejson"
  8. "io/IoUtil"
  9. "net/http"
  10. )
  11.  
  12. type MyData struct {
  13. Name string `json:"item"`
  14. Other float32 `json:"amount"`
  15. }
  16.  
  17. func main() {
  18. tr := &http.Transport{
  19. TLSClientConfig: &tls.Config{InsecureSkipVerify: true},}
  20.  
  21. client := &http.Client{Transport: tr}
  22.  
  23. resp,err := client.Get("https://localhost:8086")
  24. if err != nil {
  25. fmt.Println("error:",err)
  26. return
  27. }
  28.  
  29. defer resp.Body.Close()
  30.  
  31. body,err := IoUtil.ReadAll(resp.Body)
  32. fmt.Println(string(body))
  33.  
  34. //decode json
  35. js,err := simplejson.NewJson(body)
  36. if err != nil {
  37. panic(err.Error())
  38. }
  39. fmt.Printf("%T:%v\n",js,js)
  40.  
  41. var res MyData
  42. err = json.Unmarshal([]byte(body),&res)
  43. fmt.Println(res)
  44. fmt.Println(res.Name,res.Other)
  45. }

3.安装client.go中需要的依赖库go-simplejson
go get -v -u -t github.com/bitly/go-simplejson

4.编译生成服务器和客户端程序
go build server.go
go build client.go

5.运行并看到结果
打开两个终端,分别运行server和client程序

./server


./client

参考文献 [1].https://www.cnblogs.com/woodzcl/p/7569668.html

猜你在找的Ubuntu相关文章