入门指南之方法
一、声明新类型
- 关键字type可以用来声明新类型
- type celsius float64
- var temperature celsius = 20
- 虽然Celsius是一种全新的类型,但是由于它和float64具有相同的行为和表示,所以赋值操作能顺利执行。
- 例如加法等运算,也可以像float64那样使用
例子
type celsius float64
const degrees = 20
var temperature celsius = degrees
temperature += 10
fmt.Println(temperature) //30
- 为什么要声明新类型:极大的提高代码可读性和可靠性
- 不同类型不能混用
二、通过方法添加行为
- 在C#、Java里,方法属于类
- 在Go里,它提供了方法,但是没提供类和对象
- Go比其他语言的方法要灵活
- 可以将方法与同包中声明的任何类型相关联,但不可以是int、float64等预声明的类型进行关联。
例子
type celsius float64
type kelvin float64
func kelvinToCelsius(k kelvin) celsius{
return celsius(k - 273.15)
}
func (k kelvin) celsius() celsius {
return celsius(k - 273.15)
}
- 上例中,celsius方法虽然没有参数。但它前面却有一个类型参数的接受者
- 每个方法可以有多个参数,但只能有一个接受者
- 在方法体中,接受者的行为和其它函数一样
- 方法声明图解:
三、方法调用
- 变量.方法()
例子
func main() {
var k kelvin = 294.0
var c celsius
c = kelvinToCelsius(k)
c = k.celsius()
fmt.Println(c)
}
type kelvin float64
type celsius float64
func kelvinToCelsius(k kelvin) celsius {
return celsius(k - 273.15)
}
func (k kelvin) celsius() celsius {
return celsius(k - 273.5)
}