首页 > 其他分享 >GO 学习笔记之零 (三)常见问题处理集锦

GO 学习笔记之零 (三)常见问题处理集锦

时间:2024-12-27 16:21:00浏览次数:4  
标签:engine 常见问题 ShipModel controller 集锦 GO gin 全局变量 com

1、Golang如何解决case-insensitive import collision问题

1.1 现象

1.2 解决方法

    该问题产生说明在所有go文件中引入包时,存在 ShipModel/Radar 和 ShipModel/radar 两种写法,需要统一。

     对于VSCODE工具,可以在 全局文件中搜索 ShipModel/Radar 查看 写法是不是一样,然后 进行统一,要么全部改成 ShipModel/Radar 或者全部改成  ShipModel/rada

2、panic: runtime error: invalid memory address or nil pointer dereference [recovered]

2.1 现象

      代码中 在 test.go 定义了全局变量(类型为自定义类型 struct),且通过init函数对该函数进行了初始化赋值。但是在利用 gin 框架 编写了 controller 层之后 使用  net/http/httptest 进行了单元测试,单元测试代码如下:

package test

import (
    "net/http"
    "net/http/httptest"
    "testing"

    "github.com/gin-gonic/gin"
    "github.com/stretchr/testify/assert"
    "test.com/pkg/server"

    "test.com/internal/controller"
)

func initEngine() *gin.Engine {
    engine := server.Register()
    for _, _method := range controller.RegisterFuncs {   //其中 _method 方法是 将 controller接口全部注册到 engine 引擎中,直接调用方法的时候,方法中会去执行全局变量对应类型的方法,但是此时提示 全局变量中的各个属性都是 nil。 造成单元测试执行失败
        _method(engine)
    }
    return engine
}

func TestHelloRoute(t *testing.T) {
    router := initEngine()

    w := httptest.NewRecorder()
    req, _ := http.NewRequest("GET", "/api/backup/hello", nil)
    router.ServeHTTP(w, req)

    assert.Equal(t, 200, w.Code)
    //assert.Equal(t, "pong", w.Body.String())
}

 

 

2.2 解决方法 

 经过百度查找资料 发现产生的原因是,通过 init() 函数初始化 全局变量时使用了 :=  导致的,需要更改成 = ,如果使用  := 表示还是局部变量

具体可参考资料: golang全局变量的一个坑,main中无法获取init初始化的变量 - 大墨垂杨 - 博客园      其中有详细说明

 

标签:engine,常见问题,ShipModel,controller,集锦,GO,gin,全局变量,com
From: https://www.cnblogs.com/sandyflower/p/18636018

相关文章

  • Python作业有效性评价系统(Pycharm Flask Django Vue mysql)
    文章目录项目介绍和开发技术介绍具体实现截图开发技术开发与测试:设计思路系统测试可行性分析核心代码部分展示文章目录/写作提纲参考源码/演示视频获取方式项目介绍和开发技术介绍通过开发人员和系统使用方的沟通,本系统的用户主要有如下几类,教师和学生。(1)教师子系......
  • Pycharm 2024.3 安装详细教程与激活方法(附常见问题解决)
    Pycharm概述Pycharm是JetBrains公司推出的一款功能强大的Python集成开发环境(IDE),凭借其丰富的功能和工具集,极大地提升了开发者的编程效率和工作体验。温馨提示:本文中的方法仅供学习交流使用,如果条件允许,请支持正版软件。删除旧版本Pycharm如果您的电脑中已经安装了旧版本的......
  • Clion 2024.3完整版的安装教程(附激活,常见问题处理)
    卸载老版本Clion首先,如果小伙伴的电脑上有安装老版本的Clion,需要将其彻底卸载掉,如下所示(没有安装则不用管,直接安装即可):TIP:如果你之前使用过本站提供的 激活到2025年版本脚本,需要执行对应卸载脚本/适用2024版本/JetBrains2023最新全家桶/jetbra/scripts/uninstall-......
  • timeago.js-将datetime时间转化为模糊时间的js工具库
    timeago.js是一个非常简洁、轻量级、不到2kb的很简洁的Javascript库,用来将datetime时间转化成类似于***时间前的描述字符串,例如:“3小时前”。本地化支持,默认自带中文和英文语言,基本够用;之前xxx时间前、xxx时间后;支持自动实时更新;支持npm方式和浏览器script方式;测试用......
  • GO 学习笔记之三 基础语法(5) 切片
    一、定义Go数组的长度不可改变,在特定场景中这样的集合就不太适用,Go中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。其存在容量和长度的说法,长度是实际数据的长度,容量是可容纳的数组长度。容量......
  • 马斯克新logo亮相!如何结合品牌logo打造出彩的网站设计?
    近日,马斯克旗下xAI公司的人工智能产品Grok引发热议,其新LOGO更是吸引了众多目光。这个新LOGO通过圆环与斜线的巧妙结合,传递出“突破”与“连接”的品牌精神,彰显了马斯克品牌中“前沿科技”的核心属性,其简洁有力的设计风格让人印象深刻。对于任何品牌而言,logo都......
  • [Paper Reading] StegoType: Surface Typing from Egocentric Cameras
    目录StegoType:SurfaceTypingfromEgocentricCamerasTL;DRData数据采集设备开环数据收集闭环数据收集数据容错机制OracleMethodInputFeaturesBackboneDataLossExperiment效果可视化总结与思考相关链接Relatedworks中值得深挖的工作资料查询StegoType:SurfaceTypingfrom......
  • Java和Go语言的优劣势对比
    文章目录Java和Go语言的优劣势对比一、引言二、设计哲学与语法特性1、设计哲学2、语法特性三、性能与内存管理1、性能2、内存管理和垃圾回收四、并发编程模型五、使用示例1、Go语言示例代码2、Java语言示例代码六、对比表格七、总结Java和Go语言的优劣势对比一、......
  • LeetCode - Google 校招100题 第8天 图(Graph) (2题)
    欢迎关注我的CSDN:https://spike.blog.csdn.net/本文地址:https://spike.blog.csdn.net/article/details/144744820LeetCode合计最常见的112题:校招100题第1天链表(List)(19题)校招100题第2天树(Tree)(21题)校招100题第3天动态规划(DP)(20题)校招100题第4天......
  • 深度解析 Python 网络框架:Django、Tornado、Flask 和 Twisted
    目录引言Python网络框架概述Django:全栈开发的首选框架3.1Django的核心特性3.2Django的应用场景3.3优势与不足Tornado:高性能的异步框架4.1Tornado的异步特性4.2Tornado的应用场景4.3优势与不足Flask:轻量级的微框架5.1Flask的核心特性5.2Flask的应用场景......