在go语言中,用结构体绑定一个方法,会让代码块更容易理解。
举一个简单的例子。
案例:编写一个程序,从终端输入年份,可以快速计算出今年是属于天干地支的哪一年。
首先决定天干地支的算法为:公元年数先减3,除10余数是天干。基数改用12除,余数便是地支年。天干从1~10,分别为:甲 乙 丙 丁 戊 己 庚 辛 壬 癸;地支从1~12,分别为:子 丑 寅 卯 辰 巳 午 未 申 酉 戌 亥。
package main
import (
"fmt"
)
//定义一个天干的结构体
type TianGan struct {
TianGanName [10]string
}
//定义一个地支的结构体
type DiZhi struct {
DiZhiName [12]string
}
//作用与天干的方法
func (tg TianGan) CalTianGan(year int) string {
var tstr string
tYear := (year - 3) % 10
for i := 1; i <= len(tg.TianGanName); i ++ {
if tYear == i {
tstr = tg.TianGanName[i-1]
break
} else if tYear == 0 {
tstr = tg.TianGanName[len(tg.TianGanName)-1]
break
}
}
return tstr
}
//作用与地支的方法
func (dz DiZhi) CalDizhi(year int) string {
var dstr string
dYear := (year - 3) % 12
for j := 1; j <= len(dz.DiZhiName); j ++ {
if dYear == j {
dstr = dz.DiZhiName[j-1]
break
} else if dYear == 0 {
dstr = dz.DiZhiName[len(dz.DiZhiName)-1]
break
}
}
return dstr
}
func main() {
var (
year int
tg TianGan
dz DiZhi
)
//先赋值
tg.TianGanName = [10]string{"甲","乙","丙","丁","戊","己","庚","辛","壬","癸"}
dz.DiZhiName = [12]string{"子","丑","寅","卯","辰","巳","午","未","申","酉","戌","亥"}
fmt.Println("请输入公历年份...")
fmt.Scanln(&year)
fmt.Printf("输入的年份为%s年\n",tg.CalTianGan(year)+dz.CalDizhi(year))
}
输出的结果: