为了账号安全,请及时绑定邮箱和手机立即绑定

将匿名全局结构清零

将匿名全局结构清零

Go
长风秋雁 2022-06-13 15:42:51
我有以下代码package mainimport (    "fmt")var dog struct {    Name  string    Age   int    Breed string}func main() {    dog.Name = "Pongo"    dog.Age = 7    dog.Breed = "Dalmatian"    fmt.Println(dog)    // Reset struct.    dog{} --- Problem point with error    fmt.Println(dog)    dog.Name = "Fluffy"    dog.Breed = "Poodle"    fmt.Println(dog)}我正在尝试清除重置中的全局结构。我知道我可以单独完成。我正在研究 golang 的做法,就像我们可以为 struct 做的那样,如下所示type Dog struct {    Name  string    Age   int    Breed string}dog = Dog {}
查看完整描述

2 回答

?
隔江千里

TA贡献1906条经验 获得超10个赞

如果您有一个 struct 类型的变量,您可以通过为其类型分配零值来将其归零。


正如其他人所指出的,由于您有一个匿名类型的变量,因此复合文字必须重复结构定义:


// Reset with struct literal:

dog = struct {

    Name  string

    Age   int

    Breed string

}{}

这很不方便。所以只需使用命名类型。


你也可以通过反射来做到这一点:


// Reset using reflection:

p := &dog

v := reflect.ValueOf(p).Elem()

v.Set(reflect.New(v.Type()).Elem())

这里的优点是我们不必重复结构定义,并且该解决方案适用于所有结构(以及其他类型)。但是使用反射比较慢。同样,只需使用命名类型。


查看完整回答
反对 回复 2022-06-13
?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

您提出的解决方案有什么问题?这就是你将如何做到的:


package main


import (

    "fmt"

)


type Dog struct {

    Name  string

    Age   int

    Breed string

}


var dog = Dog{}


func main() {

    dog.Name = "Pongo"

    dog.Age = 7

    dog.Breed = "Dalmatian"

    fmt.Println(dog)


    // Reset struct.

    dog = Dog{}

    fmt.Println(dog)


    dog.Name = "Fluffy"

    dog.Breed = "Poodle"

    fmt.Println(dog)

}


查看完整回答
反对 回复 2022-06-13
  • 2 回答
  • 0 关注
  • 128 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号