Cannot convert (untyped string constant) to *string

Viewed 18236
persistentvolumeclaim := &apiv1.PersistentVolumeClaim{
        ObjectMeta: metav1.ObjectMeta{
            Name: "mysql-pv-claim",
        },
        Spec: apiv1.PersistentVolumeClaimSpec{
            StorageClassName: "manual",
            },
    }

StorageClassName parameter takes pointer to string, but compiler gives error when i'm passing string "manual" into it.

2 Answers

You cannot get the address of a string constant/literal, but if you have a string local variable (set to the value you want) you can then pass the address of that local:

Declare a string local first and assign the constant string literal to it, then pass the address of that local as the parameter argument with the & operator:

persistentvolumeclaim := &apiv1.PersistentVolumeClaim {

        manualStr := "manual"

        ObjectMeta: metav1.ObjectMeta {
            Name: "mysql-pv-claim",
        },
        Spec: apiv1.PersistentVolumeClaimSpec {
            StorageClassName: &manualStr,
        },
    }

Use utils.StringPtr:

persistentvolumeclaim := &apiv1.PersistentVolumeClaim{
        ObjectMeta: metav1.ObjectMeta{
            Name: "mysql-pv-claim",
        },
        Spec: apiv1.PersistentVolumeClaimSpec{
            StorageClassName: utils.StringPtr("manual"),
            },
    }
Related