
Golang 面向对象编程 结构体 struct
文章平均质量分 72
gooooooooo
富士康质检员张全蛋
人生实难,唯有自渡。只有接受了真实现的现状和真实的自己,调整好心态,才能脚踏实地的活着,然后去发现角落处的那些惊喜和美好,去相信一切苦难困境都会过去!“即使身处阴沟,也要记得仰望星空”。
展开
-
Golang Struct 继承的深入讨论和细节
(5)结构体嵌入两个(或多个)匿名结构体,如两个匿名结构体有相同的字段和方法(同时结构体本身没有同名的字段和方法),在访问时,就必须明确指定匿名结构体名字,否则编译报错。(6)如果一个struct嵌套了一个有名结构体,这种模式就是组合,如果是组合关系,那么在访问组合的结构体的字段或方法时,必须带上结构体的名字。(4)当结构体和匿名结构体有相同的字段或者方法时,编译器采用就近访问原则访问,如希望访问匿名结构体的字段和方法可以通过匿名结构体名来区分。2)匿名结构体字段访问可以简化,如图。原创 2023-10-26 19:53:45 · 1187 阅读 · 0 评论 -
Golang struct 结构体 面向对象编程思想-抽象 理解抽象
当你将一类事物的属性和行为抽取出来之后,下一步就是将代码体现出来。提取出来,形成一个物理模型(模板),这种研究问题的方法称为抽象。我们在前面去定义一个结构体时候,实际上就是把一类事物的共有的。属性(字段)和行为(方法)原创 2023-09-14 09:16:43 · 403 阅读 · 0 评论 -
Golang struct 结构体注意事项和使用细节 内存、转换、序列化
可以看到指针的地址也是连续的。r1有两个*point类型,这个两个*Point类型的本身地址也是连续的,但是他们指向的地址不一定是连续。一个int类型刚好8个字节。可以看到结构体的字段在内存当中是连续分布的,通过地址的加减来找到对应的数据。字段名称,字段类型,字段个数都得一致才可以转。原创 2023-08-25 15:41:03 · 1110 阅读 · 0 评论 -
Golang struct 结构体指针类型 / 结构体值类型
在代码执行的时候先执行.的操作,然后再执行*的操作。已经p.age取出具体的值了,那么对具体的值做*号处理肯定是错误的。这样使用肯定是不对的,因为.的运算优先级要高,所以先会去执行p2.age,之后又取地址,所以这个就不行。当需要通过变量去修改另外一个结构体内容的时候,可以通过传递地址的方式来达到这个效果。结构体变量之间的赋值是值拷贝。原创 2023-08-10 15:48:09 · 889 阅读 · 0 评论 -
Golang struct 面向对象编程 概念
/1.使用变量的处理 这里会出现一个问题,如果猫多了会出现定义的很多变量,如果定义了猫其他的特性这些变量都需要变化。请编写一个程序,当用户输入小猫的名字时,就显示该猫的名字,1/年龄,颜色。因为猫猫有很多的属性,这些属性又属于同一个对象,这样分散不好管理数据。因为名字,年龄,颜色都是属于一只猫,但是这里是分开保存。还有一只叫小花,今年8岁,花色。2)如果我们希望对一只猫的属性(名字、年龄,颜色)造行操作(绑定方法),也不好处理。如果使用数组来解决,那么不仅仅猫猫的属性类型不一样,那么数组就解决不了。原创 2023-07-17 15:30:32 · 573 阅读 · 0 评论 -
类型的 String() 方法和格式化描述符
如果类型定义了 String() 方法,它会被用在 fmt.Printf() 中生成默认的输出:等同于使用格式化描述符 %v 产生的输出。还有 fmt.Print() 和 fmt.Println() 也会自动使用 String() 方法。从上面的例子也可以看到,格式化描述符 %T 会给出类型的完全规格,%#v 会给出实例的完整输出,包括它的字段(在程序自动生成 Go 代码时也很有用)。十之八九你会使用 String() 方法来定制类型的字符串形式的输出,换句话说:一种可阅读性和打印性的输出。转载 2023-04-17 22:49:21 · 195 阅读 · 0 评论 -
Golang struct 跨包 使用工厂方法创建结构体实例
试图 make() 一个结构体变量,会引发一个编译错误,这还不是太糟糕,但是 new() 一个映射并试图使用数据填充它,将会引发运行时错误!因为 new(Foo) 返回的是一个指向 nil 的指针,它尚未被分配内存。Go 语言不支持面向对象编程语言中那样的构造子方法,但是可以很容易的在 Go 中实现 “构造子工厂” 方法。如果想知道结构体类型 T 的一个实例占用了多少内存,可以使用:size := unsafe.Sizeof(T{})。强制用户使用工厂方法,从而使类型变成私有的,就像在面向对象语言中那样。原创 2023-04-12 17:09:21 · 539 阅读 · 0 评论 -
Golang Struct 带标签的结构体
比如:在一个变量上调用 reflect.TypeOf() 可以获取变量的正确类型,如果变量是一个结构体类型,就可以通过 Field 来索引结构体的字段,然后就可以使用 Tag 属性。结构体中的字段除了有名字和类型外,还可以有一个可选的标签(tag):它是一个附属于字段的字符串,可以是文档或其他的重要标记。标签的内容不可以在一般的编程中使用,只有包 reflect 能获取它,它可以在运行时自省类型、属性和方法,原创 2023-04-10 10:11:50 · 246 阅读 · 0 评论 -
Golang Struct基础 结构体定义/成员初始化
type T struct {a, b int} 也是合法的语法,它更适用于简单的结构体。结构体里的字段都有 名字,像 field1、field2 等,如果字段在代码中从来也不会被用到,那么可以命名它为 _。结构体的字段可以是任何类型,甚至是结构体本身,也可以是函数或者接口。数组可以看作是一种结构体类型,不过它使用下标而不是具名的字段。原创 2023-03-17 10:36:54 · 3228 阅读 · 0 评论 -
Golang Struct 继承 匿名字段/内嵌结构体
在golang中,采用匿名结构体字段来模拟继承关系。这个时候,可以说 Student 是继承自 Person .可以看到继承之后的结构体拥有继承结构体的属性和方法。其实本质上是嵌套关系,它帮你简化了。原创 2023-03-14 15:47:39 · 1079 阅读 · 0 评论 -
Golang struct 面向对象编程封装 工厂模式
面向对象特征,继承,封装,多态。在go中是使用技巧来实现这三个特征。封装-工厂模式golang的结构体没有构造函数(比如get set函数去设置你的结构体属性),通常可以使用工厂模式来解决这个问题。(当我去跨包使用的时候,虽然结构体尽量大写,但是有些时候需要作为私密的变量,我不想让其跨包使用,那么变量名称就小写,但是有些时候跨包还是想拿到这个东西,那么就可以封装一个方法)如果包里面的结构体变量首字母小写,引入后,不能直接使用,可以工厂模式解决(封装成方法,通过方法跨包调用)。原创 2023-03-14 15:02:19 · 319 阅读 · 0 评论 -
Golang Struct结构体操作
什么是结构体Go语言中没有“类”的概念,也不支持“类”的继承等面向对象的概念。(继承,多态,封装)Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性。原创 2023-03-13 15:26:43 · 697 阅读 · 0 评论 -
Golang 结构体struct 深浅拷贝
结构体浅拷贝和深拷贝我们在开发中经常到把一个变量复制给另一个变量,那么这个过程,可能是深拷贝。把一个变量赋值给新的变量的时候,可能涉及到深浅拷贝。浅拷贝:复制的对象是指针,新老对象指向同一块内存区域,a修改字段,b中字段也跟着变了。内存销毁的时候也是一致的。深拷贝:拷贝的是数据本身,会新创建一个对象,指向完全不同的内存地址,既然内存地址不同,那么修改也互不影响。定义和区别浅拷贝的是数据地址,只复制指向对象的指针,此时新对象和老对象指向的内存地址是一样的,新对象值修改时老对象也原创 2022-02-09 15:38:45 · 4770 阅读 · 0 评论 -
Golang 结构体 struct 成员可见性(实现封装)
在定义结构体或者结构体中的一些字段,这些是否可以在包内和包外访问到结构体本身的可访问性不同包结构体本身的可访问性:结构体大写可以被其他包访问到,结构体小写是不能够被其他包访问到。下面就是在一个包_022_2当中定义一个结构体,Person11大写的时候外部包可以访问到,person11小写的时候外部包不可以访问到。package _022_2type Person11 struct{ Name string Age int}package main原创 2022-02-08 10:20:20 · 2134 阅读 · 0 评论 -
Go 聚合类型 结构体 struct 定义 声明 初始化 嵌入
结构体定义为什么需要结构体?在go当中去描述复杂的实体,之前学到的数组,切片,map。数组和切片只能保存相同的数据类型,比如一组int,一组string。这些还不能描述复杂结构的实体。所以结构体的特点是go语言当中,数组可以存储同一类型的数据,在结构体当中可以为不同项定义不同数据类型。 结构体目的就是把数据聚集到一起,以便更加便捷的操作这些数据总结就是:定义不同的数据类型,并聚集在一起,描述复杂的实体。在go中定义结构体type Person struct {}字段说明..原创 2022-01-20 11:52:34 · 1793 阅读 · 0 评论 -
Golang struct 和 interface:结构体与接口都实现了哪些功能?
结构体结构体定义结构体是一种聚合类型,里面可以包含任意类型的值,这些值就是我们定义的结构体的成员,也称为字段。在 Go 语言中,要自定义一个结构体,需要使用 type+struct 关键字组合。在下面的例子中,我自定义了一个结构体类型,名称为 person,表示一个人。这个 person 结构体有两个字段:name 代表这个人的名字,age 代表这个人的年龄。type person struct { name string age uint}在定义结构体时,字转载 2021-12-13 14:37:49 · 1936 阅读 · 0 评论