http.ListenAndServe
时间: 2023-07-18 10:05:06 浏览: 75
http.ListenAndServe 是 Go 语言中的一个函数,它用于启动一个 HTTP 服务器并监听指定的 TCP 网络地址。该函数会一直阻塞运行直到服务器退出或者发生错误。通常我们会在该函数之前使用 http.HandleFunc 或者 http.Handle 来设置路由规则和处理器函数。例如:
```
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8080", nil)
}
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello World!")
}
```
以上代码将启动一个简单的 HTTP 服务器,监听本地的 8080 端口,并将所有请求都转发给 handler 函数进行处理。handler 函数会将一个 "Hello World!" 字符串写入到响应体中。
相关问题
package main import ( "fmt" "log" "net/http" ) func handler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello, world!") } func main() { mux := http.NewServeMux() mux.HandleFunc("/", handler) go func() { err := http.ListenAndServe(":8080", mux) if err != nil { log.Fatal(err) } }() go func() { err := http.ListenAndServe(":8081", mux) if err != nil { log.Fatal(err) } }() select {} }怎么用一个http请求结束这段代码
你可以使用 context 包来实现这个目的。具体实现可以参考以下代码:
```
package main
import (
"context"
"fmt"
"log"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, world!")
}
func main() {
mux := http.NewServeMux()
mux.HandleFunc("/", handler)
srv := &http.Server{Addr: ":8080", Handler: mux}
go func() {
if err := srv.ListenAndServe(); err != http.ErrServerClosed {
log.Fatalf("ListenAndServe(): %v", err)
}
}()
ctx := context.Background()
// 等待一个 http 请求
<-ctx.Done()
// 关闭服务器
if err := srv.Shutdown(context.Background()); err != nil {
log.Fatalf("Shutdown(): %v", err)
}
}
```
这个程序会启动一个 HTTP 服务器,监听 8080 端口。当程序收到一个 http 请求时,会关闭服务器并退出程序。
package main import{ "net/http" } func main() { http.Handle("/",http.FileServer(http.Dir("."))) http.ListenAndServe(":8080",nil) }哪里错了
这段代码看起来没有明显的错误,但是如果您运行它并访问 http://localhost:8080 ,它将会列出当前目录下的所有文件和文件夹。这可能会导致安全隐患,因为可能会公开敏感文件。为了避免这种情况,您应该指定要提供的文件夹,例如:
```
package main
import (
"net/http"
)
func main() {
http.Handle("/", http.FileServer(http.Dir("/path/to/directory")))
http.ListenAndServe(":8080", nil)
}
```
请将代码中的 `/path/to/directory` 替换为您要提供的实际文件夹的路径。
阅读全文