golang web学习随便记1

news/2024/10/23 9:37:05/

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

package mainimport ("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 mainimport ("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处理。


http://www.ppmy.cn/news/45354.html

相关文章

Ubuntu NVIDIA-Docker安装

Ubuntu NVIDIA-Docker安装 Docker简介NVIDIA驱动安装NVIDIA-Docker安装 系统环境&#xff1a; 系统&#xff1a;linux 版本&#xff1a;ubuntu20.04 Docker简介 Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中&#…

rk3568 点亮LCD (BT656 BT1120)

rk3568 适配 BT656/BT1120 BT.656 TX 和 BT.1120 TX&#xff0c;是一种并行输出接口&#xff0c;而 Camera 对应的是 BT.656 RX和 BT.1120 RX&#xff0c;是一种并行输入接口&#xff0c;两则在协议上是一致的。与同为并口的RGB非常像&#xff0c;在rk3568 芯片上RGB和BT656/B…

Nacos共享配置

本文介绍一下Nacos作为配置中心时&#xff0c;如何读取共享配置 我的环境 Windows10JDK8SpringCloud&#xff1a;Finchley.RELEASESpringBoot&#xff1a;2.0.4.RELEASEspring-cloud-alibaba-dependencies&#xff1a;0.2.2.RELEASENacos-server&#xff1a;1.0.1 本文的项目…

C++类型转换运算符dynamic_cast、static_cast 和 reinterpret_cast

目录 区别对比 dynamic_cast&#xff1a; static_cast&#xff1a; reinterpret_cast&#xff1a; 案例说明 dynamic_cast static_cast reinterpret_cast C 中有三种主要的类型转换运算符&#xff1a;dynamic_cast、static_cast 和 reinterpret_cast。这些转换运算符可…

【C++】3. 缺省参数

文章目录 一、缺省参数的定义二、缺省参数的使用规则 一、缺省参数的定义 在c语言中&#xff0c;我们使用一个函数时&#xff0c;必须要传对应的参数&#xff0c;少一个都不可以。难道函数的参数就不能有个默认值吗&#xff1f;于是C对c做出了改良&#xff0c;创造了缺省参数。…

计数排序问题

文章目录 计数排序程序设计程序分析计数排序 【问题描述】有N个整数,用计数排序法排序 【输入形式】N个整数 【输出形式】N个整数 【样例输入】 10 2 1 4 2 3 3 3 2 9 5 【样例输出】 1 2 2 2 3 3 3 4 5 9 程序设计 C语言 #include<stdio.h> #include<string.h>…

AOP通知中获取数据

AOP通知中获取数据 之前我们写AOP仅仅是在原始方法前后追加一些操作&#xff0c;接下来我们要说说AOP中数据相关的内容&#xff0c;我们将从获取参数、获取返回值和获取异常三个方面来研究切入点的相关信息。 获取切入点方法的参数&#xff1a;所有的通知类型都可以获取参数 …

Node.js—path模块

目录 1、什么是path模块2、path.resolve 拼接规范的绝对路径 常用3、path.sep 获取操作系统的路径分隔符4、 path.parse 解析路径并返回对象5、path.basename 获取路径的基础名称6、path.dirname 获取路径的目录名7、path.extname 获得路径的扩展名8、 path.join()路径拼接 1、…