一尘不染

将nil字符串指针设置为空字符串

go

如何将类型中的字符串指针的引用值设置为空字符串?考虑以下示例:

package main

import (
    "fmt"
)

type Test struct {
    value *string
}

func main() {
    t := Test{nil}
    if t.value == nil {
        // I want to set the pointer's value to the empty string here
    }

    fmt.Println(t.value)
}

我尝试了&*运算符的所有组合都无济于事:

t.value = &""
t.value = *""
&t.value = ""
*t.value = ""

显然其中一些很愚蠢,但我没有发现尝试的危害。我也尝试使用reflectSetString

reflect.ValueOf(t.value).SetString("")

这会导致编译错误

恐慌:反映:使用不可寻址的值reflect.Value.SetString

我假设这是因为Go中的字符串是不可变的?


阅读 221

收藏
2020-07-02

共1个答案

一尘不染

字符串文字不可寻址

取包含空字符串的变量的地址:

s := ""
t.value = &s

或使用新的:

t.value = new(string)
2020-07-02