go 结构体手动销毁的方法问题

package main

import (
    "fmt"
)

type Data struct {
    a int
}

func (this *Data) Des() {
    this = nil
}

func main() {
    d := &Data{
        a: 1,
    }
    fmt.Println(d)
    d.Des()
    fmt.Println(d)
}

这段代码中this=nil为什么不起作用呢,变量d没有置nil

已邀请:

anoymouswho

赞同来自: dncmn

因为传递的是地址指向值的引用,指向结构体对象的指针值本身是拷贝传递的,你要改变地址需要两层指针。

package main

import (
    "fmt"
)

type Data struct {
    a int
}

func   Des(d **Data) {
   *d = nil
}

func main() {
    d := &Data{
        a: 1,
    }

    fmt.Println(d)
    Des(&d)
    fmt.Println(d)
}

FancyGo - Golang 服务器 游戏 fancygo.cn

赞同来自:

话说我如果就想在 (this *Data)Des(){} 方法里销毁,应该怎么写呢

DennisMao

赞同来自:

@FancyGo 当该指针外部没有引用的时候自动会被标记然后回收

要回复问题请先登录注册