星盘对象

Astrolabe 的字段、定位方法与三方四正判断。

Astrolabe 是排盘的产物,也是一切查询的入口。它持有十二宫的全部数据, 以及四柱、命主身主、五行局这些盘级信息。

chart, _ := iztro.BySolar("2000-8-16", 2, iztro.GenderFemale, true, iztro.LanguageZhCN, nil)

本页示例统一用 "zh-CN" 排盘,因此输出里的展示值都是中文。 换语言只改这些展示串,*Key 标识与所有判断方法的结果不变。

字段


Palace / PalaceByIndex

用途 按宫名、身宫、来因宫或索引取一宫。

斗数含义 十二宫是斗数的骨架。命宫定下后,其余十一宫按固定顺序逆时针排开。 「身宫」是十二宫之一同时被标记的那一宫,代表后天着力处; 「来因宫」是宫干与生年干相同的那一宫,代表事情的起因。

签名

func (a *Astrolabe) Palace(nameKeyOrName string) *Palace
func (a *Astrolabe) PalaceByIndex(index int) *Palace

参数

参数类型必填默认说明
nameKeyOrNamestring宫名标识、"bodyPalace""originalPalace",或宫名译名
indexint宫位索引 0–11,0 为寅宫

返回值 *Palace。名字拼错或索引越界时返回 nil"soulPalace" 一类宫名、"bodyPalace""originalPalace" 只要拼对, 在任何一张盘上都定位得到。

示例

soul := chart.Palace(iztro.PalaceSoul)
fmt.Println(soul.Name, soul.HeavenlyStem+soul.EarthlyBranch)

fmt.Println("身宫:", chart.Palace("bodyPalace").Name)
fmt.Println("来因:", chart.Palace("originalPalace").Name)
fmt.Println("寅宫:", chart.PalaceByIndex(0).Name)

输出

命宫 壬午
身宫: 官禄
来因: 夫妻
寅宫: 财帛

边界与陷阱


Star

用途 按标识找到一颗星,并同时取回它所在的宫。

签名

func (a *Astrolabe) Star(keyOrName string) (*Star, *Palace)

参数

参数类型必填默认说明
keyOrNamestring星耀标识或译名

返回值 (*Star, *Palace)。该星不在这张盘上时两者都为 nil

示例

ziwei, palace := chart.Star(iztro.StarZiweiMaj)

fmt.Println(ziwei.Name, "在", palace.Name)
fmt.Println("对宫是", ziwei.OppositePalace().Name)
fmt.Println("亮度", ziwei.Brightness, "四化", ziwei.Mutagen)

输出

紫微 在 命宫
对宫是 迁移
亮度 庙 四化

四化为空串表示这颗星没有生年四化。

边界与陷阱

只在主星、辅星、杂耀三组里查找。长生十二神、博士十二神、岁前与将前十二神 是每宫一个的标记而非星耀列表,用 palace.Changsheng12Key 一类字段直接取。


SurroundedPalaces / SurroundedPalacesByIndex

用途 取目标宫的三方四正。

斗数含义 三方四正是斗数最常用的取象范围:本宫、对宫(本宫 +6)、 官禄位(本宫 +4)、财帛位(本宫 +8)。四个宫合起来看,而不只看本宫, 是因为对宫与三合宫的星耀同样作用于本宫的事。

签名

func (a *Astrolabe) SurroundedPalaces(nameKeyOrName string) *SurroundedPalaces
func (a *Astrolabe) SurroundedPalacesByIndex(index int) *SurroundedPalaces

返回值 *SurroundedPalaces,含 Target / Opposite / Wealth / Career 四个 *PalaceSurroundedPalaces 在名字拼错时返回 nilSurroundedPalacesByIndex 对索引取模, 因此负数与超过 11 的索引都能正确回绕,只有零值星盘(不足十二宫)才返回 nil。 判断方法见三方四正

示例

sp := chart.SurroundedPalaces(iztro.PalaceSoul)

fmt.Println(sp.Target.Name, sp.Opposite.Name, sp.Wealth.Name, sp.Career.Name)
fmt.Println("三方四正见紫微:", sp.Have(iztro.StarZiweiMaj))

输出

命宫 迁移 财帛 官禄
三方四正见紫微: true

IsSurrounded / IsSurroundedOneOf / NotSurrounded

用途 直接在星盘上判断某宫的三方四正里有没有指定星耀,省去先取三方四正的一步。

签名

func (a *Astrolabe) IsSurrounded(nameKeyOrName string, stars ...string) bool
func (a *Astrolabe) IsSurroundedOneOf(nameKeyOrName string, stars ...string) bool
func (a *Astrolabe) NotSurrounded(nameKeyOrName string, stars ...string) bool

参数

参数类型必填默认说明
nameKeyOrNamestring宫名标识或译名
stars...string星耀标识,可变参数

返回值

方法语义
IsSurrounded列出的每一颗都在三方四正里
IsSurroundedOneOf列出的至少一颗在三方四正里
NotSurrounded列出的一颗都不在三方四正里

示例

fmt.Println(chart.IsSurrounded(iztro.PalaceSoul, iztro.StarZiweiMaj, iztro.StarTianxiangMaj))
fmt.Println(chart.IsSurroundedOneOf(iztro.PalaceSoul, iztro.StarQishaMaj, iztro.StarPojunMaj))
fmt.Println(chart.NotSurrounded(iztro.PalaceSoul, iztro.StarHuoxingMin))

输出

true
false
true

命宫只坐紫微,天相在三方之一的财帛宫,因此第一行为真; 七杀与破军都不在这四宫内,第二行为假。

边界与陷阱

不传星耀时的返回值

一颗星都不传时,IsSurroundedNotSurrounded 返回 true (「所有元素都满足」与「没有元素不满足」对空集都成立), IsSurroundedOneOf 返回 false


Horoscope / HoroscopeNow

用途 以本盘为起点计算目标日期的运限。

签名

func (a *Astrolabe) Horoscope(targetDate string, targetTimeIndex uint8) (*Horoscope, error)
func (a *Astrolabe) HoroscopeNow() (*Horoscope, error)

参数

参数类型必填默认说明
targetDatestring目标公历日期,格式 YYYY-M-D
targetTimeIndexuint8目标时辰索引 0–12,决定流时

HoroscopeNow 取本地时钟的当前日期与当前时辰,无参数。

返回值 *Horoscope——持有本盘的运限对象,六个层级的宫位查询不必再传星盘。 详见运限对象

示例

h, _ := chart.Horoscope("2025-6-1", 0)

fmt.Println("大限", h.Decadal.HeavenlyStem+h.Decadal.EarthlyBranch)
fmt.Println("流年", h.Yearly.HeavenlyStem+h.Yearly.EarthlyBranch)

输出

大限 庚辰
流年 乙巳

与 JSON 的关系

Astrolabe 及其下的所有类型都带 json 标签,标签名与 JS iztro 的字段契约一致。 因此 json.Marshal(chart) 直接就是可以交给前端或别的进程的 DTO:

b, err := json.Marshal(chart)
if err != nil {
    log.Fatal(err)
}

var v map[string]any
_ = json.Unmarshal(b, &v)

fmt.Println(v["solarDate"], v["genderKey"], v["timeIndex"])
fmt.Println(v["palaces"].([]any)[4].(map[string]any)["nameKey"])

输出

2000-8-16 female 2
soulPalace

Config 里的自定义四化与亮度表不进 JSON——它们是排盘输入而非结果, 回显会破坏与 JS iztro 的字段契约。

本页目录