【问题标题】:Cannot convert (untyped string constant) to *string [duplicate]无法将(无类型字符串常量)转换为 *string [重复]
【发布时间】:2020-04-03 02:46:45
【问题描述】:
persistentvolumeclaim := &apiv1.PersistentVolumeClaim{
        ObjectMeta: metav1.ObjectMeta{
            Name: "mysql-pv-claim",
        },
        Spec: apiv1.PersistentVolumeClaimSpec{
            StorageClassName: "manual",
            },
    }

StorageClassName 参数采用指向字符串的指针,但是当我将字符串 "manual" 传递给它时编译器会出错。

【问题讨论】:

    标签: string go


    【解决方案1】:

    You cannot get the address of a string constant/literal,但如果你有一个 string 局部变量(设置为你想要的值),你可以传递那个局部的地址:

    首先声明一个 string 本地并为其分配常量字符串文字,然后使用 & 运算符将该本地的地址作为参数参数传递:

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

    【讨论】:

    • 现在在这一行显示错误:- manualStr := "manual"
    • @manjeet 我的错,我上次使用 Go 已经有一段时间了。我已经更新了我的答案。
    【解决方案2】:

    使用utils.StringPtr:

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

    【讨论】:

    • 现在它显示:- 未声明的名称:utils。我必须为此导入什么包。导入此包时显示错误:“github.com/kubernetes/utils/pointer”
    • 不要导入整个包以获得单行功能。如果需要多次执行此操作,可以在代码中编写该函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-17
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    • 1970-01-01
    • 1970-01-01
    • 2015-11-09
    相关资源
    最近更新 更多