Pointers Nil指针解引用尝试将指针复制到指针

Pointers Nil指针解引用尝试将指针复制到指针,pointers,go,memory,reference,pass-by-reference,Pointers,Go,Memory,Reference,Pass By Reference,我的以下代码工作正常: type Type struct { p string } func foo() { t := Type { p: "hola" } bar(&t) } var bar = func(t *Type) { t.p = "chau" } func Test1() { var baz *Type bar = func(t *Type) { baz = t } foo() fm

我的以下代码工作正常:

type Type struct {
    p string
}

func foo() {
    t := Type { p: "hola" }
    bar(&t)
}

var bar = func(t *Type) {
    t.p = "chau"
}

func Test1() {
    var baz *Type
    bar = func(t *Type) {
        baz = t
    }
    foo()
    fmt.Println(baz.p)
}
基本上,我模拟bar函数是为了知道函数
foo
在运行时传递的参数。现在,假设我想在另一个函数中提取模拟函数的逻辑,我应该怎么做?我尝试了以下操作,但得到了
无效的内存地址或零指针解引用

func mockedBar(b** Type) func(*Type) {
    return func(t *Type) {
        *b = t
    }
}

func Test2() {
    var baz **Type
    bar = mockedBar(baz)
    foo()
    fmt.Println((**baz).p)
}
使用以下命令:

var baz *Type
bar = mockedBar(&baz)
foo()
fmt.Println((*baz).p)

var
表示您将使用给定类型分配以下变量

var t Type
将分配类型的完整大小,例如24字节

var p*Type
将仅为指针本身分配4-8字节

var pp**Type
将分配相同的4-8字节,因为它是相同的指针,但指向另一个指针

要解决这个难题,您必须:

//分配一个对象并获取指向它的指针
p:=&类型{}
/*
它也相当于:
变量t型
p:=&t
*/
//把指针指向指针
pp:=&p

Hi@FooBarBazical欢迎来到Stackoverflow!请花点时间看看这一页。