登录
首页 >  Golang >  Go问答

为何包级指针变量未被初始化?

来源:stackoverflow

时间:2024-03-02 21:39:27 391浏览 收藏

本篇文章给大家分享《为何包级指针变量未被初始化?》,覆盖了Golang的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。

问题内容

在下面的代码中,router 是指向结构体的包级变量。该指针在 main 函数中初始化。但在initializeroutes函数中指针仍然为nil。

go版本go1.14.6 windows/amd64

package main

import (
    "github.com/gin-gonic/gin"
    "net/http"
)


var router *gin.Engine

func main() {
    router := gin.Default()
    router.LoadHTMLGlob("templates/*")
    initializeRoutes()
    router.Run()
}

func initializeRoutes() {
    fmt.Println(router)
    // here the router is nil
}

解决方案


您正在使用 main 中的 := 运算符隐藏全局变量 router

var router *gin.engine

func main() {
    router := gin.default()  // make a new variable called "router", shadowing the global var
    router.loadhtmlglob("templates/*")
    initializeroutes()
    router.run()
}

func initializeroutes() {
    fmt.println(router)  // this doesn't know about main's "router", so sees the global var
}

要解决此问题,请勿使用 := 运算符。使用普通的旧分配代替:

var router *gin.Engine

func main() {
    router = gin.Default()  // assigns to the global var
    router.LoadHTMLGlob("templates/*")
    initializeRoutes()
    router.Run()
}

func initializeRoutes() {
    fmt.Println(router)
}

有关此操作的更简单示例,请参阅 this playground code

终于介绍完啦!小伙伴们,这篇关于《为何包级指针变量未被初始化?》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布Golang相关知识,快来关注吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>