首页 > 解决方案 > 更改类型后获取地址

问题描述

我是 Go 新手,我试图从开发人员的角度找到一种方便的方法,以便在更改类型后获取对象的地址。

考虑这两种新类型:

type specialString string
type nestedStruct struct {
    name *specialString
}

我发现填充 nestedStruct 的规范方法是:

str := "James"
specStr := specialString(str)
nested := nestedStruct{
    name: &specStr,
}

有没有办法省略 的声明specStr,然后只在一个地方使用?我试过这个,但它触发了一个语法错误(这是什么逻辑原因?):

//Syntax error
nested := nestedStruct{
    name: &specialString(str),
}

任何帮助,将不胜感激。

标签: go

解决方案


您不能获取任意操作的地址,包括类型转换。有关详细信息,请参阅如何在 Go 中存储对操作结果的引用?; 并在 go 中找到常量的地址

如果转换字符串文字,则可以省略局部变量之一:

specStr := specialString("James")
nested := nestedStruct{
    name: &specStr,
}

如果您已经有一个string类型的变量并且您想省略第二个变量(specialString类型),那么获取现有string变量的地址,并将其转换为*specialString

str := "James"
nested = nestedStruct{
    name: (*specialString)(&str),
}

在Go Playground上尝试这些示例。

如果您想省略局部变量,请参阅以下选项的答案:How do I do a literal *int64 in Go?


推荐阅读