使用方法:
方法类似于函数,但有一点不同:在关键字func后面添加了另一个参数部分,用于接受单个参数。
声明并调用方法,程序清单如下:
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())
}
运行结果如下:
Spiderman,3.2
创建并使用方法集,程序清单如下:
package main
import(
"fmt"
"math"
)
type Sphere struct{
Radius float64
}
func(s *Sphere)SurfaceArea()float64{
return float64(4)*math.Pi*(s.Radius*s.Radius)
}
func(s *Sphere)Volume()float64{
radiusCubed:=s.Radius*s.Radius*s.Radius
return (float64(4)/float64(3))*math.Pi*radiusCubed
}
func main(){
s:=Sphere{
Radius:5,
}
fmt.Println(s.SurfaceArea())
fmt.Println(s.Volume())
}
运行结果如下:
314.1592653589793
523.5987755982989
向方法传递指针引用,程序清单如下:
package main
import(
"fmt"
)
type Triangle struct{
base float64
height float64
}
func(t *Triangle) area() float64{
return 0.5*(t.base*t.height)
}
func main(){
t:=Triangle{base:3,height:1}
fmt.Println(t.area())
}
运行结果如下:
1.5
向方法传递值引用,程序清单如下:
package main
import(
"fmt"
)
type Triangle struct{
base float64
height float64
}
func(t Triangle) changeBase(f float64) {
t.base=f
return
}
func main(){
t:=Triangle{base:3,height:1}
t.changeBase(4)
fmt.Println(t.base)
}
运行结果如下:
3
向方法传递指针引用,程序清单如下:
package main
import(
"fmt"
)
type Triangle struct{
base float64
height float64
}
func(t *Triangle) changeBase(f float64) {
t.base=f
return
}
func main(){
t:=Triangle{base:3,height:1}
t.changeBase(4)
fmt.Println(t.base)
}
运行结果如下:
4
指针和值之间的差别很微妙。如果需要修改原始结构体,就使用指针;如果需要操作结构体,但不想修改原始结构体,就使用值。