golang 调试中碰到的结构体指针和值指针使用不同

Golang结构体的值在引用变量和之变量都可以用a.b这样使用,所以在使用的时候这样写了

func test(u string) (bi *Str) {
    bi.Em = ui.em
    bi.E2 = ui.E2
    return
}

然后返回

invalid memory address or nil pointer dereference

百思不解后突然想是不是只改了只想值指针的值内容,结构体本身还是一个空指针,于是这样写

func test(u string) (bi *Str) {
    bi = &Str{
        Em:ui.em,
        E2:ui.E2
    }
    return
}

成功