zhcn 编程语言 Golang Golang 流程控制 非公開: Go语言中的实例化结构体——为结构体分配和初始化内存

Go语言中的实例化结构体——为结构体分配和初始化内存

结构定义只是内存布局的描述。仅当结构体实例化时才分配内存。因此,只有在定义并实例化结构体后,结构体的字段才可用。

实例化是指按照结构体定义的格式创建一块内存区域,结构体实例与实例之间的内存是完全独立的。

Go语言可以通过多种不同的方式实例化结构,你可以根据自己的实际需要选择不同的方式来编写。

基本实例化形式

结构体本身是一种类型,可以通过以 var 的形式声明结构体来实例化,例如整数或字符串。

基本实例化格式为:

var ins T

其中 T 是结构体的类型,ins 是结构体的实例。

实例化结构体表示的点结构(Point)的过程请参考下面的代码。

 type Point struct {
    X int // X座標
    Y int // Y座標
}

var p Point
p.X = 10
p.Y = 20 

此示例使用.来访问结构体的成员变量,例如pXpY 。将成员变量分配给结构与分配常规变量相同。

创建指针类型结构体

Go语言还允许使用new关键字实例化类型(包括结构体、整数、浮点数、字符串等),结构体实例化后形成指针类型结构体。

使用new时的格式为:

ins := new(T)

的:

  • T 是一种类型,例如结构体、整数或字符串。
  • ins:类型T被实例化并存储在ins变量中。 ins 的类型为 *T,属于指针。

在 Go 语言中,您可以使用 访问结构体指针的成员.就像访问常规结构体一样。

以下示例定义了一个 Player 结构。玩家有名字、生命值和魔法值。实例化Player结构后,您可以为其成员赋值。代码是:

 type Player struct{
    Name string
    HealthPoint int
    MagicPoint int
}

tank := new(Player)
tank.Name = "キャノン"
tank.HealthPoint = 300 

由 new 实例化的结构体实例的成员分配与基本实例化相匹配。

Go语言和C/C++

在C/C++语言中,使用new实例化类型后,访问其成员变量时必须使用->运算符。

Go 语言仍然允许您在访问结构体指针的成员变量时使用.这是因为Go语言使用了语法糖技术来让开发者更容易地访问结构体指针中的成员变量。 .Name 转换为格式 (*ins).Name。

获取结构体的地址并实例化它。

在Go语言中,当对结构体进行&地址操作时,被认为是该类型的新实例化操作,地址的形式为:

ins := &T{}

的:

  • T代表结构类型。
  • ins 是 *T 类型(指针类型)的结构体实例。

下面利用这个结构体定义一条命令行指令(Command),包括其名称、变量关联、注释等,实例化命令的指针地址,并完成赋值过程。

 type Command struct {
    Name string    // コマンド名
    Var *int      // コマンドにバインドされた変数
    Comment string // コマンドのコメント
}

var version int = 1

cmd := &Command{}
cmd.Name = "version"
cmd.Var = &version
cmd.Comment = "バージョンを表示する" 

代码说明如下:

  • 第 1 行定义了表示命令行命令的命令结构。
  • 第 3 行(绑定到命令的变量)使用整数指针绑定指针。命令值可以随时与绑定值同步。
  • 第 7 行,命令绑定的目标整型变量:版本号。
  • 第 9 行获取结构体的地址并实例化它。
  • 第 10-12 行初始化成员字段。

地址实例化是结构体实例化中使用最广泛的方法。可以使用函数来封装上面的初始化过程。代码是:

 func newCommand(name string, varref *int, comment string) *Command {
    return &Command{
        Name:    name,
        Var:     varref,
        Comment: comment,
    }
}

cmd = newCommand(
    "version",
    &version,
    "バージョンを表示する",
) 

《Go语言实例化结构体——为结构体分配内存并初始化》浅显易懂的讲解!您必须观看的最佳 2 个视频

プログラミング学習:構造体をポケモンで説明する。
https://www.youtube.com/watch?v=uF-RiGlVmvw&pp=ygVqIEdvIOiogOiqnuOBruOCpOODs-OCueOCv-ODs-OCueWMluan i-mAoOS9kyAtIOani-mAoOS9k-OBq-ODoeODouODquOCkuWJsuOCiuW9k-OBpuOBpuWineacn-WMluOBmeOCiyZobD1KQQ%3D%3D
【たった1時間で学べる】Go言語のプログラミング初心者向けの超入門講座【文字書き起こし、ソースコードも完全無料!】
https://www.youtube.com/watch?v=kPXfMFJ0oIE&pp=ygVqIEdvIOiogOiqnuOBruOCpOODs-OCueOCv-ODs-OCueWMluan i-mAoOS9kyAtIOani-mAoOS9k-OBq-ODoeODouODquOCkuWJsuOCiuW9k-OBpuOBpuWineacn-WMluOBmeOCiyZobD1KQQ%3D%3D
结构定义只是内存布局的描述。仅当结构体实例化时才分配内存。因此,只有在定义并实例化结构体后,结构体的字段才可用。

