第一个 go web 程序

第一个 go web 程序

package main

import (
	"fmt"
	"net/http"
)
func welcome (w http.ResponseWriter,r *http.Request){
	// 设置响应头
	w.Header().Set("Content-Type","text/html;charset=utf-8")
	fmt.Fprintln(w,"服务器返回的信息<b>加粗</b>")
}
func main() {
	// 如果访问/abc路径,交给welcome方法去处理
	http.HandleFunc("/abc",welcome)
	// 监听本机8081端口
	http.ListenAndServe("localhost:8081",nil)
}

单控制器

package main

import (
	"net/http"
)
type MyHander struct{

}
func (m *MyHander) ServeHTTP(w http.ResponseWriter,r *http.Request ){
	w.Write([]byte("返回的数据"))
}
func main() {
	h := MyHander{}
	server := http.Server{Addr:"localhost:8090",Handler:&h}
	server.ListenAndServe()
}

多控制器

1、多处理器实现

package main

import (
	"net/http"
)
type MyHander struct{

}
type MyHande struct{

}
func (m *MyHande) ServeHTTP(w http.ResponseWriter,r *http.Request ){
	w.Write([]byte("返回的数据two"))
}
func (m *MyHander) ServeHTTP(w http.ResponseWriter,r *http.Request ){
	w.Write([]byte("返回的数据"))
}
func main() {
	h := MyHander{}
	h2 := MyHande{}
	//server := http.Server{Addr:"localhost:8090",Handler:&h}
	server := http.Server{Addr:"localhost:8090"}
	http.Handle("/first",&h)
	http.Handle("/second",&h2)
	server.ListenAndServe()
}

2、多函数实现

package main

import (
	"fmt"
	"net/http"
)
func first(w http.ResponseWriter,r *http.Request){
	fmt.Fprintln(w,"多函数-first")
}
func second(w http.ResponseWriter,r *http.Request){
	fmt.Fprintln(w,"多函数-second")
}
func main(){
	server:=http.Server{Addr:"localhost:8090"}
	http.HandleFunc("/first",first)
	http.HandleFunc("/second",second)
	server.ListenAndServe()
}

在这里插入图片描述

已标记关键词 清除标记
相关推荐
第1章 入门 1 1.1 hello,world 1 1.2 命令行参数 3 1.3 找出重复行 6 1.4 GIF动画 10 1.5 获取一个URL 12 1.6 并发获取多个URL 13 1.7 一个Web服务器 14 1.8 其他内容 17 第2章 程序结构 20 2.1 名称 20 2.2 声明 21 2.3 变量 22 2.3.1 短变量声明 22 2.3.2 指针 23 2.3.3 new函数 25 2.3.4 变量的生命周期 26 2.4 赋值 27 2.4.1 多重赋值 27 2.4.2 可赋值性 28 2.5 类型声明 29 2.6 包和文件 30 2.6.1 导入 31 2.6.2 包初始化 33 2.7 作用域 34 第3章 基本数据 38 3.1 整数 38 3.2 浮点数 42 3.3 复数 45 3.4 布尔值 47 3.5 字符串 47 3.5.1 字符串字面量 49 3.5.2 Unicode 49 3.5.3 UTF-8 50 3.5.4 字符串和字节slice 53 3.5.5 字符串和数字的相互转换 56 3.6 常量 56 3.6.1 常量 生成器iota 57 3.6.2 无类型常量 59 第4章 复合数据类型 61 4.1 数组 61 4.2 slice 63 4.2.1 append函数 66 4.2.2 slice就地修改 69 4.3 map 71 4.4 结构体 76 4.4.1 结构体字面量 78 4.4.2 结构体比较 80 4.4.3 结构体嵌套和匿名成员 80 4.5 JSON 82 4.6 文本和HTML模板 87 第5章 函数 92 5.1 函数声明 92 5.2 递归 93 5.3 多返回值 96 5.4 错误 98 5.4.1 错误处理策略 99 5.4.2 文件结束标识 101 5.5 函数变量 102 5.6 匿名函数 104 5.7 变长函数 110 5.8 延迟函数调用 111 5.9 宕机 115 5.10 恢复 118 第6章 方法 120 6.1 方法声明 120 6.2 指针接收者的方法 122 6.3 通过结构体内嵌组成类型 124 6.4 方法变量与表达式 127 6.5 示例:位向量 128 6.6 封装 130 第7章 接口 133 7.1 接口即约定 133 7.2 接口类型 135 7.3 实现接口 136 7.4 使用flag.Value来解析参数 139 7.5 接口值 141 7.6 使用sort.Interface来排序 144 7.7 http.Handler接口 148 7.8 error接口 152 7.9 示例:表达式求值器 154 7.10 类型断言 160 7.11 使用类型断言来识别错误 161 7.12 通过接口类型断言来查询特性 162 7.13 类型分支 164 7.14 示例:基于标记的XML解析 166 7.15 一些建议 168 第8章 goroutine和通道 170 8.1 goroutine 170 8.2 示例:并发时钟服务器 171 8.3 示例:并发回声服务器 174 8.4 通道 176 8.4.1 无缓冲通道 177 8.4.2 管道 178 8.4.3 单向通道类型 180 8.4.4 缓冲通道 181 8.5 并行循环 183 8.6 示例:并发的Web爬虫 187 8.7 使用select多路复用 190 8.8 示例:并发目录遍历 192 8.9 取消 195 8.10 示例:聊天服务器 198 第9章 使用共享变量实现并发 201 9.1 竞态 201 9.2 互斥锁:sync.Mutex 205 9.3 读写互斥锁:sync.RWMutex 208 9.4 内存同步 208 9.5 延迟初始化:sync.Once 210 9.6 竞态检测器 212 9.7 示例:并发非阻塞缓存 212 9.8 goroutine与线程 218 9.8.1 可增长的栈 219 9.8.2 goroutine调度 219 9.8.3 GOMAXPROCS 219 9.8.4 goroutine没有标识 220 第10章 包和go工具 221 10.1 引言 221 10.2 导入路径 221 10.3 包的声明 222 10.4 导入声明 223 10.5 空导入 223 10.6 包及其命名 225 10.7 go工具 226 10.7.1 工作空间的组织 227 10.7.2 包的下载 228 10.7.3 包的构建 229 10.7.4 包的文档化 231 10.7.5 内部包 232 10.7.6 包的查询 233 第11章 测试 235 11.1 go test工具 235 11.
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页