您现在的位置是:首页 >其他 >golang web学习随便记1网站首页其他

golang web学习随便记1

sjg20010414 2023-06-03 12:00:03
简介golang web学习随便记1

直接上第一个例子代码  first_webapp/server.go

package main

import (
	"fmt"
	"net/http"
)

func handler(writer http.ResponseWriter, request *http.Request) {
	fmt.Fprintf(writer, "hello world, %s!", request.URL.Path[1:])
}

func main() {
	http.HandleFunc("/", handler)
	http.ListenAndServe(":8088", nil)
}

确保golang基本环境已经具备,然后到项目目录 first_webapp下

sjg@sjg-PC:~/go/src/gostudy/first_webapp$ go mod init
sjg@sjg-PC:~/go/src/gostudy/first_webapp$ go run .

然后浏览器打开  http://localhost:8088 就可以看到输出 (如果输入 http://localhost:8088/yes/it/is,那么 request.URL.Path 对应字符串 /yes/it/is,代码中用字符串切片[1:]去掉了第1个字符/)

一个handler可以是一个handler  func,它带有两个参数,类型分别为 http.ResponseWriter 和 *http.Request 。主程序中主要是2个动作:(为指定的路由)设定 handler在指定端口启动监听

接下来,我们新建项目chitchat,来修改一下上面的代码:先创建 http.Server 对象server,设定好handler、监听端口等,然后调用该对象的 server.ListenAndServe() 启动监听。在此时,我们使用多路复用器(multiplexer)作为server的handler (多路复用器参见 golang学习随便记11-goroutine和channel(3)_sjg20010414的博客-CSDN博客)。多路复用器概念有点类似Windows里面的WaitForMultipleObjects,即等待多个事件信号,其中任何一个触发就进入相应处理。

package main

import (
	"fmt"
	"net/http"
)

func main() {
	mux := http.NewServeMux()
	files := http.FileServer(http.Dir("./public"))
	mux.Handle("/static/", http.StripPrefix("/static/", files))
	mux.HandleFunc("/", index)

	server := &http.Server{
		Addr:    "0.0.0.0:8088",
		Handler: mux,
	}
	server.ListenAndServe()
}

func index(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintf(w, "暂未实现首页")
}

上面的代码中,多路复用器mux设定了两种信号的处理:对路由 /static/* 用一个 (http.FileServer函数创建的)http.Handler对象处理,去掉URL路径前缀/static/,返回(相对于当前项目根目录的)/public路径下的*所代表的文件(例如,浏览器访问 http://localhost:8088/static/css/bootstrap.min.css,返回给客户的是<doc_root>/public/css/bootstrap.min.css);对路由/,和前述类似,用一个handler  func处理。

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。