实例化是指按照结构体定义的格式创建一块内存区域,结构体实例与实例之间的内存是完全独立的。

Go语言可以通过多种不同的方式实例化结构,你可以根据自己的实际需要选择不同的方式来编写。

基本实例化形式

结构体本身是一种类型,可以通过以 var 的形式声明结构体来实例化,例如整数或字符串。

基本实例化格式为:

var ins T

其中 T 是结构体的类型,ins 是结构体的实例。

实例化结构体表示的点结构(Point)的过程请参考下面的代码。

 type Point struct {
    X int // X座標
    Y int // Y座標
}

var p Point
p.X = 10
p.Y = 20 

此示例使用.来访问结构体的成员变量,例如pXpY 。将成员变量分配给结构与分配常规变量相同。

创建指针类型结构体

Go语言还允许使用new关键字实例化类型(包括结构体、整数、浮点数、字符串等),结构体实例化后形成指针类型结构体。

使用new时的格式为:

ins := new(T)

的:

  • T 是一种类型,例如结构体、整数或字符串。
  • ins:类型T被实例化并存储在ins变量中。 ins 的类型为 *T,属于指针。

在 Go 语言中,您可以使用 访问结构体指针的成员.就像访问常规结构体一样。

以下示例定义了一个 Player 结构。玩家有名字、生命值和魔法值。实例化Player结构后,您可以为其成员赋值。代码是:

 type Player struct{
    Name string
    HealthPoint int
    MagicPoint int
}

tank := new(Player)
tank.Name = "キャノン"
tank.HealthPoint = 300 

由 new 实例化的结构体实例的成员分配与基本实例化相匹配。

Go语言和C/C++

在C/C++语言中,使用new实例化类型后,访问其成员变量时必须使用->运算符。

Go 语言仍然允许您在访问结构体指针的成员变量时使用.这是因为Go语言使用了语法糖技术来让开发者更容易地访问结构体指针中的成员变量。 .Name 转换为格式 (*ins).Name。

获取结构体的地址并实例化它。

在Go语言中,当对结构体进行&地址操作时,被认为是该类型的新实例化操作,地址的形式为:

ins := &T{}

的:

  • T代表结构类型。
  • ins 是 *T 类型(指针类型)的结构体实例。

下面利用这个结构体定义一条命令行指令(Command),包括其名称、变量关联、注释等,实例化命令的指针地址,并完成赋值过程。

 type Command struct {
    Name string    // コマンド名
    Var *int      // コマンドにバインドされた変数
    Comment string // コマンドのコメント
}

var version int = 1

cmd := &Command{}
cmd.Name = "version"
cmd.Var = &version
cmd.Comment = "バージョンを表示する" 

代码说明如下:

  • 第 1 行定义了表示命令行命令的命令结构。
  • 第 3 行(绑定到命令的变量)使用整数指针绑定指针。命令值可以随时与绑定值同步。
  • 第 7 行,命令绑定的目标整型变量:版本号。
  • 第 9 行获取结构体的地址并实例化它。
  • 第 10-12 行初始化成员字段。

地址实例化是结构体实例化中使用最广泛的方法。可以使用函数来封装上面的初始化过程。代码是:

 func newCommand(name string, varref *int, comment string) *Command {
    return &Command{
        Name:    name,
        Var:     varref,
        Comment: comment,
    }
}

cmd = newCommand(
    "version",
    &version,
    "バージョンを表示する",
) 

《Go语言实例化结构体——为结构体分配内存并初始化》浅显易懂的讲解!您必须观看的最佳 2 个视频

プログラミング学習:構造体をポケモンで説明する。
https://www.youtube.com/watch?v=uF-RiGlVmvw&pp=ygVqIEdvIOiogOiqnuOBruOCpOODs-OCueOCv-ODs-OCueWMluan i-mAoOS9kyAtIOani-mAoOS9k-OBq-ODoeODouODquOCkuWJsuOCiuW9k-OBpuOBpuWineacn-WMluOBmeOCiyZobD1KQQ%3D%3D
【たった1時間で学べる】Go言語のプログラミング初心者向けの超入門講座【文字書き起こし、ソースコードも完全無料!】
https://www.youtube.com/watch?v=kPXfMFJ0oIE&pp=ygVqIEdvIOiogOiqnuOBruOCpOODs-OCueOCv-ODs-OCueWMluan i-mAoOS9kyAtIOani-mAoOS9k-OBq-ODoeODouODquOCkuWJsuOCiuW9k-OBpuOBpuWineacn-WMluOBmeOCiyZobD1KQQ%3D%3D