6tail / lunar-go

日历、公历(阳历)、农历(阴历、老黄历)、道历、佛历,支持节假日、星座、儒略日、干支、生肖、节气、节日、彭祖百忌、每日宜忌、吉神宜趋凶煞宜忌、吉神(喜神/福神/财神/阳贵神/阴贵神)方位、胎神方位、冲煞、纳音、星宿、八字、五行、十神、建除十二值星、青龙名堂等十二神、黄道黑道日及吉凶等。lunar is a calendar library for Solar and Chinese Lunar.
https://6tail.cn/calendar/api.html
MIT License
215 stars 57 forks source link

超出范围 #3

Closed liuhedong closed 3 years ago

liuhedong commented 3 years ago

...... // 指定阳历时间得到八字信息 solar := calendar.NewSolar(1981, 12, 10, 12, 30, 0) lunar := solar.GetLunar()

// 值年九星
jx := lunar.GetYearNineStar()
fmt.Println(jx)
fmt.Println(jx.ToFullString())

// 值月九星
jx = lunar.GetMonthNineStar()
fmt.Println(jx)
fmt.Println(jx.ToFullString())

// 值日九星
jx = lunar.GetDayNineStar()
fmt.Println(jx)
fmt.Println(jx.ToFullString())

// 值时九星
jx = lunar.GetTimeNineStar()
fmt.Println(jx)
fmt.Println(jx.ToFullString())

......

%!v(PANIC=String method: runtime error: index out of range [9] with length 9) panic: runtime error: index out of range [9] with length 9

goroutine 1 [running]: github.com/6tail/lunar-go/calendar.(NineStar).GetNumber(0xc0000a4cc8, 0x70, 0x4e) NineStar.go:63 +0xfa github.com/6tail/lunar-go/calendar.(NineStar).ToFullString(0xc0000a4cc8, 0xc000010018, 0xc00029ff08) NineStar.go:133 +0x2f main.main() main.go:25 +0x213 exit status 2


运行下面就能解决: // 指定阳历时间得到八字信息 solar := calendar.NewSolar(1981, 12, 10, 12, 30, 0) lunar := solar.GetLunar()

   ......
   **// 日忌
 for i := lunar.GetDayJi().Front(); i != nil; i = i.Next() {
    fmt.Print(i.Value.(string))
    fmt.Print(" ")
 }
fmt.Println()**
   ......

// 值年九星
jx := lunar.GetYearNineStar()
fmt.Println(jx)
fmt.Println(jx.ToFullString())

// 值月九星
jx = lunar.GetMonthNineStar()
fmt.Println(jx)
fmt.Println(jx.ToFullString())

// 值日九星
jx = lunar.GetDayNineStar()
fmt.Println(jx)
fmt.Println(jx.ToFullString())

// 值时九星
jx = lunar.GetTimeNineStar()
fmt.Println(jx)
fmt.Println(jx.ToFullString())
6tail commented 3 years ago

@liuhedong v1.0.14 已修复该数组下标越界的问题。

liuhedong commented 3 years ago

// 指定阳历时间得到八字信息 solar := calendar.NewSolar(1983, 12, 15, 12, 30, 0) lunar := solar.GetLunar()

// 值年九星
jx := lunar.GetYearNineStar()
fmt.Println(jx)
fmt.Println(jx.ToFullString())

// 值月九星
jx = lunar.GetMonthNineStar()
fmt.Println(jx)
fmt.Println(jx.ToFullString())

// 值日九星
jx = lunar.GetDayNineStar()
fmt.Println(jx)
fmt.Println(jx.ToFullString())

// 值时九星
jx = lunar.GetTimeNineStar()
fmt.Println(jx)
fmt.Println(jx.ToFullString())

// 八字转阳历
for i := calendar.ListSolarFromBaZi("庚子", "戊子", "己卯", "庚午").Front(); i != nil; i = i.Next() {
    fmt.Println(i.Value.(*calendar.Solar).ToFullString())
}
fmt.Println()

panic: runtime error: index out of range [-1]

goroutine 1 [running]: github.com/6tail/lunar-go/calendar.(NineStar).GetNumber(...) NineStar.go:59 github.com/6tail/lunar-go/calendar.(NineStar).ToFullString(0xc0000a2cb0, 0xc0000a2cb0, 0x66) NineStar.go:127 +0x899 exit status 2


ps: GetMonthNineStar()

6tail commented 3 years ago

@liuhedong 我看了没问题啊,你是不是用的最新版本?

liuhedong commented 3 years ago

...... lunar := calendar.NewLunar(1983, 12, 15, 12, 30, 0) // solar := lunar.GetSolar() // solar := calendar.NewSolar(1984, 1, 17, 17, 12, 30) // lunar := solar.GetLunar() ......

6tail commented 3 years ago

@liuhedong v1.0.15 再次修复值月九星数组下标越界的问题。