七叶笔记 » golang编程 » Go语言实现HTTP服务

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, "不支持类型")
}

}  

相关文章