ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

速战速决 go - go 面向对象: 结构体(内嵌结构体,内嵌结构体实现类似继承的效果,内嵌匿名结构体,内嵌类型)

2022-02-08 14:35:15  阅读:157  来源: 互联网

标签:内嵌 struct21 xyz 3.14 go 结构


速战速决 go https://github.com/webabcd/GoSample
作者 webabcd

速战速决 go - go 面向对象: 结构体(内嵌结构体,内嵌结构体实现类似继承的效果,内嵌匿名结构体,内嵌类型)

示例如下:

oop/struct2.go

// go 面向对象 - 结构体(内嵌结构体,内嵌结构体实现类似继承的效果,内嵌匿名结构体,内嵌类型)

package oop

import "fmt"

func Struct2Sample() {
	struct2_sample1()
}

func struct2_sample1() {
	a := &struct22{}
	a.c = true
	a.a = 0     // 可以直接使用内嵌结构体的成员,当然也可以像这样写全了 a.struct21.a(如果成员名字有冲突,则必须按照这种方式使用)
	a.b = "abc" // 可以直接使用内嵌结构体的成员,当然也可以像这样写全了 a.struct21.b(如果成员名字有冲突,则必须按照这种方式使用)
	a.d.x = 123
	a.d.y = "xyz"
	a.float32 = 3.14 // 使用内嵌类型
	fmt.Println(a)   // &{true {0 abc} {123 xyz} 3.14}

	// 顺序初始化(所有成员都要初始化)
	b := &struct22{
		true,
		struct21{
			0,
			"abc",
		},
		// 内嵌匿名结构体的初始化
		struct {
			x int
			y string
		}{
			123,
			"xyz",
		},
		3.14,
	}
	fmt.Println(b) // &{true {0 abc} {123 xyz} 3.14}

	// 按 key/value 初始化(不要求所有成员都初始化)
	c := &struct22{
		c: true,
		struct21: struct21{
			0,
			"abc",
		},
		// 内嵌匿名结构体的初始化
		d: struct {
			x int
			y string
		}{
			123,
			"xyz",
		},
		float32: 3.14,
	}
	fmt.Println(c) // &{true {0 abc} {123 xyz} 3.14}

}

type struct21 struct {
	a int
	b string
}

type struct22 struct {
	c bool

	// 内嵌结构体(同类型的只能有一个)
	// 内嵌结构体可以实现类似继承的效果,这里相当于 Struct21 是基类,Struct22 是子类
	struct21

	// 内嵌匿名结构体
	d struct {
		x int
		y string
	}

	// 内嵌类型(同类型的只能有一个)
	float32
}

速战速决 go https://github.com/webabcd/GoSample
作者 webabcd

标签:内嵌,struct21,xyz,3.14,go,结构
来源: https://www.cnblogs.com/webabcd/p/go_oop_struct2.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有