Golang HTTP服务
Posted Go Nodejs全栈开发
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Golang HTTP服务相关的知识,希望对你有一定的参考价值。
net/http介绍
Go语言标准库内建提供了net/http包,涵盖了HTTP客户端和服务端的具体实现。使用net/http包,我们可以很方便地编写HTTP客户端或服务端的程序。
Http Server
func ListenAndServe(addr string, handler Handler) error
ListenAndServe方法源码
func ListenAndServe(addr string, handler Handler) error {
server := &Server{Addr: addr, Handler: handler}
return server.ListenAndServe()
}
func (srv Server) ListenAndServe() error {
addr := srv.Addr
if addr == "" {
addr = ":http"
}
ln, err := net.Listen("tcp", addr)
if err != nil {
return err
}
return srv.Serve(tcpKeepAliveListener{ln.(net.TCPListener)})
}
Handler
go的http服务都是基于handler进行处理的。任何结构体,只要实现了ServeHTTP方法,这个结构就可以称之为handler对象。
type Handler interface {
ServeHTTP(ResponseWriter, *Request)
}
http.HandleFunc
http.HandleFunc方法接收两个参数,一个是路由匹配的字符串,另外一个是 func(ResponseWriter, *Request) 类型的函数
func HandleFunc(pattern string, handler func(ResponseWriter, *Request)) {
DefaultServeMux.HandleFunc(pattern, handler)
}
一个最简单的Http服务器程序 main.go
package main
import (
"fmt"
"log"
"net/http"
)
func HelloServer(w http.ResponseWriter, req *http.Request) {
fmt.Fprintf(w, "Hello "+req.URL.Path[1:])
}
func HelloServer2(w http.ResponseWriter, req *http.Request) {
w.Write([]byte("hello world!"))
}
func main() {
http.HandleFunc("/", HelloServer)
http.HandleFunc("/hello", HelloServer2)
err := http.ListenAndServe("127.0.0.1:8080", nil)
if err != nil {
log.Fatal("ListenAndServe: ", err.Error())
}
}
go run main.go
net/http包还提供http.ListenAndServeTLS()方法,用于处理HTTPS连接请求:
func ListenAndServeTLS(addr string, certFile string, keyFile string, handler Handler)
error
http.ListenAndServeTLS(":10443", "cert.pem", "key.pem", nil)
到此本文结束,欢迎留言讨论和指正。
写原创文章不易,若本文对你有帮助,请点在看、分享和关注支持。
以上是关于Golang HTTP服务的主要内容,如果未能解决你的问题,请参考以下文章
golang goroutine例子[golang并发代码片段]