英文:
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)
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论