go struct 静态函数_go结构体组合函数

结构体定义

上面我们说过Go的指针和C的不同,结构体也是一样的。Go是一门删繁就简的语言,一切令人困惑的特性都必须去掉。

简单来讲,Go提供的结构体就是把使用各种数据类型定义的不同变量组合起来的高级数据类型。闲话不多说,看例子:

type Rect struct {

width float64

length float64

}

上面我们定义了一个矩形结构体,首先是关键是type表示要定义一个新的数据类型了,然后是新的数据类型名称Rect,最后是struct关键字,表示这个高级数据类型是结构体类型。在上面的例子中,因为width和length的数据类型相同,还可以写成如下格式:

type Rect struct {

width, length float64

}

好了,来用结构体干点啥吧,计算一下矩形面积。

package main

import (

"fmt"

)

type Rect struct {

width, length float64

}

func main() {

var rect Rect

rect.width = 100

rect.length = 200

fmt.Println(rect.width * rect.length)

}

从上面的例子看到,其实结构体类型和基础数据类型使用方式差不多,唯一的区别就是结构体类型可以通过.来访问内部的成员。包括给内部成员赋值和读取内部成员值。

在上面的例子中,我们是用var关键字先定义了一个Rect变量,然后对它的成员赋值。我们也可以使用初始化的方式来给Rect变量的内部成员赋值。

package main

import (

"fmt"

)

type Rect struct {

width, length float64

}

func main() {

var rect = Rect{width: 100, length: 200}

fmt.Println(rect.width * rect.length)

}

当然如果你知道结构体成员定义的顺序,也可以不使用key:value的方式赋值,直接按照结构体成员定义的顺序给它们赋值。

package main

import (

"fmt"

)

type Rect struct {

width, length float64

}

func main() {

var rect = Rect{100, 200}

fmt.Println("Width:", rect.width, "* Length:",

rect.length, "= Area:", rect.width*rect.length)

}

输出结果为

Width: 100 * Length: 200 = Area: 20000

结构体参数传递方式

我们说过,Go函数的参数传递方式是值传递,这句话对结构体也是适用的。

package main

import (

"fmt"

)

type Rect struct {

width, length float64

}

func double_area(rect Rect) float64 {

rect.width *= 2

rect.length *= 2

return rect.width * rect.length

}

func main() {

var rect = Rect{100, 200}

fmt.Println(double_area(rect))

fmt.Println("Width:", rect.width, "Length:", rect.length)

}

上面的例子输出为:

80000

Width: 100 Length: 200

也就说虽然在double_area函数里面我们将结构体的宽度和长度都加倍,但仍然没有影响main函数里面的rect变量的宽度和长度。

结构体组合函数

上面我们在main函数中计算了矩形的面积,但是我们觉得矩形的面积如果能够作为矩形结构体的“内部函数”提供会更好。这样我们就可以直接说这个矩形面积是多少,而不用另外去取宽度和长度去计算。现在我们看看结构体“内部函数”定义方法:

package main

import (

"fmt"

)

type Rect struc

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值