我想知道如何将*Type
替换为?里面的结构是什么地址?
//mycode.go
package main
import "fmt"
func out(k *Type) {
fmt.Println(k)
}
func main() {
type DataIP struct{ Title, Desc string }
Data := DataIP{
"Hello!",
"Hello GO!",
}
out(&Data)
}
答案 0 :(得分:1)
我不确定你的问题。
如果您希望out
仅适用于DataIP
类型的结构:
只需在main之外定义DataIP
,然后使用签名func out(k *DataIP)
。
如果你想要的是能够将任何类型的结构传递给out
:
在golang中,可以使用 interface 类型实现这种泛型方法。正如this answer所解释的,接口是一个包含两个数据字的容器:
接口可以容纳任何东西,并且通常用作函数参数,以便能够处理多种输入。
在您的情况下,您可以这样做:
func out(k interface{}) {
fmt.Println(k)
}
这将打印&{Hello! Hello GO!}
。如果您希望&
消失(即您总是传递指针),您可以使用reflect
包来解除"取消引用" k
:
func out(k interface{}) {
fmt.Println(reflect.ValueOf(k).Elem())
}
产生{Hello! Hello GO!}
如果你想要的是打印Data
的地址:
您可以将%p
模式与fmt.Printf
:
fmt.Printf("%p", &Data) // 0x1040a130
使用out
功能,您将获得:
func out(k interface{}) {
fmt.Printf("%p\n", k)
}
答案 1 :(得分:1)
您需要在main()
之外定义类型DataIP,类型在包的范围内,而不仅仅是在main函数内部:
package main
import "fmt"
type DataIP struct{ Title, Desc string }
func out(k *DataIP) {
fmt.Println(k)
}
func main() {
Data := DataIP{
"Hello!",
"Hello GO!",
}
out(&Data)
}