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并发代码片段]

代码片段 - Golang 实现集合操作

求教golang中http发送post请求gb2312编码的解决方案

Golang Web入门:自顶向下理解Http服务器

Golang Web入门:自顶向下理解Http服务器

json [Golang] golang #golang #snippets中有用的片段