Go不同于一般的面向对象语言,需要我们好好的学习研究,下面这篇文章主要给大家介绍了关于golang中struct和interface的基础使用的相关资料,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。 在Golang中,`struct`和`interface`是两种核心的类型,它们分别用于定义自定义数据结构和抽象行为规范。 ## 结构体(Struct) 结构体是Golang中用于组合不同类型的数据的一种方式,可以看作是其他编程语言中的类。在Golang中,结构体的定义如下: ```go type StructName struct { Field1 Type1 Field2 Type2 // ... } ``` 例如: ```go type User struct { Name string Age int32 Mess string } ``` ### 结构体方法 结构体可以拥有方法,方法定义时通常会有一个指向结构体实例的指针作为接收者,以便于在方法中修改结构体的字段。如: ```go func (u *User) SayHello() { fmt.Printf("Hello, %s!\n", u.Name) } ``` ### 结构体嵌入(Embedding) Golang中的结构体嵌入类似于其他语言的继承,但并不完全相同。你可以将一个结构体作为另一个结构体的字段,从而共享字段和方法。例如: ```go type Player struct { User Score int } ``` 这里的`Player`结构体就包含了`User`的所有字段和方法。 ### 结构体标签(Tag) 结构体标签常用于序列化和反序列化,比如与JSON或XML转换。通过在字段定义后加上`json`标签,可以指定字段在JSON中的映射。例如: ```go type User struct { Name string `json:"userName"` Age int `json:"userAge"` Active bool `json:"-"` } ``` `"-"`标签表示在JSON转换中忽略该字段。 ## 接口(Interface) 接口在Golang中扮演着多态的角色,它定义了一组方法签名,但不包含具体的实现。任何类型只要实现了接口中定义的所有方法,就自动实现了该接口,无需显式声明。 接口定义如下: ```go type InterfaceName interface { Method1(param1 Type1) ReturnType1 Method2(param2 Type2) ReturnType2 // ... } ``` 例如: ```go type Car interface { NameGet() string Run(n int) Stop() } ``` ### 空接口(Interface{}) 空接口`Interface{}`不包含任何方法,因此所有类型都隐式实现了空接口。 ### 接口的多态 多态性意味着可以使用不同的类型(只要它们实现了相同的接口)来完成相同的操作。例如: ```go type Item interface { Name() string Price() float64 } type VegBurger struct {} type ChickenBurger struct {} func (r *VegBurger) Name() string { return "vegburger" } func (r *VegBurger) Price() float64 { return 1.5 } func (r *ChickenBurger) Name() string { return "chickenburger" } func (r *ChickenBurger) Price() float64 { return 2.0 } func PrintItem(i Item) { fmt.Printf("Item: %s, Price: %.2f\n", i.Name(), i.Price()) } func main() { veg := &VegBurger{} chicken := &ChickenBurger{} PrintItem(veg) // 输出: Item: vegburger, Price: 1.50 PrintItem(chicken) // 输出: Item: chickenburger, Price: 2.00 } ``` 在这个例子中,`VegBurger`和`ChickenBurger`都实现了`Item`接口,因此可以传递给`PrintItem`函数。 `struct`和`interface`在Golang中是构建程序的重要工具。`struct`用于封装数据,而`interface`用于定义行为规范,它们共同实现了Golang的面向切面编程风格,提供了灵活且强大的设计可能性。理解并熟练运用这两者,对于编写高质量的Golang代码至关重要。
- 粉丝: 6
- 资源: 912
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助