HTTP 方式的“Hello World”
问题陈述
使用您喜欢的任何编程语言实现“Hello World”应用程序。
该应用程序是一个 CLI 应用程序。它首先在“localhost:8000”上启动 HTTP 服务器。服务器应在任何路由上以文本响应(内容类型“text/plain”)和响应代码 200 进行响应。当 HTTP 服务准备就绪时,应用程序向其 HTTP 服务器发送 GET 请求,读取响应(“Hello World”),并将响应打印到标准输出。最后,应用程序关闭 HTTP 服务器并退出。
可以通过`curl http://localhost:8000`来测试应用程序。
在 Go 中的实现
package main
import (
"fmt"
"io"
"log"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, World!")
}
func main() {
http.HandleFunc("/", handler)
go func() {
err := http.ListenAndServe(":8000", nil)
if err != nil {
log.Fatalf("http.ListenAndServe failed: %v", err)
}
}()
r, err := http.Get("http://localhost:8000/")
if err != nil {
log.Fatalf("http.Get failed: %v", err)
}
defer r.Body.Close()
t, err := io.ReadAll(r.Body)
if err != nil {
log.Fatalf("io.ReadAll failed: %v", err)
}
fmt.Println(string(t))
}使用 Go 实现优雅关闭 HTTP 服务器
package main
import (
"fmt"
"io"
"log/slog"
"net/http"
"os"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, World!")
}
func configureLogging() {
programLevel := new(slog.LevelVar)
logger := slog.New(slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{Level: programLevel}))
slog.SetDefault(logger)
if os.Getenv("DEBUG") != "" {
programLevel.Set(slog.LevelDebug)
}
}
func main() {
configureLogging()
http.HandleFunc("/", handler)
addr := "localhost:8000"
server := &http.Server{Addr: addr}
done := make(chan struct{})
go func(done chan<- struct{}) {
slog.Debug("server.ListenAndServe", "addr", addr)
err := server.ListenAndServe()
if err != nil {
slog.Debug("server.ListenAndServe", "error", err)
}
close(done)
}(done)
r, err := http.Get("http://" + addr)
if err != nil {
slog.Error("http.Get failed", "error", err)
return
}
defer r.Body.Close()
t, err := io.ReadAll(r.Body)
if err != nil {
slog.Error("io.ReadAll failed", "error", err)
return
}
fmt.Println(string(t))
err = server.Shutdown(nil)
if err != nil {
slog.Error("server.Shutdown failed", "error", err)
return
}
<-done
}在 Typescript 中实现
包子
import process from "node:process";
Bun.serve({ fetch: () => new Response("Hello World!"), port: 8000 });
console.log(await (await fetch("http://localhost:8000/")).text());
process.exit();德诺
Deno.serve(
{ port: 8000, onListen: () => {} },
() => new Response("Hello World!")
);
console.log(await(await fetch("http://localhost:8000/")).text());
Deno.exit();