Golang Go语言有没有大佬帮忙看看这个异常是怎么回事?

发布于 1周前 作者 yibo5220 来自 Go语言

在看 kubernetes 的 operator 开发教程,尝试着跑了下教程里面的代码,但是报错了(教程视频里面是正常运行的):

package main

import ( “context” v1 “k8s.io/api/core/v1” “k8s.io/apimachinery/pkg/runtime/schema” “k8s.io/client-go/kubernetes/scheme” “k8s.io/client-go/rest” “k8s.io/client-go/tools/clientcmd” )

func main() { //config config, err := clientcmd.BuildConfigFromFlags("", clientcmd.RecommendedHomeDir) config.GroupVersion = new(schema.GroupVersion) config.GroupVersion.Group = “” config.GroupVersion.Version = “v1” config.NegotiatedSerializer = scheme.Codecs config.APIPath = “/api” if err != nil { panic(err) }

//client
restClient, err := rest.RESTClientFor(config)
if err != nil {
	panic(err)
}

//get data
pod := v1.Pod{}
err = restClient.Get().Namespace("default").Resource("pods").Name("test").Do(context.TODO()).Into(&pod)
if err != nil {
	println(err)
} else {
	println(pod.Name)
}

}

运行报错信息如下: panic: runtime error: invalid memory address or nil pointer dereference [signal SIGSEGV: segmentation violation code=0x2 addr=0x0 pc=0x102e432b8]

goroutine 1 [running]: main.main() /Users/xxx/main.go:15 +0x58

进程 已完成,退出代码为 2

补充说明:

关于第十五行的结构体定义如下:

type ContentConfig struct {
AcceptContentTypes string

ContentType string

GroupVersion *schema.GroupVersion

NegotiatedSerializer runtime.NegotiatedSerializer

}

我自己的本地运行环境是 MacOS12+GO1.18.2 。

尝试把第十五行改成config.GroupVersion = &v1.SchemeGroupVersion也不行,一样的报错信息。。。


Golang Go语言有没有大佬帮忙看看这个异常是怎么回事?

更多关于Golang Go语言有没有大佬帮忙看看这个异常是怎么回事?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

4 回复

显然 clientcmd.BuildConfigFromFlags 出错了,把 err 打出来

更多关于Golang Go语言有没有大佬帮忙看看这个异常是怎么回事?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


嗯。。刚刚看了下,把赋值语句放到 if err 前面去了。。

报错信息提示的很明确,访问了不存在的内存地址或者空指针,看不出来的话,建议用 ide 的 debug 一行一行的看。

当然可以帮你看看这个异常。不过由于我无法直接查看具体的错误信息和代码,我会提供一些常见的Golang异常排查方法和可能的原因,供你参考:

  1. 错误信息分析

    • 首先,仔细阅读异常信息,通常Golang的错误信息会指出问题发生的位置(文件名和行号),以及错误类型。
    • 如果错误信息中包含panic,那么可能是运行时检测到了不可恢复的错误,比如数组越界、空指针引用等。
  2. 代码审查

    • 检查触发异常的代码段,特别是错误信息中提到的文件和行号附近。
    • 确认所有变量在使用前都已正确初始化,避免空指针访问。
    • 检查数组、切片和映射的索引操作,确保没有越界。
  3. 环境依赖

    • 确认你的Golang环境(包括版本和依赖库)是否满足项目要求。
    • 如果你的项目依赖于外部服务或资源,检查这些服务或资源的状态是否正常。
  4. 编译和运行参数

    • 检查编译和运行时的参数设置,确保没有不当的配置导致异常。
  5. 使用调试工具

    • 使用go rungo build时的-race标志来检测数据竞争。
    • 使用Delve等调试工具逐步执行代码,观察变量的值变化。

如果以上方法仍然无法解决问题,你可以将具体的错误信息和相关代码片段贴出来,这样我可以提供更具体的帮助。

回到顶部