golang之net/http模块学习

news2024/12/28 22:06:15

文章目录

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

开启服务

package main

import (
	"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 main

import (
  "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 main

import (
  "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 main

import (
	"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 main

import (
	"fmt"
	"time"
	"encoding/json"
	"os"
)

type Person struct {
	Name string
	Age 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 main

import (
	"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 main

import (
  "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.coloradmin.cn/o/1283944.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Windows下】Eclipse 尝试 Mapreduce 编程

文章目录 配置环境环境准备连接 Hadoop查看 hadoop 文件 导入 Hadoop 包创建 MapReduce 项目测试 Mapreduce 编程代码注意事项常见报错 配置环境 环境准备 本次实验使用的 Hadoop 为 2.7.7 版本,实验可能会用到的文件 百度网盘链接:https://pan.baidu…

LoadBalancer将服务暴露到外部实现负载均衡Openelb-layer2模式配置介绍

目录 一.openelb简介 二.主要介绍layer2模式 1.简介 2.原理 3.部署 (1)先在集群master上开启kube-proxy的strictARP (2)应用下载openelb.yaml(需要修改镜像地址) (3)编写yam…

swagger 简介

开发文档链接(里面有各种参数的介绍) OpenAPI Specification - Version 3.0.3 | Swagger 在线编辑(直接在线编辑到它不报错不然空格之类的容易错,他有一个离线的版本但是那个东西不知道为啥我跑不起来报一个swagger-router找不到…

接口压测指南

接口压测指南 一、 为什么需要进行接口压测二 、接口压测的目标是什么三、 用什么工具进行接口压测四、 接口压测核心指标4.1 JMeter的报告模板4.2 ApiPost报告模板 五、 接口慢如何排查5.1 大体排查思路5.2 排查工具5.3 压测经验 一、 为什么需要进行接口压测 突然有一天领导…

【Spring Boot】如何集成mybatis-plus

在pom文件中导入maven坐标 <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.23</version></dependency><!--mybatis-plus--><dependency><groupId>com.ba…

卷积神经网络(CNN):艺术作品识别

文章目录 一、前言一、设置GPU二、导入数据1. 导入数据2. 检查数据3. 配置数据集4. 数据可视化 三、构建模型四、编译五、训练模型六、评估模型1. Accuracy与Loss图2. 混淆矩阵3. 各项指标评估 一、前言 我的环境&#xff1a; 语言环境&#xff1a;Python3.6.5编译器&#xf…

python获取指定用户csdn博客列表并查询质量分,将结果保存到excel

API接口 获取博文总数接口 usernamehougang&#xff0c;表示获取用户hougang的所有博文数量 https://blog.csdn.net/community/home-api/v1/get-tab-total?usernamehougang 获取博文列表接口 https://blog.csdn.net/community/home-api/v1/get-business-list 质量分接口…

在文本框中添加单位

<el-col :span"12"><el-form-item label"进度" prop"schedule":rules"[{required: true, message:进度不能为空, trigger:blur},{validator: validator.isFloatGteZero, trigger:blur}]"><el-input v-model"input…

2024搞钱方式,这些你都了解吗?

气温日渐降低&#xff0c;凛冬已至&#xff0c;年关将近&#xff0c;咱还得多多搞钱才能喜气洋洋过大年不是&#xff1f;拿满全勤搞绩效&#xff0c;累死累活KPI……为了生活咱也是付出了太多。可是咱程序员该咋办呢&#xff1f; 相信有机智的小伙伴已经脱口而出了&#xff1a…

分布式搜索引擎elasticsearch(二)

1.DSL查询文档 elasticsearch的查询依然是基于JSON风格的DSL来实现的。 1.1.DSL查询分类 Elasticsearch提供了基于JSON的DSL(Domain Specific Language)来定义查询。常见的查询类型包括: 查询所有:查询出所有数据,一般测试用。例如:match_all 全文检索(full text)查…

从0开始使用Maven

文章目录 一.Maven的介绍即相关概念1.为什么使用Maven/Maven的作用2.Maven的坐标 二.Maven的安装三.IDEA编译器配置Maven环境1.在IDEA的单个工程中配置Maven环境2.方式2&#xff1a;配置Maven全局参数 四.IDEA编译器创建Maven项目五.IDEA中的Maven项目结构六.IDEA编译器导入Mav…

关于rocketMQ踩坑的那些事

在最近&#xff0c;我所写的这个项目需要使用到rocketMQ&#xff0c;为了图方便我便使用的是Windows版本的&#xff0c;但是在使用的过程中首先是发现无法发送消息出去&#xff0c;报错信息为 org.apache.rocketmq.client.exception.MQClientException: Send [3] times, still …

做一件荒谬的事:用AI推理下一次双色球结果 v0.1

做一件荒谬的事&#xff1a;用AI推理下一次双色球结果 v0.1 引言 事情的起因是父亲被亲戚安利&#xff0c;突然喜欢上了双色球&#xff0c;连规则和开奖结果怎么看都不懂的他&#xff0c;让我研究研究这个事&#xff0c;给他选个号。他还说老家有好几个人中了几百万&#xff…

unity学习笔记18

模型文件属性简介 1.动画类型&#xff1a;一共有四种&#xff1a;无 表示没有动画&#xff0c;旧版 就表示这个模型文件里面的动画片段可以用animation组件来播放的&#xff0c;最后两个 ”泛型“和“人形”都是animator组件来播放的。区别是泛型支持所有类型的动画播放&#x…

CoreDNS实战(一)-构建高性能、插件化的DNS服务器

1 概述 在企业高可用DNS架构部署方案中我们使用的是传统老牌DNS软件Bind, 但是现在不少企业内部流行容器化部署&#xff0c;所以也可以将Bind替换为 CoreDNS &#xff0c;由于 CoreDNS 是 Kubernetes 的一个重要组件&#xff0c;稳定性不必担心&#xff0c;于此同时还可将K8S集…

微信扫码登录修改二维码的样式

默认是这个样子二维码都没有展示全 微信的了的 js 对象是这个样子&#xff0c;既然大家看到我这篇文章&#xff0c;想必里面的属性已经知道了&#xff0c;这里不做赘述。 let href data:text/css;base64,LmltcG93ZXJCb3ggLnFyY29kZSB7d2lkdGg6ODAlO21hcmdpbi10b3A6MH0uaW1wb3d…

价差后的几种方向,澳福如何操作才能盈利

在价差出现时&#xff0c;澳福认为会出现以下几种方向。 昂贵资产的贬值和便宜资产的平行升值。昂贵的资产贬值&#xff0c;而便宜的资产保持不变。昂贵资产的贬值和便宜资产的平行贬值&#xff0c;但昂贵资产的贬值速度更快&#xff0c;超过便宜资产。更贵的一对的进一步升值和…

Pycharm配置jupyter使用notebook详细指南(可换行conda环节)

本教程为事后记录&#xff0c;部分图片非实操图片。 详细记录了pycharm配置jupyter的方法&#xff0c;jupyter添加其他conda环境的方法&#xff0c;远程密码调用jupyter的方法&#xff0c;修改jupyter工作目录的方法。 文章目录 一、入门级配置1. Pycharm配置Conda自带的jupyt…

Python Opencv实践 - Yolov3目标检测

本文使用CPU来做运算&#xff0c;未使用GPU。练习项目&#xff0c;参考了网上部分资料。 如果要用TensorFlow做检测&#xff0c;可以参考这里 使用GPU运行基于pytorch的yolov3代码的准备工作_little han的博客-CSDN博客文章浏览阅读943次。记录一下自己刚拿到带独显的电脑&a…

springboot数据源配置

springboot数据源配置 数据层解决方案——持久化技术 内置持久化解决方案——jdbcTemplate 内置数据库 H2一般用于测试环境&#xff0c;配置profiels&#xff0c;只在开发阶段使用&#xff0c;让他在上线的时候不走这里就可以了 要使用内嵌的数据库H2,要先导入jar包