GO的结构(struct)与方法(method)

1、结构(struct)
由于在GO中没有class的关键字,也就是其它语言经常在面向对象中使用的方面,但GO是通过struct结构与method方法组合来实现的面向对象概率,所以在GO中,结构是非常重要的一种语法类型
在定义结构体时,和map等语言类型非常像似

var 结构变量 struct{
    字段1 字段1类型
    字段2 字段2类型
    ...
}

一个例子,简单介绍写定义与使用结构

package main
import (
    "fmt"
)
//定义一个结构体
type T struct {
    Name string
    Age  int
}
func main() {
    t := T{}    //初始化
    fmt.Println(t)
    //赋值
    t.Name = "astar"
    t.Age = 10
    fmt.Println(t)
}

输出:

{ 0}
{astar 10}

说明:
在初始化接收时,没有给结构中的字段赋值,这些字段都是有默认值,比如int型为0,string为nil,等等,初始化后,就可以通过 ‘.’ 的方式来给结构中的字段赋值,这是不是非常像其它语言中的面相对象呢?
由于在GO中传值也是拷贝的方式(可以自行验证,比如,写一个方法,然后把这个结构传到这个方法,在方法中改变这个结构中的某个字段,在打印出来看是否进行了更改,在按指针传递测试一下,就可以得出),所以在上面的例子中也可以这样。
t := &T{} ,直接接收指针,在将这个变量传递到其它地方,都是引用传递。
实现一个简单的构造工厂

type File struct {
    fd      int     // 文件描述符
    name    string  // 文件名
}
func NewFile(fd int, name string) *File {
    if fd < 0 {
        return nil
    }
    return &File{fd, name}
}

调用:

f := NewFile(10, "./test.txt")

GO语言中,结构struct的形式还有很多种,比如定义时可以在类型后面加title,可以用匿名等,在接收时可以直接进行赋值等一系列非常灵活的用法,如果在实际使用中遇见了不要惊讶.

2、方法(method)
在GO语言中,结构体就像一种类的简单形式,类里的变量就像是结构体中的体中的字段一样,那类里的方法呢,在GO中是怎么定义与使用的?
GO的方法是定义在一个接收者上的一个函数,接收者是某种类型的变量;
GO的方法其实就是一个变种的函数
func (接收者) 函数名… 正常的函数结构

结合上面的结构,我们来定义方法,其实就是一个最基本的面向对象的雏形

package main
import (
    "fmt"
)
type T struct {
    Name string
    Age  int
}
func main() {
    t := T{}
    fmt.Println(t)
    t.Name = "astar"
    t.Age = 10
    fmt.Println(t)
    t.Add()
}
func (t *T) Add() {
    fmt.Println(t.Age, t.Name)
}

输出为:

{ 0}
{astar 10}
10 astar

说明:前面两个输出已经介绍过,我们重点来说下调用t.Add()以及输出
我们在上面可以看出,新增了一个变种函数(其实是方法),(t *T) 这就是给这个结构体绑定函数,然后在结构体中就可以直接调用Add这个方法,GO就是以这种形式来实现面像对象的思想
如果外部结构和嵌入结构存在同名方法,则优先调用外部结构的方法。类型别名不会拥有底层类型所附带的方法,方法可以调用结构中的非公开字段。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在 Go 语言中,struct 结构是用来定义一组字段(field)的数据类型。它可以用来表示一组有相关性的数据,例如一个人的信息,可以用一个 struct 类型来表示,其中包含字段有名字、年龄、性别等。 使用 struct 结构可以使代码更加清晰易懂,因为它把一组相关的数据和它们之间的关系放在了一起,而不是分散在不同的变量里。这样可以使代码更容易维护和理解。 另外,struct结构支持方法method),可以给一个结构体类型添加方法。使用这些方法可以更好的描述结构体类型的行为。 总之,struct 结构在 Go 语言中是非常重要的,它可以帮助我们更好的组织数据和行为,让代码更加清晰易懂。 ### 回答2: Go语言需要struct结构是为了构建和组织数据。struct结构是一种自定义的数据类型,它能够将多个不同类型的变量组合成为一个更复杂的数据结构。 首先,struct结构提供了一种有效的方式来组织相关的数据。在实际开发中,经常会遇到需要同时操作多个相关联的变量的情况。通过使用struct结构,我们可以将这些变量打包成一个整体,便于一次性处理和传递。这有助于提高代码的可读性和维护性,减少错误发生的可能性。 其次,struct结构允许我们自定义和扩展数据类型。在Go语言中,struct结构可以包含不同类型的字段,包括基本类型(如整数、字符串等)和其他自定义的struct结构。这使得我们能够根据实际需求创建出更复杂的数据结构,提供更丰富的功能和灵活的使用方式。 此外,struct结构还支持面向对象的概念和特性,如封装、继承和多态。通过在struct结构中定义方法,我们可以将相关的操作和数据绑定到一起,实现更高级的功能和类似面向对象的设计模式。这对于构建大型和复杂的应用程序非常有用,能够提供更好的可扩展性和可维护性。 总之,Go语言需要struct结构是为了更好地组织和管理数据,提供更丰富的数据类型和功能,并支持面向对象的编程方式。这使得我们能够更高效地开发和维护应用程序,提高代码的可读性和可重用性。 ### 回答3: Go语言是一种面向对象的编程语言,它使用struct结构来定义自定义的数据类型,以便更好地组织和管理数据。 首先,struct结构允许我们将多个不同类型的数据字段封装到一个组合的数据结构中。这样可以更好地表示真实世界的复杂数据模型,例如用户、订单、商品等。通过在一个struct中定义多个不同的字段,我们可以将相关的数据聚集在一起,提高代码的可读性、可维护性和可扩展性。 其次,struct结构可以通过定义方法来实现行为。在定义一个struct时,我们可以为其关联方法,这样可以在struct内部定义一些操作和行为,使得对该struct对象的操作更加方便和直观。通过与方法一起使用,我们可以在结构体中封装数据和行为,实现面向对象编程的思想。 此外,struct结构还可以用于实现自定义的数据类型。在Go语言中,预定义的基本数据类型包括整数、浮点数、字符串等,而struct结构允许我们根据实际需要定义自己的数据类型。我们可以通过定义struct结构来表示不同的实体或概念,例如学生、汽车等,从而更好地符合具体业务需求。 最后,Go语言的struct结构支持匿名字段的机制,这使得数据结构的使用更加灵活。通过匿名字段,我们可以在一个结构体中嵌入另一个结构体,从而实现代码的复用和组合,减少重复定义和冗余代码。 综上所述,Go语言需要struct结构来更好地管理和组织数据,实现面向对象的编程思想,实现自定义的数据类型,以及支持代码的复用和组合。通过合理使用struct结构,我们可以编写出可读性强、易于维护和扩展的代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值