Notes
Go
结构体

结构体

Go 中的 slice、map 和 channel 等复杂数据类型都有对应的结构体类型,这些结构体类型是 Go 语言内建的类型,可以直接使用。同时我们也可以使用 struct 关键字来定义自己的结构体类型。

自定义数据类型

Go 语言中可以使用 type 关键字来定义自定义数据类型。

type newType existType

新的类型 newType 将继承已存在的类型 existType 的数据结构,同时适用于 existType 的函数也将适用于 newType。但是方法不会继承。

结构体的创建

type newType struct {
    field1 type1
    field2 type2
    ...
}

例如创建一个 Person 结构体:

type Person struct {
    name string
    age int
}

这让我们想到了 C 语言中的结构体。

struct Person {
    char name[20];
    int age;
};

以及 TypeScript 中的接口。

type Person {
    name: string;
    age: number;
}

使用结构体

package main
 
import "fmt"
 
type Person struct {
    Name string
    Age int
}
 
func main() {
    var p1 = Person{
        Name: "张三",
        Age: 18,
    }
    fmt.Println(p1)
}

或者初始时不进行赋值,使用默认值。

var p1 = Person{}
p1.Name = "张三"
p1.Age = 18

可以使用 new 关键字创建一个结构体实例,返回的是一个指向结构体的指针。

var p2 = new(Person)

权限控制

Go 语言中,结构体的字段名首字母的大小写决定了该字段的访问权限。小写的字段名表示私有字段,只能在定义该结构体的包中访问,在其让包中无法访问。