Open linbuxiao opened 2 years ago
Stringer 提供了一种能力:生成常数枚举类型的 String方法。
String
首先,Stringer 会导入包。例如包内具有如下类型:
type Pill int const ( a Pill = iota b c )
此时 Pill 为常数枚举类型,abc 分别为 Pill 的 Runs。
使用标准库 packages 与 ast 提供的能力,可以解析出包内 Type 与 Runs 的信息。
这一步在 g.Parse 中进行,接着调用 g.generate 方法进行生成, 生成的步骤也较为简单:
func (i Day) String() string { if i < 0 || i >= Day(len(_Day_index)-1) { return "Day(" + strconv.FormatInt(int64(i), 10) + ")" } return _Day_name[_Day_index[i]:_Day_index[i+1]] }
当 i 在于当前已有枚举范围时,将从一个 map 中去截取枚举名:
const _Day_name = "MondayTuesdayWednesdayThursdayFridaySaturdaySunday"
不在则返回 类型名 + 枚举。
使用 g.format() 方法将 buf 进行输出。
g.format()
Stringer 提供了一种能力:生成常数枚举类型的
String
方法。首先,Stringer 会导入包。例如包内具有如下类型:
此时 Pill 为常数枚举类型,abc 分别为 Pill 的 Runs。
解析
使用标准库 packages 与 ast 提供的能力,可以解析出包内 Type 与 Runs 的信息。
生成
这一步在 g.Parse 中进行,接着调用 g.generate 方法进行生成, 生成的步骤也较为简单:
当 i 在于当前已有枚举范围时,将从一个 map 中去截取枚举名:
不在则返回 类型名 + 枚举。
输出
使用
g.format()
方法将 buf 进行输出。