将匿名全局结构清零

我有以下代码


package main


import (

    "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 {}


长风秋雁
浏览 129回答 2
2回答

隔江千里

如果您有一个 struct 类型的变量,您可以通过为其类型分配零值来将其归零。正如其他人所指出的,由于您有一个匿名类型的变量,因此复合文字必须重复结构定义:// Reset with struct literal:dog = struct {    Name  string    Age   int    Breed string}{}这很不方便。所以只需使用命名类型。你也可以通过反射来做到这一点:// Reset using reflection:p := &dogv := reflect.ValueOf(p).Elem()v.Set(reflect.New(v.Type()).Elem())这里的优点是我们不必重复结构定义,并且该解决方案适用于所有结构(以及其他类型)。但是使用反射比较慢。同样,只需使用命名类型。

一只名叫tom的猫

您提出的解决方案有什么问题?这就是你将如何做到的:package mainimport (    "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)}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go