将指针切片追加到另一个指针切片 Go

Append slice of pointer into another slice of pointer Go

提问人:aesy 提问时间:4/11/2022 最后编辑:Adam Nierzadaesy 更新时间:4/14/2022 访问量:94

问:

假设我有这个结构

type Rectangle struct {
    height string
    width  string
}

我有一个测试变量,看起来完全是这样的

testvar := []*Rectangle{
    {
        height: "100",
        width:  "100",
    },
    {
        height: "200",
        width:  "200",
    },
}

我在这里尝试做的是将这个测试变量附加到另一个 []*Rectangle 中,并循环使用

anothervar:= []*Rectangle{}
for _, ptr := range testvar {
    fmt.Printf("%v\n", ptr)
    anothervar = append(anothervar, ptr)
    fmt.Printf("%p %v \n", anothervar, anothervar)
    fmt.Println()
}

最后,我得到了这个输出

我想打印的是另一个var地址和值

Go 指针 切片

评论

0赞 Tiago Peczenyj 4/11/2022
尝试将 ptr 设置为一个局部变量,例如:在 for 循环中ptr := ptr
0赞 aesy 4/11/2022
不起作用,我想打印它的地址和值
0赞 Tiago Peczenyj 4/11/2022
另一个想法是:a)使用喷出。Dump(需要外部库)或 b) 在您的类型中定义一个方法String() string
0赞 aesy 4/11/2022
先生,不能解决问题
1赞 rocka2q 4/11/2022
go.dev/play/p/d-nBrOKUB4p

答:

0赞 Minh 4/11/2022 #1

不确定这是你想要的。但是 Playground 代码的以下链接允许您使用非内置库打印结构指针数组的内容。

https://go.dev/play/p/tcfJYb0NnVf

您可能需要参考库以了解如何打印内容或仅使用库本身。

0赞 Toivo Lainevool 4/14/2022 #2

问题是您的切片是指向矩形的指针切片,因此当它被打印出来时,它正在打印出值,但这些值是指针。

您可以尝试如下操作来打印出值:

import (
    "fmt"
)

type Rectangle struct {
    height string
    width  string
}

func main() {
    
    testvar := []*Rectangle{
        {
            height: "100",
            width:  "100",
        },
        {
            height: "200",
            width:  "200",
        },
    }

    anothervar:= []*Rectangle{}
    for _, ptr := range testvar {
        fmt.Printf("%v\n", ptr)
        anothervar = append(anothervar, ptr)
        fmt.Printf("%p %+v \n", anothervar, anothervar)
        fmt.Println()
        printRectSlice(anothervar)
    }
}

func printRectSlice(s []*Rectangle) {
    fmt.Printf("{")
    for _, r := range s {
        fmt.Printf("%v", *r)
    }
    fmt.Println("}")
}