Gin框架—运行终端中遇到问题及其解决办法汇总(一)

1、 panic: html/template: pattern matches no files: `template/**/**/*`

终端全文代码:

10:3:12 app         | [GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.

[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
 - using env:   export GIN_MODE=release
 - using code:  gin.SetMode(gin.ReleaseMode)

10:3:13 app         | panic: html/template: pattern matches no files: `template/**/**/*`

goroutine 1 [running]:
html/template.Must(...)
        /usr/local/go/src/html/template/template.go:368
github.com/gin-gonic/gin.(*Engine).LoadHTMLGlob(0xc0005001a0, {0x15bb7b4, 0x10})
        /Users/mac/go/pkg/mod/github.com/gin-gonic/gin@v1.9.1/gin.go:255 +0x306
main.main()

这个错误是因为在给定的路径中没有匹配到任何文件。

在这个特定的错误信息中,路径是template/**/**/*。这个路径看起来是一个通配符模式,意图是匹配一个或多个文件。

然而,根据错误信息显示的结果,这个通配符模式没有匹配到任何文件。可能有以下几个原因导致这个错误:

  1. 路径错误:检查路径是否正确,确保路径指向正确的目录,并且包含要匹配的文件。

  2. 忽略文件:有些文件可能被配置为被忽略,因此不会被匹配。你可以查看你的项目的.gitignore.hgignore文件,以确认是否有相关的忽略配置。如果有这样的配置,在匹配模式中指定的文件将不会被匹配。

  3. 不存在文件:路径中指定的文件可能不存在。你可以通过在命令行或文件浏览器中检查给定路径是否存在来验证。

请仔细检查路径,确保文件存在,这样就可以解决这个错误。

以上的第一个(1、)问题,就是因为粗心大意导致,模版渲染,那么模版路径名字和你写的是否一致,这里是templates,而在mian.go中是这样的

	//加载模板 放在配置路由前面
	router.LoadHTMLGlob("template/**/**/*")

正确的写法:
	//加载模板 放在配置路由前面
	router.LoadHTMLGlob("templates/**/**/*")


这里缺了一个s 字母,同时在输入时候,要确定好你约定的模版文件夹名字。

二、[GIN-debug] [WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.
Please check https://pkg.go.dev/github.com/gin-gonic/gin#readme-don-t-trust-all-proxies for details.

这个警告信息是由GIN框架生成的,它提醒你在使用代理时不要信任所有的代理。

在默认情况下,GIN框架会信任所有的代理,这意味着它会将代理请求中的头信息视为可信任的。然而,信任所有代理可能会导致安全性问题,因为代理请求的头信息可以被伪造。

为了提高安全性,GIN框架建议你设置一个适当的值来限制可信任的代理。你可以通过设置gin.Engine结构体中的TrustedProxies字段来指定可信任的代理。

具体的使用方法可以参考Gin文档中提供的说明。

总的来说,为了安全起见,你应该仔细考虑你信任的代理,并只信任那些你确定是可信的代理。遵循GIN框架的建议来设置适当的值,以提高应用程序的安全性。

三、controllers/admin/login.go:20:19: undefined: models


func makeCaptcha() (string, string, error) {
	var driver base64Captcha.Driver

	driverString := base64Captcha.DriverString{
		Height:          40,
		Width:           100,
		NoiseCount:      0,
		ShowLineOptions: 2 | 4,
		Length:          2,
		Source:          "1234567890qwertyuioplkjhgfdsazxcvbnm",
		BgColor: &color.RGBA{
			R: 3,
			G: 102,
			B: 214,
			A: 125,
		},
		Fonts: []string{"wqy-microhei.ttc"},
	}

	driver = driverString.ConvertFonts()

	c := base64Captcha.NewCaptcha(driver, store)
	id, b64s, err := c.Generate()

	return id, b64s, err

}

对上面的代码有啥错误,是不是单独看没有问题,那为何在login.go中报错models undefined 呢?

其实,问题就是,我们单独把生成 验证码 base64Captcha 的方法单独放在models包下的一个以验证码命名的文件(captch.go)它实现的是set 、get、 verfiy 的基础方法。

这个错误是由于在Go代码中使用了未定义的模型(models)导致的。

"models undefeated"这个错误信息并不是标准的Go错误信息,所以它可能是自定义的错误信息,或者是使用了特定的第三方库或框架。

要解决这个问题,需要检查代码中是否正确定义了模型。请确认以下几个方面:

  1. 模型是否正确导入:检查导入模块的语句是否正确,确保正确导入了包含有模型定义的相关文件。

  2. 模型是否正确定义:确保模型定义的结构体或类型存在,且没有遗漏或错误的定义。检查模型的命名和字段是否正确。

  3. 模型的可访问性:确保模型的定义是可访问的。在Go中,如果一个标识符(如结构体或类型)的首字母是小写字母,那么它将是私有的,只能在定义它的包内使用。如果你的模型属于私有的,你可能需要将其定义为公共的,以便在其他包中使用。

 结合解决方案,得出结论。我们的定义的模型包类型应该是公共的,所以,定义的标识符的首字母应该是大写,符合go语言命名规则。

四、Failed to load resource: the server responded with a status of 404 (Not Found)  改造项目中,如html页面需要对静态资源引入的时候,返回🔙页面html中找到css引入link连接查看地址是否有问题?

经过对比代码,可以看出一下代码,我们都改变了,但是页面还是没有渲染上的问题!!!

<link rel="stylesheet" href="/static/admin/css/login.css"> 
    <script type="text/javascript" src="/static/admin/bootstrap/js/jquery-1.10.1.js"></script>
    <script type="text/javascript" src="/static/admin/js/login.js"></script>

login.css:1     Failed to load resource: the server responded with a status of 404 (Not Found)

…… 等等f12,打开调试后台,查看console,可以看见是

那么,这个问题如何解决呢?

问题1:引入静态资源路径正确,程序运行终端无明显报错提示!

分析:首先,静态资源引入地址路径没有问题,那么当前login页面也展示了,只是没有css,console 打印出页面报错:缺少css引入。

所以,我们在main.go 文件中查看是否有渲染模版后,关于静态资源加载的代码。也就是,在主入口文件内,加上引入静态资源文件的代码


    //配置静态web目录 第一个参数表示路由, 第二个参数表示映射的目录

    r.Static("/static", "./static")

代码片段,r.Static("/static", "./static") 是用来为路由设置静态文件服务的。

该代码的作用是将 /static 路径映射到 ./static 目录,并为该路径下的文件提供静态文件服务。这意味着当客户端请求 /static 路径下的静态文件时,服务器将会返回对应的文件。

具体来说,r.Static() 函数的第一个参数是路由路径,它定义了客户端访问静态文件的URL路径。而第二个参数是文件系统路径,它表示存放静态文件的实际文件系统路径。

在这个例子中,当客户端请求 /static/css/style.css 时,服务器将会返回 ./static/css/style.css 文件的内容。注意,实际路径是根据你的项目目录结构和文件系统中的实际路径来确定的。

确保你的静态文件目录存在,且路径正确。另外,确保你的路由配置正确,以便正确映射静态文件的路径。

如果问题仍然存在,可以提供更多的上下文信息,以便更具体地分析和解决这个问题。

                

希望对你有所帮助!如有任何其他问题,请随时提问。

  • 21
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
可以按照以下步骤来混合使用gin框架和grpc框架写一个web服务并运行: 1. 安装gin和grpc框架: ```bash go get -u github.com/gin-gonic/gin go get -u google.golang.org/grpc ``` 2. 创建一个grpc服务: ```go package main import ( "context" "fmt" "net" pb "path/to/your/proto" // 导入你的protobuf文件 "google.golang.org/grpc" ) type server struct{} func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) { return &pb.HelloReply{Message: "Hello " + in.Name}, nil } func main() { lis, err := net.Listen("tcp", ":50051") if err != nil { panic(err) } s := grpc.NewServer() pb.RegisterGreeterServer(s, &server{}) fmt.Println("grpc server started on port 50051...") if err := s.Serve(lis); err != nil { panic(err) } } ``` 3. 创建一个gin服务: ```go package main import ( "fmt" "github.com/gin-gonic/gin" ) func main() { router := gin.Default() router.GET("/", func(c *gin.Context) { c.JSON(200, gin.H{ "message": "Hello World!", }) }) fmt.Println("gin server started on port 8080...") router.Run(":8080") } ``` 4. 将grpc服务和gin服务结合: ```go package main import ( "context" "fmt" "net" pb "path/to/your/proto" // 导入你的protobuf文件 "github.com/gin-gonic/gin" "google.golang.org/grpc" ) type server struct{} func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) { return &pb.HelloReply{Message: "Hello " + in.Name}, nil } func main() { // grpc server go func() { lis, err := net.Listen("tcp", ":50051") if err != nil { panic(err) } s := grpc.NewServer() pb.RegisterGreeterServer(s, &server{}) fmt.Println("grpc server started on port 50051...") if err := s.Serve(lis); err != nil { panic(err) } }() // gin server router := gin.Default() router.GET("/", func(c *gin.Context) { // grpc client conn, err := grpc.Dial("localhost:50051", grpc.WithInsecure()) if err != nil { panic(err) } defer conn.Close() client := pb.NewGreeterClient(conn) // call grpc service resp, err := client.SayHello(context.Background(), &pb.HelloRequest{Name: "world"}) if err != nil { panic(err) } c.JSON(200, gin.H{ "message": resp.Message, }) }) fmt.Println("gin server started on port 8080...") router.Run(":8080") } ``` 5. 运行服务: ```bash go run main.go ``` 现在,你就可以通过访问 `http://localhost:8080`,来调用grpc服务并获取响应了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

匠造一知识

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值