数据表

星耀基础信息、天干地支信息、顺序常量与全部标识常量。

排盘算法的输入表与语言无关标识常量。


StarsInfo

用途 取星耀基础信息表。

签名

func StarsInfo() (map[string]StarInfo, error)

返回值 星耀标识 → StarInfo。只有二十颗星有记录: 十四主星加文昌、文曲、火星、铃星、擎羊、陀罗。

字段类型说明
Brightness[]string十二宫亮度标识,索引 0 为寅宫;该宫无亮度则为空串
FiveElementsstring五行;原表未填时为空串
YinYangstring阴阳;原表未填时为空串

示例

info, _ := iztro.StarsInfo()

fmt.Println(len(info))
fmt.Printf("%+v\n", info[iztro.StarZiweiMaj])
fmt.Printf("%q\n", info[iztro.StarTaiyangMaj].FiveElements)

输出

20
{Brightness:[wang wang de wang miao miao wang wang de wang ping miao] FiveElements:土 YinYang:阴}
""

边界与陷阱

五行与阴阳有空缺

表中部分星耀的五行或阴阳未填:太阳与七杀两项皆为空串, 贪狼、天相、天梁、破军的阴阳为空串,六颗辅星两项皆为空串。


HeavenlyStems

用途 取天干信息表。

斗数含义 天干的四化表是四化系统的根:生年干决定生年四化, 宫干决定该宫飞出的四化,运限干决定该层级的四化。

签名

func HeavenlyStems() (map[string]HeavenlyStemInfo, error)

返回值 天干标识 → HeavenlyStemInfo

字段类型说明
YinYangstring阴阳
FiveElementsstring五行
Crashstring对冲天干标识;戊、己无对冲,为空串
Mutagen[]string四化四星标识,顺序为禄、权、科、忌

示例

stems, _ := iztro.HeavenlyStems()

fmt.Printf("%+v\n", stems[iztro.StemJia])
fmt.Printf("戊干对冲: %q\n", stems[iztro.StemWu].Crash)

输出

{YinYang:阳 FiveElements:木 Crash:gengHeavenly Mutagen:[lianzhenMaj pojunMaj wuquMaj taiyangMaj]}
戊干对冲: ""

EarthlyBranches

用途 取地支信息表。

签名

func EarthlyBranches() (map[string]EarthlyBranchInfo, error)

返回值 地支标识 → EarthlyBranchInfo

字段类型说明
YinYangstring阴阳,决定大限与长生十二神的顺逆
FiveElementsstring五行
Crashstring对冲地支标识
Soulstring命主星标识(按命宫地支查)
Bodystring身主星标识(按生年地支查)
Insidestring对应脏腑
Outsidestring对应身体部位
HealthTipstring健康提示

Inside / Outside / HealthTip 三项只有中文一种写法,不参与国际化。

示例

branches, _ := iztro.EarthlyBranches()
fmt.Printf("%+v\n", branches[iztro.BranchZi])

输出

{YinYang:阳 FiveElements:水 Crash:wuEarthly Soul:tanlangMaj Body:huoxingMin Inside:胆 Outside:下体 HealthTip:生殖系统、膀胱、尿道之疾病,听觉障碍}

GetConstants

用途 取顺序常量与推算规则表。

签名

func GetConstants() (Constants, error)

返回值 Constants

字段类型说明
Languages[]string支持的语言代码
HeavenlyStems[]string天干顺序
EarthlyBranches[]string地支顺序
Zodiac[]string生肖标识,按地支顺序
Signs[]string星座标识,按黄道顺序
Palaces[]string十二宫名,从命宫起逆时针排:命、父母、福德、田宅、官禄、仆役、迁移、疾厄、财帛、子女、夫妻、兄弟
Gendermap[string]string男女各自的阴阳
ChineseTime[]string时辰标识,早子时起、晚子时止
TimeRange[]string时辰对应的钟点区间
TigerRulemap[string]string五虎遁:年干推正月天干
RatRulemap[string]string五鼠遁:日干推子时天干
Mutagen[]string四化顺序
FiveElementsClassmap[string]int五行局标识 → 局数(水二局 2 …… 火六局 6)

示例

c, _ := iztro.GetConstants()

