# 数据表 (/zh/docs/go/data)

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



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

***

## StarsInfo [#starsinfo]

**用途**　取星耀基础信息表。

**签名**

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

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

| 字段             | 类型         | 说明                         |
| -------------- | ---------- | -------------------------- |
| `Brightness`   | `[]string` | 十二宫亮度标识，索引 0 为寅宫；该宫无亮度则为空串 |
| `FiveElements` | `string`   | 五行；原表未填时为空串                |
| `YinYang`      | `string`   | 阴阳；原表未填时为空串                |

**示例**

```go
info, _ := iztro.StarsInfo()

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

**输出**

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

**边界与陷阱**

<Callout type="warn" title="五行与阴阳有空缺">
  表中部分星耀的五行或阴阳未填：太阳与七杀两项皆为空串，
  贪狼、天相、天梁、破军的阴阳为空串，六颗辅星两项皆为空串。
</Callout>

***

## FlowStarCounterparts [#flowstarcounterparts]

**用途**　流耀 → 对应本命辅星的全量对照表（50 条）。

**签名**

```go
func FlowStarCounterparts() (map[string]string, error)
```

**返回值**　键为流耀标识常量取值（`StarLiuchang` 等），值为本命辅星标识
（`StarWenchangMin` 等）。流耀没有独立的知识包条目，释义按对应的本命辅星查，
这张表就是官方对照。

**示例**

```go
m, _ := iztro.FlowStarCounterparts()

fmt.Println(m["liuchang"])
```

**输出**

```text
wenchangMin
```

***

## HeavenlyStems [#heavenlystems]

**用途**　取天干信息表。

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

**签名**

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

**返回值**　天干标识 → `HeavenlyStemInfo`：

| 字段             | 类型         | 说明                |
| -------------- | ---------- | ----------------- |
| `YinYang`      | `string`   | 阴阳                |
| `FiveElements` | `string`   | 五行                |
| `Crash`        | `string`   | 对冲天干标识；戊、己无对冲，为空串 |
| `Mutagen`      | `[]string` | 四化四星标识，顺序为禄、权、科、忌 |

**示例**

```go
stems, _ := iztro.HeavenlyStems()

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

**输出**

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

***

## EarthlyBranches [#earthlybranches]

**用途**　取地支信息表。

**签名**

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

**返回值**　地支标识 → `EarthlyBranchInfo`：

| 字段             | 类型       | 说明               |
| -------------- | -------- | ---------------- |
| `YinYang`      | `string` | 阴阳，决定大限与长生十二神的顺逆 |
| `FiveElements` | `string` | 五行               |
| `Crash`        | `string` | 对冲地支标识           |
| `Soul`         | `string` | 命主星标识（按命宫地支查）    |
| `Body`         | `string` | 身主星标识（按生年地支查）    |
| `Inside`       | `string` | 对应脏腑             |
| `Outside`      | `string` | 对应身体部位           |
| `HealthTip`    | `string` | 健康提示             |

<Callout type="info">
  `Inside` / `Outside` / `HealthTip` 三项只有中文一种写法，不参与国际化。
</Callout>

**示例**

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

**输出**

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

***

## GetConstants [#getconstants]

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

**签名**

```go
func GetConstants() (Constants, error)
```

**返回值**　`Constants`：

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

**示例**

```go
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))
```

**输出**

```text
[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
```

**边界与陷阱**

<Callout type="info" title="Palaces 是逆时针序，不是盘上位置">
  `Palaces` 给的是宫名的**排列顺序**，不是某张盘上第 `i` 格叫什么。
  要那个用 [`GetPalaceNames(soulIndex)`](/zh/docs/go/util#getpalacenames)。
</Callout>

<Callout type="info" title="局数也可以直接查">
  `FiveElementsClassNumber(key)` 不必先取 `Constants`，未知标识返回 0。
</Callout>

<Callout type="info">
  `Languages` 的顺序是 iztro 词表的合并次序（en-US 起），不是常量的声明次序。
  [`KeyOf`](/zh/docs/go/i18n#keyof) 的逐语言扫描顺序与它一致。
</Callout>

***

## 标识常量 [#标识常量]

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

| 前缀            | 数量     | 例                                                                                                        |
| ------------- | ------ | -------------------------------------------------------------------------------------------------------- |
| `Palace*`     | 12 + 2 | `PalaceSoul`、`PalaceWealth`、`PalaceBody`、`PalaceOriginal`                                                |
| `Star*`       | 162    | `StarZiweiMaj`、`StarLucunMin`、`StarYunlu`                                                                |
| `Stem*`       | 10     | `StemJia`、`StemGeng`                                                                                     |
| `Branch*`     | 12     | `BranchZi`、`BranchWu`                                                                                    |
| `Mutagen*`    | 4      | `MutagenLu`、`MutagenJi`                                                                                  |
| `Brightness*` | 7      | `BrightnessMiao`、`BrightnessWang`                                                                        |
| `Class*`      | 5      | `ClassWater2nd`、`ClassWood3rd`、`ClassMetal4th`、`ClassEarth5th`、`ClassFire6th`                            |
| `Scope*`      | 6      | `ScopeOrigin`、`ScopeDecadal`                                                                             |
| `StarType*`   | 8      | `StarTypeMajor`、`StarTypeTough`                                                                          |
| `Gender*`     | 2      | `GenderMale`、`GenderFemale`（类型 `Gender`）                                                                 |
| `Language*`   | 6      | `LanguageZhCN`、`LanguageZhTW`、`LanguageEnUS`、`LanguageJaJP`、`LanguageKoKR`、`LanguageViVN`（类型 `Language`） |
| `*LeapMonth*` | 3      | `NotLeapMonth`、`LeapMonthKeep`、`LeapMonthFixed`（类型 `LeapMonth`，`ByLunar` 的闰月处理方式）                        |

`Gender`、`Language`、`LeapMonth` 是具名字符串类型：作为入口参数时编译器会挡住把别的字符串误传进来的错误，
字面量（`"male"`、`"zh-CN"`）仍可直接写；`Astrolabe.GenderKey` 与 `Astrolabe.Language` 字段也是这两个类型。
其余常量是无类型的字符串常量，与 `*Key` 字段直接比较。

配置类另有六组：

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

<Callout type="warn" title="五行局常量的前缀是 Class 不是 FiveElements">
  写 `iztro.ClassWood3rd`，不是 `iztro.FiveElementsWood3rd`——
  后者不存在，编译不过。取局数用 `iztro.FiveElementsClassNumber(key)`。
</Callout>

**示例**

```go
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)
```

**输出**

```text
true
ziweiMaj sihuaLu wealthPalace
wood3rd female en-US
emperor
```

<Callout type="info" title="常量与字符串等价">
  它们都是无类型字符串常量，`chart.Palace("soulPalace")` 与
  `chart.Palace(iztro.PalaceSoul)` 完全等价。
  常量的价值在于 IDE 补全与拼写检查，而非类型约束。
</Callout>
