使用指向任何类型的指针的最佳方法是什么

问题描述 投票:0回答:1

我遇到了使用

any
类型的工作。一切都运行得很好,直到我尝试/不得不使用指向
any
(
*any
) 的指针。这是一个示例playground链接,代码也在这篇文章的底部。

如果我有一个已定义类型的结构,一切都很好。如果我将其更改为any(而不是指向它的指针),调用新方法也很简单。当然,检索实际值需要进行一些转换。 但是一旦我使用指向

any
的指针,我就必须将变量复制到
var xyz any
,并且为了返回,我还需要一些辅助变量。

是否有更好的方法来使用

dataThree
结构和相应的
func newThree(v *any) dataThree {...
函数,但仍保留它
*any
?某种反思会有帮助吗?

package main

import "fmt"

type Value struct {
    value int
}

/**
* type as pointer
*/

type dataOne struct {
    data *Value
}

func newOne(v *Value) dataOne {
    return dataOne{
        data: v,
    }
}

/**
* Any as value
*/

type dataTwo struct {
    data any
}

func newTwo(v Value) dataTwo {
    return dataTwo{
        data: v,
    }
}

/**
* Any as pointer
*/

type dataThree struct {
    data *any
}

func newThree(v *any) dataThree {
    return dataThree{
        data: v,
    }
}

func main() {
    one := Value{value: 1}
    myOne := newOne(&one)
    fmt.Println(myOne.data.value)

    two := Value{value: 2}
    myTwo := newTwo(two)
    fmt.Println(myTwo.data.(Value).value)

    three := Value{value: 3}
    var aT any
    aT = three
    myThree := newThree(&aT)
    myData := *myThree.data
    castAt := myData.(Value)
    fmt.Println(castAt.value)
}
go
1个回答
0
投票

在golang中,

any
interface{}
,相当于python和C#中的
object
,java中的
Object
,typescript中的
any
,你可以在里面存储任何东西。

而且

any
已经是一个引用类型。当您在 any 中存储值时,如果该值是非原始值(如结构体、切片等),它会在内部存储指向实际数据的指针。因此,拥有指向 any 的指针会增加不必要的间接级别。

基本上你永远不需要指向

any
的指针。相反,您可以在其中存储引用。

© www.soinside.com 2019 - 2024. All rights reserved.