我正在努力学习Go.当我以为我理解一个函数是什么,如何使用它并且想要进入接口时我就陷入了困境(来源 Go博客)
package main
import "fmt"
//define a Rectangle struct that has a length and a width
type Rectangle struct {
length, width int
}
//write a function Area that can apply to a Rectangle type
func (r Rectangle) Area() int {
return r.length * r.width
}
func main() {
r := Rectangle{length:5, width:3} //define a new Rectangle instance with values for its properties
fmt.Println("Rectangle details are: ",r)
fmt.Println("Rectangle's area is: ", r.Area())
}
Run Code Online (Sandbox Code Playgroud)
为什么我们有 func (r Rectangle) Area() int没有func Area(r Rectangle) int?有什么不同吗?
这意味着您的函数附加到类型.您可以为任何用户定义的类型执行此操作.区别在于您如何调用该函数,而不是使用:
a := Area(r);
Run Code Online (Sandbox Code Playgroud)
你会用:
a := r.Area();
Run Code Online (Sandbox Code Playgroud)
这也意味着如果你定义一个类似的方法
func (r Rectangle) String() string
Run Code Online (Sandbox Code Playgroud)
Rectangle将自动执行Stringer,您将获得打印的能力Rectangle.