Go 使用方法

Go 使用方法,方法类似于函数,但有一点不同:在关键字func后面添加了另一个参数部分,用于接受单个参数。下面的示例给前面介绍的结构体Movie添加了一个方法。

type Movie struct {
Name string
Rating float32
}

func (m *Movie) summary() string {
//code
}

请注意,在方法声明中,关键字func后面多了一个参数——接收者。严格地说,方法接收者是一种类型,这里是指向结构体Movie的指针。接下来是方法名、参数以及返回类型。除多了包含接收者的参数部分外,方法与函数介绍的函数完全相同。可将接收者视为与方法相关联的东西。通过声明方法summary,让结构体Movie的任何实例都可使用它。为何要使用方法,而不直接使用函数呢?例如,下面的函数与前面的方法声明等价。

type Movie struct {
Name string
Rating float64
}

func summary(m *Movie) string {
//code
}

函数summary和结构体Movie相互依赖,但它们之间没有直接关系。例如,如果不能访问结构体Movie的定义,就无法声明函数summary。如果使用函数,则在每个使用函数或结构体的地方,都需包含函数和结构体的定义,这会导致代码重复。另外,函数发生任何改变,都必须随之修改多个地方。这样看来在函数与结构体关系密切时,使用方法更合理。

方法summary的实现将float64等级制转换为字符串并设置其格式。使用方法的优点在于,只需编写方法实现一次,就可对结构体的任何实例进行调用。

func (m *Movie) summary() string {
r := strconv.FormatFloat(m.Rating, 'f', 1, 64)
return m.Name + ", " + r
}

下面程序声明了方法summary,并对Moive结构体的一个实例进行调用。

 package main

 import (
  "fmt"
  "strconv"
 )

 type Movie struct {
  Name    string
  Rating float64
 }

 func (m *Movie) summary() string {
  r := strconv.FormatFloat(m.Rating, 'f', 1, 64)
  return m.Name + ", " + r
 }

 func main() {
  m := Movie{
  Name:  "Spiderman",
   Rating:  3.2,
  }

  fmt.Println(m.summary())
 }

运行结果如下:
Go 使用方法

酷客教程相关文章:

赞(0)

评论 抢沙发

评论前必须登录!