您的位置 首页 golang

Go语言实现HTTP服务

GO语言可以通过http模块创建一个http服务器主要方法如下:

http.HandleFunc

第一次参数路径名 第二个参数处理的函数名

如:http.HandleFunc(“/”, GetHanle)

http.ListenAndServe

第一个参数:监听的端口和服务地址

第二个参数:处理的方法

 http.ListenAndServe("0.0.0.0:8080", nil)  

http.ListenAndServeTLS

参数1:地址和端口号

参数2:证书文件

参数3:私钥文件

参数3:处理方法

 http.ListenAndServeTLS("0.0.0.0:8080", "server.crt", "server.pem", nil)  

完整代码:

 import (
	"fmt"
	"net/http"
)

func main() {

	http.HandleFunc("/", GetHanle)

	http.ListenAndServe("0.0.0.0:8080", nil)

}

func GetHanle(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintln(w, "get 方法")
}
  

如何返回JSON数据

通过以上方法实现了简单的get服务,但是只是返回的字符串,如果要返回JSON怎么做?

 func main() {

	http.HandleFunc("/", GetHanle)

	http.ListenAndServe("0.0.0.0:8080", nil)

}

func GetHanle(w http.ResponseWriter, r *http.Request) {
	//fmt.Fprintln(w, "get 方法")
	w.Header().Set("content-type", "text/json")
	msg := make(map[string]string)
	msg["code"] = "1"
	msg["msg"] = "正常"
	ret, _ := json.Marshal(msg)
	w.Write(ret)
}
  

这样就返回了JSON数据

如何接受POST的请求

上面的方法只是简单的get请求,那么如何接受post请求呢?

 func PostHanle(w http.ResponseWriter, r *http.Request) {
	r.ParseForm()

	username := r.Form.Get("username")
	password := r.Form.Get("password")

	msg := make(map[string]string)
	msg["username"] = username
	msg["password"] = password

	ret, _ := json.Marshal(msg)
	w.Write(ret)
}
  

通过以上方法就可以获得Post参数,客户端发送数据的时候请求类型application/x-www-form-urlencoded

那么如何知道对方是什么请求呢,或则这个方法我只想接收POST请求。

通过r.Method返回的字符串可以判断当前用户请求的类型

代码如下:

 func PostHanle(w http.ResponseWriter, r *http.Request) {
	r.ParseForm()
	if r.Method == "POST" {
		//如果是POST 请求
		username := r.Form.Get("username")
		password := r.Form.Get("password")

		msg := make(map[string]string)
		msg["username"] = username
		msg["password"] = password

		ret, _ := json.Marshal(msg)
		w.Write(ret)

	} else {
		fmt.Fprintln(w, "不支持类型")
	}

}  

文章来源:智云一二三科技

文章标题:Go语言实现HTTP服务

文章地址:https://www.zhihuclub.com/86468.shtml

关于作者: 智云科技

热门文章

网站地图