methods.go 652 B

12345678910111213141516171819202122232425262728293031
  1. package main
  2. import "fmt"
  3. // 1. 定义新类型
  4. type Celsius float64
  5. // 2. 实现 fmt.Stringer 接口(关键)
  6. func (c Celsius) String() string {
  7. return fmt.Sprintf("%.1f°C", c)
  8. }
  9. // 3. 额外示例:指针接收者方法,可修改自身
  10. func (c *Celsius) Add(delta float64) {
  11. *c += Celsius(delta)
  12. }
  13. func main() {
  14. // 值类型变量
  15. var roomTemp Celsius = 21
  16. fmt.Println("房间温度:", roomTemp) // 自动调用 String()
  17. // 指针类型变量
  18. freezer := new(Celsius) // *Celsius
  19. *freezer = -18
  20. fmt.Println("冷冻室:", freezer) // 同样调用 String()
  21. // 修改温度
  22. roomTemp.Add(3)
  23. fmt.Println("升温后:", roomTemp)
  24. }