内容简介:Go语言中,struct是一个非常重要的概念,它既是一种数据类型,也可以结合方法(一种特殊的函数),构建类似于OOP的类。不多说,先上这段代码中:Go语言虽然没有类的概念,但通过struct类型、匿名字段、方法和接口,简单地实现了类似于OOP中类、方法、继承等概念。
概述
Go语言中,struct是一个非常重要的概念,它既是一种数据类型,也可以结合方法(一种特殊的函数),构建类似于OOP的类。不多说,先上 代码 :
package main
import (
"fmt"
)
type A struct {
Name string
}
type B struct {
*A //匿名字段,以指针方式引用结构A
}
type C struct {
B //定义匿名字段,以值方式引用结构B
}
type Interfacer interface {
Get() string
Set(v string)
}
// 构建一个结构B
func NewB() *B {
var a = &A{}
return &B{A: a}
}
// 实现Interfacer中的Get
func (b *B) Get() string {
return b.A.Name
}
// 实现Interfacer中的Set
func (b *B) Set(v string) {
b.A.Name = v
}
func (b *B) Do() {
if b.A.Name == "" {
fmt.Println("Name is null.")
return
}
fmt.Printf("Hello, %s.\n", b.A.Name)
}
var _ Interfacer = new(B)
func TestImpl(i Interfacer) {
i.Set("changed")
fmt.Println("Get a name: " + i.Get())
}
func main() {
// 验证结构B
b1 := NewB()
b1.Do()
// 普通的赋值方法
b1.Name = "test"
b1.Do()
b2 := NewB()
b2.Set("sail")
b2.Do()
// 另一种结构赋值方法
b3 := B{A: &A{Name: "oly"}}
b3.Do()
TestImpl(&b3)
b3.Do()
var c C
c.A = &A{Name:"first"}
c.Name = "sam"
c.B.Do()
TestImpl(&c.B)
c.Set("other1")
c.Do()
c.B.Set("other2")
c.B.Do()
}
我的一些理解
这段代码中:
- 定义了A、B、C三个struct类型,一个Interfacer接口
- 结构A的作用主要是一个数据结构
- 结构B的作用相当于一个类,拥有Do()方法,并实现了Interfacer接口的Get和Set
- 结构C的作用相当于继承于B(B也相当于继承A)
-
结构B以指针的方式匿名引用了结构A,可以用
b.Name = "some_name"来赋值 -
结构C以值的方式匿名引用了结构B,可以用
c.Do()来调用B中的方法,由于B又匿名引用了A,还可以用c.Name = "sam"来赋值 -
由于结构B是以
(b *B)指针方式来实现接口Interfacer的,所以必须以指针方式来调用函数TestImpl(&b) -
golang与 ruby 类似,接口特性是ducking type,即“如果它走起来像鸭子,叫起来像鸭子(实现了接口要的方法),它就是一只鸭子(可以被赋值给接口的值)”。所以把&b作为参数传入到函数
TestImpl()中,一点问题没有。
结论
Go语言虽然没有类的概念,但通过struct类型、匿名字段、方法和接口,简单地实现了类似于OOP中类、方法、继承等概念。
以上所述就是小编给大家介绍的《关于golang中struct的一些理解》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 理解原型其实是理解原型链
- 要理解深度学习,必须突破常规视角去理解优化
- 深入理解java虚拟机(1) -- 理解HotSpot内存区域
- 荐 【C++100问】深入理解理解顶层const和底层const
- 深入理解 HTTPS
- 深入理解 HTTPS
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
社群营销与运营/互联网+新媒体营销规划丛书
秦阳//秋叶|总主编:秋叶 / 人民邮电出版社 / 2017-5 / 45.00元
《社群营销与运营》共分6章。第1章重点介绍了社群营销的起因、概念、构成、价值和评估模型,引导读者全面认识社群以及社群营销;第2章介绍了如何从无到有、从小到大建设一个社群的手法和注意事项;第3章重点介绍维持社群活跃度的各种技巧;第4章介绍了组织一场社群线下活动五个阶段的执行方案;第5章介绍了如何从无到有、由弱到强地构建社群运营团队;第6章介绍如何正确看待社群商业变现以及社群商业变现的三大模式和四个基......一起来看看 《社群营销与运营/互联网+新媒体营销规划丛书》 这本书的介绍吧!