fmt.Println(c.Languages)
fmt.Println(c.Zodiac[:3], c.ChineseTime[12], c.TimeRange[2])
fmt.Println(c.Gender)
fmt.Println("甲年正月干:", c.TigerRule[iztro.StemJia])
fmt.Println(c.Palaces)
fmt.Println(c.FiveElementsClass[iztro.ClassWood3rd], iztro.FiveElementsClassNumber(iztro.ClassFire6th))

输出

[en-US ja-JP ko-KR zh-CN zh-TW vi-VN]
[rat ox tiger] lateRatHour 03:00~05:00
map[female:阴 male:阳]
甲年正月干: bingHeavenly
[soulPalace parentsPalace spiritPalace propertyPalace careerPalace friendsPalace surfacePalace healthPalace wealthPalace childrenPalace spousePalace siblingsPalace]
3 6

边界与陷阱

Palaces 是逆时针序,不是盘上位置

Palaces 给的是宫名的排列顺序,不是某张盘上第 i 格叫什么。 要那个用 GetPalaceNames(soulIndex)

局数也可以直接查

FiveElementsClassNumber(key) 不必先取 Constants,未知标识返回 0。

Languages 的顺序是 iztro 词表的合并次序(en-US 起),不是常量的声明次序。 KeyOf 的逐语言扫描顺序与它一致。


标识常量

包里的标识常量取值就是语言无关标识,可直接与数据对象的 *Key 字段比较。

前缀数量
Palace*12 + 2PalaceSoulPalaceWealthPalaceBodyPalaceOriginal
Star*162StarZiweiMajStarLucunMinStarYunlu
Stem*10StemJiaStemGeng
Branch*12BranchZiBranchWu
Mutagen*4MutagenLuMutagenJi
Brightness*7BrightnessMiaoBrightnessWang
Class*5ClassWater2ndClassWood3rdClassMetal4thClassEarth5thClassFire6th
Scope*6ScopeOriginScopeDecadal
StarType*8StarTypeMajorStarTypeTough
Gender*2GenderMaleGenderFemale(类型 Gender
Language*6LanguageZhCNLanguageZhTWLanguageEnUSLanguageJaJPLanguageKoKRLanguageViVN(类型 Language
*LeapMonth*3NotLeapMonthLeapMonthKeepLeapMonthFixed(类型 LeapMonthByLunar 的闰月处理方式)

GenderLanguageLeapMonth 是具名字符串类型:作为入口参数时编译器会挡住把别的字符串误传进来的错误, 字面量("male""zh-CN")仍可直接写;Astrolabe.GenderKeyAstrolabe.Language 字段也是这两个类型。 其余常量是无类型的字符串常量,与 *Key 字段直接比较。

配置类另有六组:

前缀取值
YearDivide*YearDivideNormal / YearDivideExact
HoroscopeDivide*HoroscopeDivideNormal / HoroscopeDivideExact
AgeDivide*AgeDivideNormal / AgeDivideBirthday
DayDivide*DayDivideForward / DayDivideCurrent
Algorithm*AlgorithmDefault / AlgorithmZhongzhou
Astro*AstroHeaven / AstroEarth / AstroHuman

五行局常量的前缀是 Class 不是 FiveElements

iztro.ClassWood3rd,不是 iztro.FiveElementsWood3rd—— 后者不存在,编译不过。取局数用 iztro.FiveElementsClassNumber(key)

示例

soul := chart.Palace(iztro.PalaceSoul)

fmt.Println(soul.MajorStars[0].Key == iztro.StarZiweiMaj)
fmt.Println(iztro.StarZiweiMaj, iztro.MutagenLu, iztro.PalaceWealth)
fmt.Println(iztro.ClassWood3rd, iztro.GenderFemale, iztro.LanguageEnUS)

// 排盘入口的 gender 与 language 也用这两组常量
en, err := iztro.BySolar("2000-8-16", 2, iztro.GenderFemale, true, iztro.LanguageEnUS, nil)
if err != nil {
    log.Fatal(err)
}
fmt.Println(en.Palace(iztro.PalaceSoul).MajorStars[0].Name)

输出

true
ziweiMaj sihuaLu wealthPalace
wood3rd female en-US
emperor

常量与字符串等价

它们都是无类型字符串常量,chart.Palace("soulPalace")chart.Palace(iztro.PalaceSoul) 完全等价。 常量的价值在于 IDE 补全与拼写检查,而非类型约束。

本页目录