go中实例化的结构体都不是保存在栈中的吗

在go中我们经常这么写:

type Mysql struct {
    //many properties
}
func newMysql() *Mysql {
    mysql := &Mysql{}
    return mysql
}

之间一直觉得没问题,但是今天联想到C语言,就愈发感到迷惑。
因为在函数中的变量都是保存在栈中的,随着函数执行完毕销毁。如果go中也这样的话,那么返回一个临时变量的指针就没有意义……但是这样在go中却可以正常执行,唯一可能的原因就是Mysql{}这个语句相当于malloc,不知道这样理解是不是对的…没有看过go的内核,求高人指教

查看回复