在看 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
也不行,一样的报错信息。。。
1
colatin 2022-05-30 14:59:33 +08:00
显然 clientcmd.BuildConfigFromFlags 出错了,把 err 打出来
|
3
muchengxue 2022-05-30 15:15:11 +08:00
报错信息提示的很明确,访问了不存在的内存地址或者空指针,看不出来的话,建议用 ide 的 debug 一行一行的看。
|