2.2Go类型之结构(Struct)

1.结构声明

type 结构名 struct {
    //结构体
}

2.成员定义

//字段
type 结构名 struct {
    [字段名1] 类型1 [字符串字面量1]
    [字段名2] 类型2 [字符串字面量2]
    [字段名N] 类型N [字符串字面量N]
}
//方法
func (实例名 结构名) 方法名(值形参名 类型, 切片形参名 ...类型) 返回类型 {
    //方法体
}

3.继承

3.1方法继承

一个子结构可以直接继承自多个父结构,但如果多个父结构存在同名方法且子结构未覆盖,访问时会报错,此时必须使用“调用父结构的方法”章节的语法实现访问。

子结构会直接继承父结构中可继承的方法,间接继承祖父结构中可继承的方法,以此类推,直至没有可继承的方法。

注意:从父结构中继承过来的方法无需在子结构中重新声明,否则会发生覆盖。

type 子结构名 struct {
    父结构名
}

3.2方法覆盖(Override)

如果从父结构中继承过来的方法在子结构中重新声明,则在子结构中重新声明的方法会覆盖从父结构中继承过来的方法。

注意:只需要方法名相同,就会发生覆盖。

注意:覆盖并不会影响父结构中原来的方法。

type A struct {}

func (a A) f() int {
    return 1
}

type B struct {
    A
}

func (b B) f() int {
    return 2
}

func main() {
    b := B{}
    fmt.Println(b.f())  // 2
}

3.3调用父结构的方法

子实例名.父结构名.父方法名()

4.创建实例

4.1创建实例

//无字段
var 实例名 = 结构名{}

//有字段
//按位置方式
var 实例名 = 结构名{值1, 值2, 值N}
//按命名方式
var 实例名 = 结构名{字段名1: 值1, 字段名2: 值2, 字段名N: 值N}

4.2方法重载(Overload)

Go 语言不支持方法重载。

5.访问成员

//外部调用
实例名.字段名
实例名.方法名()
//内部调用
实例名.字段名
实例名.方法名()

原创文章,作者:huoxiaoqiang,如若转载,请注明出处:https://www.huoxiaoqiang.com/go/golang/36915.html

(0)
huoxiaoqiang的头像huoxiaoqiang
上一篇 2025年3月1日 21:22
下一篇 2025年3月2日 16:28

相关推荐

  • 1.5Go语言的变量(Variable)

    1.变量声明 变量在赋值后可以通过重新赋值更改其值。 2.变量作用域 3.变量引用表达式

    Go语言教程 2025年2月5日
    0130
  • 2.6Go类型之切片(Slice)

    切片的索引是整数类型。 切片的索引是有序的。 切片的元素可以是任何 Go 数据类型,且必须都是同一个类型。 切片的元素的个数(长度)不可以动态改变,可以更改元素,不可以添加、删除元素。 切片的元素可以重复。 1.切片声明 2.访问切片 3.切片长度

    Go语言教程 2025年3月6日
    050
  • 1.4Go语言的类型(Type)

    1.整数(integer)类型 类型 范围 uint uint32(32位平台) 或 uint64(64位平台) uint8 0 ≤ n ≤ 255 uint16 0 ≤ n ≤ 65535 uint32 0 ≤ n ≤ 4294967295 uint64 0 ≤ n ≤ 18446744073709551615 in…

    Go语言教程 2025年2月4日
    0120

发表回复

登录后才能评论