当前位置: 首页 > news >正文

golang之net/http模块学习

文章目录

      • 开启服务
      • 开启访问静态文件
      • 获取现在时间
      • 按时间创建一个空的json文件
        • 按时间创建一个固定值的json文件
      • 跨域请求处理
      • 输出是json

开启服务

package mainimport ("fmt""net/http"
)//路由
func handler(w http.ResponseWriter, r *http.Request){fmt.Fprintf(w, "hello World!")
}func main(){//路由http.HandleFunc("/", handler)//开启服务http.ListenAndServe(":8091", nil) //port:8091(自定义,注意:要是空闲端口)
}
#启动服务
go run main.go

这样本地的8091端口就可以访问了

开启访问静态文件

我们这里拿video来举例

在这里插入图片描述

package mainimport ("fmt""net/http"
)func main(){//静态文件访问fs := http.FileServer(http.Dir("./assets"))http.Handle("/static/", http.StripPrefix("/static/", fs))//开启服务http.ListenAndServe(":8091", nil)
}

按照图上的访问路径(http://localhost:8091/static/video/20231204-134423.mp4)

获取现在时间

package mainimport ("fmt""time"
)func main(){currentTime := time.Now()fmt.Println("当前的时间为",currentTime)
}

因为currentTime是time.Time类型所以要想页面输出要进行字符串转换

//获取时间
func getNowTime(w http.ResponseWriter, r *http.Request){currentTime := time.Now()timeString := currentTime.Format("2006-01-02 15:04:05")//"2006-01-02 15:04:05"只是时间格式化字符串格式fmt.Fprintf(w,timeString)
}

至于这个函数上面命名也是如此,就当是net/http路由服务的固定格式便好
注意: Golang函数首字符大写代表着公开(public)小写代表着私有(private)

按时间创建一个空的json文件

package mainimport ("fmt""time"
//	"encoding/json""os"
)func CreateFileNil(){currentTime := GetTime()fileName := currentTime.Format("2006-01-02_15-04-05") + ".json"file,err := os.Create("./assets/json/"+fileName)if err != nil {fmt.Println("JSON编码失败:", err)return}defer file.Close() //defer:表示函数的最后执行(这里是确保最后文件是关闭的)
}func main(){CreateFileNil()
}
按时间创建一个固定值的json文件
package mainimport ("fmt""time""encoding/json""os"
)type Person struct {Name stringAge int
}
//创建一个固定值的json文件
func CreateFileGuDin(){currentTime := GetTime()fileName := currentTime.Format("2006-01-02_15-04-05") + ".json"file,err := os.Create("./assets/json/"+fileName)if err != nil {fmt.Println("JSON编码失败:", err)return}defer file.Close()person := Person{Name: "Alice", Age: 25}jsonData, err := json.Marshal(person)if err != nil {fmt.Println("JSON编码失败:", err)return}_, err = file.Write(jsonData)if err != nil {fmt.Println("写入文件失败:", err)return}fmt.Println("JSON文件创建成功:", fileName)
}func main(){CreateFileGuDin()
}

跨域请求处理

package mainimport ("fmt""net/http"
)//路由
func handler(w http.ResponseWriter, r *http.Request){fmt.Fprintf(w, "hello World!")
}func main(){//创建一个处理跨域请求的处理器函数corsHandler := func(h http.Handler) http.Handler {return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {// 设置允许跨域的域名w.Header().Set("Access-Control-Allow-Origin", "*")// 允许的请求方法w.Header().Set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS")// 允许的请求头w.Header().Set("Access-Control-Allow-Headers", "Content-Type, Authorization")// 如果是预检请求,直接返回if r.Method == "OPTIONS" {return}h.ServeHTTP(w, r)})}//路由http.Handle("/", corsHandler(http.HandlerFunc(handler)))//开启服务http.ListenAndServe(":8091", nil)
}

输出是json

package mainimport ("fmt""net/http""encoding/json"
)type FileDetail struct{NowTime string `json:"now_time"`FileName string `json:"file_name"`
}func func_name1(w http.ResponseWriter, r *http.Request){responseData := FileDetail {NowTime:"2023_12_04_22_51_30.json",FileName:"http://"+local+":" + port + "/static/video/20231204-19.mp4"}w.Header().Set("Content-Type", "application/json")w.WriteHeader(http.StatusOK)json.NewEncoder(w).Encode(responseData)
}func main(){//创建一个处理跨域请求的处理器函数corsHandler := func(h http.Handler) http.Handler {return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {// 设置允许跨域的域名w.Header().Set("Access-Control-Allow-Origin", "*")// 允许的请求方法w.Header().Set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS")// 允许的请求头w.Header().Set("Access-Control-Allow-Headers", "Content-Type, Authorization")// 如果是预检请求,直接返回if r.Method == "OPTIONS" {return}h.ServeHTTP(w, r)})}http.Handle("/test", corsHandler(http.HandlerFunc(func_name1)))//开启服务http.ListenAndServe(":8091", nil)
}
http://www.lryc.cn/news/252451.html

相关文章:

  • Python中format函数用法
  • Android 断点调试
  • 对抗神经网络 CGAN实战详解 完整数据代码可直接运行
  • LeetCode417. Pacific Atlantic Water Flow
  • Python字符串模糊匹配工具:TheFuzz 库详解
  • Golang中WebSocket和WSS的支持
  • 亚马逊云科技re:Invent大会,助力安全构建规模化生成式AI应用
  • 价差后的几种方向,澳福如何操作才能盈利
  • 【Java】类和对象之超级详细的总结!!!
  • 机器学习的复习笔记3-回归的细谈
  • Git常用命令#切换分支
  • 【qml入门教程系列】:qml property使用介绍
  • pbootcms建站
  • Spring的事务传播行为
  • 04_网络编程
  • 【五分钟】熟练使用numpy.cumsum()函数(干货!!!)
  • 由11月27日滴滴崩溃到近两个月国内互联网产品接二连三崩溃引发的感想
  • Python按要求从多个txt文本中提取指定数据
  • DFT新手教程:VASP中ISIF取值设置
  • pytest自动化框架之allure测试报告的用例描述设置
  • 在编程中遇到的问题总结
  • 【数据库设计和SQL基础语法】--SQL语言概述--SQL的基本结构和语法规则(二)
  • easyexcel多级表头导出各级设置样式(继承HorizontalCellStyleStrategy实现)
  • QMLfor python pyside6
  • 几何教学工具 Sketchpad几何画板 mac软件特色
  • 华清远见嵌入式学习——C++——作业5
  • Java中的类与类之间的关系
  • 全新仿某度文库网站源码/在线文库源码/文档分享平台网站源码/仿某度文库PHP源码
  • HTTPS的安全问题及应对方案
  • TensorRT-LLM保姆级教程(一)-快速入门