K8s客户端空指针解引用

huangapple go评论85阅读模式
英文:

K8s client nullptr dereference

问题

根据你提供的代码,我看到在_ = c.Create(context.Background(), pod)这一行出现了空指针解引用错误。你认为这是有道理的,因为你声明了变量c,但没有对其进行初始化。然而,示例代码也是这样做的。这里到底发生了什么呢?

根据示例代码,c是一个client.Client类型的变量,它是通过某种方式创建的。在示例代码中,我们无法看到c的初始化过程,因此我们无法确定它是如何被赋值的。可能是在示例代码的其他部分进行了初始化,或者在示例代码之前的代码中进行了初始化。

要解决这个问题,你可以查看示例代码的其他部分,看看是否有对c进行初始化的代码。如果没有,你可以尝试在使用c之前手动初始化它,以确保它不为空。

英文:

Following the k8s/controller-runtime/client example code (see here), which goes a bit like this

var c client.Client

func main() {
	// Using a typed object.
	pod := &corev1.Pod{
		ObjectMeta: metav1.ObjectMeta{
			Namespace: "namespace",
			Name:      "name",
		},
		Spec: corev1.PodSpec{
			Containers: []corev1.Container{
				{
					Image: "nginx",
					Name:  "nginx",
				},
			},
		},
	}
	// c is a created client.
	_ = c.Create(context.Background(), pod) // nil deref here  
}

I get a nullptr dereference on _ = c.Create(context.Background(), pod). To me this makes sense, since I declared c, but never initialised it. However the example code also does that. What is going on here?

答案1

得分: 1

正确的初始化客户端的方法可以在这里找到:https://pkg.go.dev/sigs.k8s.io/controller-runtime@v0.14.4/pkg/client#example-New

cl, err := client.New(config.GetConfigOrDie(), client.Options{})
if err != nil {
	fmt.Println("创建客户端失败")
	os.Exit(1)
}
英文:

The correct way to initialise the client can be found here: https://pkg.go.dev/sigs.k8s.io/controller-runtime@v0.14.4/pkg/client#example-New

cl, err := client.New(config.GetConfigOrDie(), client.Options{})
if err != nil {
	fmt.Println("failed to create client")
	os.Exit(1)
}

huangapple
  • 本文由 发表于 2023年2月17日 00:42:51
  • 转载请务必保留本文链接:https://go.coder-hub.com/75475388.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定