diff --git a/README.md b/README.md
index 004af48d..ed86d7f4 100644
--- a/README.md
+++ b/README.md
@@ -36,21 +36,22 @@ Github上第一个开源的中文取名项目(The first chinese name create tool
 1. 编写运行go代码,接口调用生成姓名
 
     ```go
-    //使用前请导入database的数据(测试字库已基本完善, 保险起见生成姓名后可以去一些测名网站验证下)
-    //加载配置(具体参数参考example/create_a_name)
+    // 使用前请导入database的数据(测试字库已基本完善, 保险起见生成姓名后可以去一些测名网站验证下)
+    // 加载配置(具体参数参考example/create_a_name)
     cfg := config.Default()
-    //生日:
+    // 生日:
     born := chronos.New("2020/01/23 11:31")
-    //姓氏:
+    // 姓氏:
     lastName := "张"
-    //第一参数:姓氏
-    //第二参数:生日 
+    // 第一参数:姓氏
+    // 第二参数:生日 
     f := fate.NewFate(lastName, born.Solar().Time(), fate.ConfigOption(cfg))
     
     e := f.MakeName(context.Background())
     if e != nil {
       t.Fatal(e)
     }
+
     ```
 
 2. 使用预编译二进制文件生成姓名
@@ -64,8 +65,8 @@ Github上第一个开源的中文取名项目(The first chinese name create tool
     ```
 
 3. ~~针对没有安装Go环境的用户,使用二进制文件在运行前务必把zoneinfo.zip下载并和二进制文件放在一起(不要解压),不然会报错.~~
-    ~~[zoneinfo文件](https://github.com/babyname/fate/blob/master/zoneinfo.zip)~~
-    最新编译的版本使用了Go新版编译, 已经不再需要手动下载`zoneinfo.zip`文件了.
+   ~~[zoneinfo文件](https://github.com/babyname/fate/blob/master/zoneinfo.zip)~~
+   最新编译的版本使用了Go新版编译, 已经不再需要手动下载`zoneinfo.zip`文件了.
 
 ### 常见问题
 
@@ -93,11 +94,11 @@ Github上第一个开源的中文取名项目(The first chinese name create tool
     ```
 
 3. 数据库配置, 替换config.json中相关部分
-   - MYSQL配置:
-     - host填写mysql数据库的地址
-     - user填写mysql数据库的用户名
-     - pwd填写mysql数据库的密码
-     - name填写mysql数据库的库名
+    - MYSQL配置:
+        - host填写mysql数据库的地址
+        - user填写mysql数据库的用户名
+        - pwd填写mysql数据库的密码
+        - name填写mysql数据库的库名
 
    ```json
     "database": {
@@ -116,8 +117,8 @@ Github上第一个开源的中文取名项目(The first chinese name create tool
     },   
    ```
 
-   - SQLITE3配置:
-     - name填写本地sqlite的数据库名字, 放在fate同一目录下
+    - SQLITE3配置:
+        - name填写本地sqlite的数据库名字, 放在fate同一目录下
 
    ```json
     "database": {
@@ -152,12 +153,12 @@ FATE使用了以下算法,查询字典库自动生成匹配规则的名字.
 按照每种算法的准确度,使用程度也有高有低,不会一概而否,也不会偏向单独某种算法.
 不会按照个人喜好做出选择.
 
-- 周易卦象  
-- 大衍之数  
-- 三才五格  
-- 喜用神(平衡用神)  
-- 生肖用字  
-- 八字吉凶  
+- 周易卦象
+- 大衍之数
+- 三才五格
+- 喜用神(平衡用神)
+- 生肖用字
+- 八字吉凶
 
 目前Fate以六大派为基准综合计算生成名字:
 
@@ -170,31 +171,31 @@ FATE使用了以下算法,查询字典库自动生成匹配规则的名字.
 
 目前使用到的一些库:
 
-- 八字计算(用于计算生辰): <https://github.com/godcong/chronos>  
+- 八字计算(用于计算生辰): <https://github.com/godcong/chronos>
 - 字典数据(一个爬虫工具填充字典数据库): <https://github.com/godcong/excavator>
-如果谁有更好用的可以告诉我.
+  如果谁有更好用的可以告诉我.
 
 ### 资料查询
 
 1. 全国及各省重名查询网址汇总
 
-    网友提供:`https://zhuanlan.zhihu.com/p/89654568`(**请谨慎访问非本站点地址**)
-    [本仓库地址](./docs/chinese_name_query.md)
+   网友提供:`https://zhuanlan.zhihu.com/p/89654568`(**请谨慎访问非本站点地址**)
+   [本仓库地址](./docs/chinese_name_query.md)
 
 ## 一些废话
 
-  在过去的几年中虽然Fate经过了好几个版本的改进, 但是仍然有许多不足之处.
-  包括生成的名字太多不容易筛选,
-  有些用户遇到了一些和Go相关的问题,
-  一些用户不知道如何导入数据库等.
-  这些问题都只能慢慢想办法去解决.
-
-  还有些用户因为字典库生成的名字中有些字的寓意不好, 你可以手动删掉你不喜欢字, 却来恶意中伤作者.
-  我想说的是这个字也不是我造的, 你如果有问题可以去找造那个字的人.
-  如果觉得这个工具不好你可以不用.
-
-  最近一年中因为作者个人原因导致Fate更新缓慢, 在这里向大家道个歉.
-  大家也知道现在国内的IT环境, 毕竟我也要生活, 生活所迫没有太多时间放在业余的项目上.
-  我只能尽量抽出时间来完善Fate的规则和代码. 
-  在这里同样要感谢支持我的朋友们, 大家的出发点我相信是一样的.
-  用这个工具目的都是为了给孩子取一个好名字.
\ No newline at end of file
+在过去的几年中虽然Fate经过了好几个版本的改进, 但是仍然有许多不足之处.
+包括生成的名字太多不容易筛选,
+有些用户遇到了一些和Go相关的问题,
+一些用户不知道如何导入数据库等.
+这些问题都只能慢慢想办法去解决.
+
+还有些用户因为字典库生成的名字中有些字的寓意不好, 你可以手动删掉你不喜欢字, 却来恶意中伤作者.
+我想说的是这个字也不是我造的, 你如果有问题可以去找造那个字的人.
+如果觉得这个工具不好你可以不用.
+
+最近一年中因为作者个人原因导致Fate更新缓慢, 在这里向大家道个歉.
+大家也知道现在国内的IT环境, 毕竟我也要生活, 生活所迫没有太多时间放在业余的项目上.
+我只能尽量抽出时间来完善Fate的规则和代码.
+在这里同样要感谢支持我的朋友们, 大家的出发点我相信是一样的.
+用这个工具目的都是为了给孩子取一个好名字.
\ No newline at end of file
diff --git a/README_EN.md b/README_EN.md
index ce930375..6d5a17bf 100644
--- a/README_EN.md
+++ b/README_EN.md
@@ -8,6 +8,7 @@
 [![Go Report Card](https://goreportcard.com/badge/github.com/babyname/fate)](https://goreportcard.com/report/github.com/babyname/fate)
 
 ## Introduce
+
 A modern science chinese name create tool.
 The first chinese name create tool in github
 It uses some traditional Chinese algorithms. It is used to get a good name for a newborn baby.
\ No newline at end of file
diff --git a/bazi.go b/bazi.go
index 8d224418..a6678d7b 100644
--- a/bazi.go
+++ b/bazi.go
@@ -1,8 +1,9 @@
 package fate
 
 import (
-	"github.com/godcong/chronos"
 	"strings"
+
+	"github.com/godcong/chronos"
 )
 
 var diIndex = map[string]int{
@@ -13,7 +14,7 @@ var tianIndex = map[string]int{
 	"甲": 0, "乙": 1, "丙": 2, "丁": 3, "戊": 4, "己": 5, "庚": 6, "辛": 7, "壬": 8, "癸": 9,
 }
 
-//天干强度表
+// 天干强度表
 var tiangan = [][]int{
 	{1200, 1200, 1000, 1000, 1000, 1000, 1000, 1000, 1200, 1200},
 	{1060, 1060, 1000, 1000, 1100, 1100, 1140, 1140, 1100, 1100},
@@ -29,7 +30,7 @@ var tiangan = [][]int{
 	{1200, 1200, 1000, 1000, 1000, 1000, 1000, 1000, 1140, 1140},
 }
 
-//地支强度表
+// 地支强度表
 var dizhi = []map[string][]int{
 	{
 		"癸": {1200, 1100, 1000, 1000, 1040, 1060, 1000, 1000, 1200, 1200, 1060, 1140},
@@ -98,12 +99,12 @@ var wuXingDiZhi = map[string]string{
 	"亥": "水",
 }
 
-//WuXingTianGan 五行天干
+// WuXingTianGan 五行天干
 func WuXingTianGan(s string) string {
 	return wuXingTianGan[s]
 }
 
-//WuXingDiZhi 五行地支
+// WuXingDiZhi 五行地支
 func WuXingDiZhi(s string) string {
 	return wuXingDiZhi[s]
 }
@@ -115,7 +116,7 @@ type BaZi struct {
 	xiyong *XiYong
 }
 
-//NewBazi 创建八字
+// NewBazi 创建八字
 func NewBazi(calendar chronos.Calendar) *BaZi {
 	ec := calendar.Lunar().EightCharacter()
 	return &BaZi{
@@ -129,18 +130,18 @@ func (z *BaZi) String() string {
 	return strings.Join(z.baZi, "")
 }
 
-//RiZhu 日主
+// RiZhu 日主
 func (z *BaZi) RiZhu() string {
 	return z.baZi[4]
 }
 
 func (z *BaZi) calcXiYong() {
 	z.xiyong = &XiYong{}
-	//TODO:need fix
-	z.point().calcSimilar().calcHeterogeneous() //.yongShen().xiShen()
+	// TODO:need fix
+	z.point().calcSimilar().calcHeterogeneous() // .yongShen().xiShen()
 }
 
-//XiYong 喜用神
+// XiYong 喜用神
 func (z *BaZi) XiYong() *XiYong {
 	if z.xiyong == nil {
 		z.calcXiYong()
@@ -148,7 +149,7 @@ func (z *BaZi) XiYong() *XiYong {
 	return z.xiyong
 }
 
-//XiYongShen 平衡用神
+// XiYongShen 平衡用神
 func (z *BaZi) XiYongShen() string {
 	return z.XiYong().Shen()
 }
@@ -180,7 +181,7 @@ func baziToWuXing(bazi []string) []string {
 	return wx
 }
 
-//计算同类
+// 计算同类
 func (z *BaZi) calcSimilar() *BaZi {
 	for i := range sheng {
 		if wuXingTianGan[z.RiZhu()] == sheng[i] {
@@ -200,7 +201,7 @@ func (z *BaZi) calcSimilar() *BaZi {
 	return z
 }
 
-//计算异类
+// 计算异类
 func (z *BaZi) calcHeterogeneous() *BaZi {
 	for i := range sheng {
 		for ti := range z.xiyong.Similar {
diff --git a/bazi_test.go b/bazi_test.go
index 225458bb..237ed714 100644
--- a/bazi_test.go
+++ b/bazi_test.go
@@ -1,10 +1,12 @@
 package fate_test
 
 import (
-	"github.com/godcong/chronos"
-	"github.com/babyname/fate"
 	"log"
 	"testing"
+
+	"github.com/godcong/chronos"
+
+	"github.com/babyname/fate"
 )
 
 func TestPoint(t *testing.T) {
diff --git a/character.go b/character.go
index 28042986..f6f35aab 100644
--- a/character.go
+++ b/character.go
@@ -3,35 +3,36 @@ package fate
 import (
 	"crypto/sha256"
 	"fmt"
+
 	"github.com/xormsharp/builder"
 	"github.com/xormsharp/xorm"
 )
 
-//Character 字符
+// Character 字符
 type Character struct {
 	Hash                     string   `xorm:"pk hash"`
-	PinYin                   []string `xorm:"default() notnull pin_yin"`                               //拼音
-	Ch                       string   `xorm:"default() notnull ch"`                                    //字符
-	ScienceStroke            int      `xorm:"default(0) notnull science_stroke" json:"science_stroke"` //科学笔画
-	Radical                  string   `xorm:"default() notnull radical"`                               //部首
-	RadicalStroke            int      `xorm:"default(0) notnull radical_stroke"`                       //部首笔画
-	Stroke                   int      `xorm:"default() notnull stroke"`                                //总笔画数
-	IsKangXi                 bool     `xorm:"default(0) notnull is_kang_xi"`                           //是否康熙字典
-	KangXi                   string   `xorm:"default() notnull kang_xi"`                               //康熙
-	KangXiStroke             int      `xorm:"default(0) notnull kang_xi_stroke"`                       //康熙笔画
-	SimpleRadical            string   `xorm:"default() notnull simple_radical"`                        //简体部首
-	SimpleRadicalStroke      int      `xorm:"default(0) notnull simple_radical_stroke"`                //简体部首笔画
-	SimpleTotalStroke        int      `xorm:"default(0) notnull simple_total_stroke"`                  //简体笔画
-	TraditionalRadical       string   `xorm:"default() notnull traditional_radical"`                   //繁体部首
-	TraditionalRadicalStroke int      `xorm:"default(0) notnull traditional_radical_stroke"`           //繁体部首笔画
-	TraditionalTotalStroke   int      `xorm:"default(0) notnull traditional_total_stroke"`             //简体部首笔画
-	NameScience              bool     `xorm:"default(0) notnull name_science"`                         //姓名学
-	WuXing                   string   `xorm:"default() notnull wu_xing"`                               //五行
-	Lucky                    string   `xorm:"default() notnull lucky"`                                 //吉凶寓意
-	Regular                  bool     `xorm:"default(0) notnull regular"`                              //常用
-	TraditionalCharacter     []string `xorm:"default() notnull traditional_character"`                 //繁体字
-	VariantCharacter         []string `xorm:"default() notnull variant_character"`                     //异体字
-	Comment                  []string `xorm:"default() notnull comment"`                               //解释
+	PinYin                   []string `xorm:"default() notnull pin_yin"`                               // 拼音
+	Ch                       string   `xorm:"default() notnull ch"`                                    // 字符
+	ScienceStroke            int      `xorm:"default(0) notnull science_stroke" json:"science_stroke"` // 科学笔画
+	Radical                  string   `xorm:"default() notnull radical"`                               // 部首
+	RadicalStroke            int      `xorm:"default(0) notnull radical_stroke"`                       // 部首笔画
+	Stroke                   int      `xorm:"default() notnull stroke"`                                // 总笔画数
+	IsKangXi                 bool     `xorm:"default(0) notnull is_kang_xi"`                           // 是否康熙字典
+	KangXi                   string   `xorm:"default() notnull kang_xi"`                               // 康熙
+	KangXiStroke             int      `xorm:"default(0) notnull kang_xi_stroke"`                       // 康熙笔画
+	SimpleRadical            string   `xorm:"default() notnull simple_radical"`                        // 简体部首
+	SimpleRadicalStroke      int      `xorm:"default(0) notnull simple_radical_stroke"`                // 简体部首笔画
+	SimpleTotalStroke        int      `xorm:"default(0) notnull simple_total_stroke"`                  // 简体笔画
+	TraditionalRadical       string   `xorm:"default() notnull traditional_radical"`                   // 繁体部首
+	TraditionalRadicalStroke int      `xorm:"default(0) notnull traditional_radical_stroke"`           // 繁体部首笔画
+	TraditionalTotalStroke   int      `xorm:"default(0) notnull traditional_total_stroke"`             // 简体部首笔画
+	NameScience              bool     `xorm:"default(0) notnull name_science"`                         // 姓名学
+	WuXing                   string   `xorm:"default() notnull wu_xing"`                               // 五行
+	Lucky                    string   `xorm:"default() notnull lucky"`                                 // 吉凶寓意
+	Regular                  bool     `xorm:"default(0) notnull regular"`                              // 常用
+	TraditionalCharacter     []string `xorm:"default() notnull traditional_character"`                 // 繁体字
+	VariantCharacter         []string `xorm:"default() notnull variant_character"`                     // 异体字
+	Comment                  []string `xorm:"default() notnull comment"`                               // 解释
 }
 
 // InsertOrUpdateCharacter ...
@@ -84,10 +85,10 @@ func Stoker(s int, options ...CharacterOptions) func(engine *xorm.Engine) *xorm.
 	return func(engine *xorm.Engine) *xorm.Session {
 		session := engine.Where("pin_yin IS NOT NULL").
 			And(builder.Eq{"science_stroke": s})
-		//Or(builder.Eq{"stroke": s}).
-		//Or(builder.Eq{"kang_xi_stroke": s}).
-		//Or(builder.Eq{"simple_total_stroke": s}).
-		//Or(builder.Eq{"traditional_total_stroke": s}))
+		// Or(builder.Eq{"stroke": s}).
+		// Or(builder.Eq{"kang_xi_stroke": s}).
+		// Or(builder.Eq{"simple_total_stroke": s}).
+		// Or(builder.Eq{"traditional_total_stroke": s}))
 		for _, option := range options {
 			session = option(session)
 		}
diff --git a/database.go b/database.go
index 6df6ae22..c0b1d436 100644
--- a/database.go
+++ b/database.go
@@ -123,8 +123,8 @@ func initSQL(database config.Database) *xorm.Engine {
 		eng.ShowSQL(true)
 	}
 
-	//if database.ShowExecTime {
+	// if database.ShowExecTime {
 	//	eng.ShowExecTime(true)
-	//}
+	// }
 	return eng
 }
diff --git a/dayan.go b/dayan.go
index ced4de0c..90cef82c 100644
--- a/dayan.go
+++ b/dayan.go
@@ -98,22 +98,22 @@ type DaYan struct {
 	Number  int
 	Lucky   string
 	Max     bool
-	Sex     Sex //male(false),female(true)
+	Sex     Sex // male(false),female(true)
 	SkyNine string
 	Comment string
 }
 
-//IsNotSuitableSex 女性不宜此数
+// IsNotSuitableSex 女性不宜此数
 func (dy DaYan) IsNotSuitableSex() bool {
 	return dy.Sex == SexGirl
 }
 
-//IsMax 是否最大好运数
+// IsMax 是否最大好运数
 func (dy DaYan) IsMax() bool {
 	return dy.Max
 }
 
-//GetDaYan 获取大衍之数
+// GetDaYan 获取大衍之数
 func GetDaYan(idx int) DaYan {
 	if idx <= 0 {
 		panic("wrong idx")
diff --git a/fate.go b/fate.go
index 097cac5c..79d82f3b 100644
--- a/fate.go
+++ b/fate.go
@@ -4,12 +4,14 @@ import (
 	"context"
 	"errors"
 	"fmt"
-	"github.com/babyname/fate/config"
-	"github.com/goextension/log"
-	"github.com/xormsharp/xorm"
 	"strings"
 	"time"
 
+	"github.com/goextension/log"
+	"github.com/xormsharp/xorm"
+
+	"github.com/babyname/fate/config"
+
 	"github.com/godcong/chronos"
 	"github.com/godcong/yi"
 )
@@ -87,7 +89,7 @@ func Debug() Options {
 	}
 }
 
-//NewFate 所有的入口,新建一个fate对象
+// NewFate 所有的入口,新建一个fate对象
 func NewFate(lastName string, born time.Time, options ...Options) Fate {
 	f := &fateImpl{
 		last: strings.Split(lastName, ""),
@@ -119,7 +121,7 @@ func (f *fateImpl) getLastCharacter() error {
 	} else if size > 2 {
 		return fmt.Errorf("%d characters last name was not supported", size)
 	} else {
-		//ok
+		// ok
 	}
 
 	for i, c := range f.last {
@@ -139,6 +141,7 @@ func (f *fateImpl) MakeName(ctx context.Context) (e error) {
 	if e != nil {
 		return Wrap(e, "write head failed")
 	}
+	defer f.out.Finish()
 	e = f.RunInit()
 	if e != nil {
 		return Wrap(e, "init failed")
@@ -161,7 +164,7 @@ func (f *fateImpl) MakeName(ctx context.Context) (e error) {
 	}()
 
 	var tmpChar []*Character
-	//supplyFilter := false
+	// supplyFilter := false
 	for n := range name {
 		select {
 		case <-ctx.Done():
@@ -172,19 +175,19 @@ func (f *fateImpl) MakeName(ctx context.Context) (e error) {
 
 		tmpChar = n.FirstName
 		tmpChar = append(tmpChar, n.LastName...)
-		//filter bazi
+		// filter bazi
 		if f.config.SupplyFilter && !filterXiYong(f.XiYong().Shen(), tmpChar...) {
-			//log.Infow("supply", "name", n.String())
+			// log.Infow("supply", "name", n.String())
 			continue
 		}
-		//filter zodiac
+		// filter zodiac
 		if f.config.ZodiacFilter && !filterZodiac(f.born, n.FirstName...) {
-			//log.Infow("zodiac", "name", n.String())
+			// log.Infow("zodiac", "name", n.String())
 			continue
 		}
-		//filter bagua
+		// filter bagua
 		if f.config.BaguaFilter && !filterYao(n.BaGua(), "凶") {
-			//log.Infow("bagua", "name", n.String())
+			// log.Infow("bagua", "name", n.String())
 			continue
 		}
 		ben := n.BaGua().Get(yi.BenGua)
@@ -227,7 +230,7 @@ func (f *fateImpl) init() {
 	f.out = initOutputWithConfig(f.config.FileOutput)
 }
 
-//SetBornData 设定生日
+// SetBornData 设定生日
 func (f *fateImpl) SetBornData(t time.Time) {
 	f.born = chronos.New(t)
 }
@@ -250,7 +253,7 @@ func (f *fateImpl) getWugeName(name chan<- *Name) (e error) {
 	bazi := NewBazi(f.born)
 	for l := range lucky {
 		if f.config.FilterMode == config.FilterModeCustom {
-			//TODO
+			// TODO
 		}
 
 		if bool(f.sex) && filterSex(l) {
diff --git a/fate_test.go b/fate_test.go
index 84558467..b3ddf917 100644
--- a/fate_test.go
+++ b/fate_test.go
@@ -11,7 +11,7 @@ import (
 )
 
 func init() {
-	//trait.NewZapFileSugar("fate.log")
+	// trait.NewZapFileSugar("fate.log")
 }
 
 func TestFate_RunMakeName(t *testing.T) {
@@ -46,7 +46,7 @@ func TestFate_RunMakeName(t *testing.T) {
 	}
 	f := fate.NewFate(last, born, fate.ConfigOption(cfg), fate.SexOption(fate.SexGirl))
 
-	//f.SetDB(eng)
+	// f.SetDB(eng)
 	e := f.MakeName(context.Background())
 	if e != nil {
 		t.Fatal(e)
@@ -85,7 +85,7 @@ func TestFate_RunMakeNameWithLocalDatabase(t *testing.T) {
 	}
 	f := fate.NewFate(last, born, fate.ConfigOption(cfg), fate.SexOption(fate.SexGirl))
 
-	//f.SetDB(eng)
+	// f.SetDB(eng)
 	e := f.MakeName(context.Background())
 	if e != nil {
 		t.Fatal(e)
diff --git a/god.go b/god.go
index c137c14c..4feb4d34 100644
--- a/god.go
+++ b/god.go
@@ -2,11 +2,11 @@ package fate
 
 // LikeUseGod ...
 type LikeUseGod struct {
-	LikeGod string //喜神
-	UseGod  string //用神
-	Gold    string //五行:金
-	Wood    string //五行:木
-	Water   string //五行:水
-	Fire    string //五行:火
-	Soil    string //五行:土
+	LikeGod string // 喜神
+	UseGod  string // 用神
+	Gold    string // 五行:金
+	Wood    string // 五行:木
+	Water   string // 五行:水
+	Fire    string // 五行:火
+	Soil    string // 五行:土
 }
diff --git a/iterator.go b/iterator.go
index 6add3160..9ee5e8d7 100644
--- a/iterator.go
+++ b/iterator.go
@@ -16,12 +16,12 @@ func newIterator() *iterator {
 	}
 }
 
-//HasNext check next
+// HasNext check next
 func (i *iterator) HasNext() bool {
 	return i.index < len(i.data)
 }
 
-//Next get next
+// Next get next
 func (i *iterator) Next() interface{} {
 	defer func() {
 		i.index++
@@ -33,22 +33,22 @@ func (i *iterator) Next() interface{} {
 	return nil
 }
 
-//Reset reset index
+// Reset reset index
 func (i *iterator) Reset() {
 	i.index = 0
 }
 
-//Add add radical
+// Add add radical
 func (i *iterator) Add(v interface{}) {
 	i.data = append(i.data, v)
 }
 
-//Size iterator data size
+// Size iterator data size
 func (i *iterator) Size() int {
 	return len(i.data)
 }
 
-//Iterator an default iterator
+// Iterator an default iterator
 func (i *iterator) Iterator(f IteratorFunc) error {
 	i.Reset()
 	for i.HasNext() {
diff --git a/martial.go b/martial.go
index 889608de..0446704a 100644
--- a/martial.go
+++ b/martial.go
@@ -1,11 +1,11 @@
 package fate
 
-//Martial six martials
+// Martial six martials
 type Martial struct {
-	BiHua     bool `bson:"bi_hua" json:"bi_hua"`         //笔画
-	SanCai    bool `bson:"san_cai" json:"san_cai"`       //三才
-	BaZi      bool `bson:"ba_zi" json:"ba_zi"`           //八字
-	GuaXiang  bool `bson:"gua_xiang" json:"gua_xiang"`   //卦象
-	TianYun   bool `bson:"tian_yun" json:"tian_yun"`     //天运
-	ShengXiao bool `bson:"sheng_xiao" json:"sheng_xiao"` //生肖
+	BiHua     bool `bson:"bi_hua" json:"bi_hua"`         // 笔画
+	SanCai    bool `bson:"san_cai" json:"san_cai"`       // 三才
+	BaZi      bool `bson:"ba_zi" json:"ba_zi"`           // 八字
+	GuaXiang  bool `bson:"gua_xiang" json:"gua_xiang"`   // 卦象
+	TianYun   bool `bson:"tian_yun" json:"tian_yun"`     // 天运
+	ShengXiao bool `bson:"sheng_xiao" json:"sheng_xiao"` // 生肖
 }
diff --git a/name.go b/name.go
index 06b24077..2f669cfa 100644
--- a/name.go
+++ b/name.go
@@ -1,19 +1,20 @@
 package fate
 
 import (
-	"github.com/godcong/chronos"
-	"github.com/godcong/yi"
 	"strconv"
 	"strings"
+
+	"github.com/godcong/chronos"
+	"github.com/godcong/yi"
 )
 
-//Name 姓名
+// Name 姓名
 type Name struct {
-	FirstName   []*Character //名姓
+	FirstName   []*Character // 名姓
 	LastName    []*Character
 	born        *chronos.Calendar
 	baZi        *BaZi
-	baGua       *yi.Yi //周易八卦
+	baGua       *yi.Yi // 周易八卦
 	zodiac      *Zodiac
 	zodiacPoint int
 }
diff --git a/name_stroke.go b/name_stroke.go
index 71cd4cfe..5687d802 100644
--- a/name_stroke.go
+++ b/name_stroke.go
@@ -2,7 +2,7 @@ package fate
 
 // NameStroke ...
 type NameStroke struct {
-	//ID     bson.ObjectId `bson:"_id,omitempty"`
+	// ID     bson.ObjectId `bson:"_id,omitempty"`
 	Last1  int `bson:"last_1"`
 	Last2  int `bson:"last_2"`
 	First1 int `bson:"first_1"`
@@ -19,7 +19,7 @@ type nameStroke struct {
 type SanCaiWuGe interface {
 }
 
-//SanCaiWuGe 三才五格
+// SanCaiWuGe 三才五格
 func (s *NameStroke) SanCaiWuGe() SanCaiWuGe {
 	l1, l2, f1, f2 := s.Last1, s.Last2, s.First1, s.First2
 	wuGe := &WuGe{
diff --git a/nayin.go b/nayin.go
index 3bf638cb..03259331 100644
--- a/nayin.go
+++ b/nayin.go
@@ -2,12 +2,12 @@ package fate
 
 import "github.com/godcong/chronos"
 
-//NaYin 纳音
+// NaYin 纳音
 type NaYin struct {
 	calendar *chronos.Calendar
 }
 
-//NewNaYin 创建纳音
+// NewNaYin 创建纳音
 func NewNaYin(calendar *chronos.Calendar) *NaYin {
 	return &NaYin{
 		calendar: calendar,
diff --git a/sancai.go b/sancai.go
index 08127e16..e9247aff 100644
--- a/sancai.go
+++ b/sancai.go
@@ -13,11 +13,11 @@ type SanCai struct {
 	renCaiYinYang  string `bson:"ren_cai_yin_yang"`
 	diCai          string `bson:"di_cai"`
 	diCaiYingYang  string `bson:"di_cai_ying_yang"`
-	fortune        string `bson:"fortune"` //吉凶
-	comment        string `bson:"comment"` //说明
+	fortune        string `bson:"fortune"` // 吉凶
+	comment        string `bson:"comment"` // 说明
 }
 
-//NewSanCai 新建一个三才对象
+// NewSanCai 新建一个三才对象
 func NewSanCai(tian, ren, di int) *SanCai {
 	return &SanCai{
 		tianCai:        sanCaiAttr(tian),
@@ -29,7 +29,7 @@ func NewSanCai(tian, ren, di int) *SanCai {
 	}
 }
 
-//Check 检查三才属性
+// Check 检查三才属性
 func Check(engine *xorm.Engine, cai *SanCai, point int) bool {
 	wx := FindWuXing(engine, cai.tianCai, cai.renCai, cai.diCai)
 	if wx.Luck.Point() >= point {
diff --git a/stroke.go b/stroke.go
index 36d3c883..d466ffd8 100644
--- a/stroke.go
+++ b/stroke.go
@@ -1,16 +1,16 @@
 package fate
 
-//Strokes 推荐笔画数
+// Strokes 推荐笔画数
 type Strokes struct {
-	SimplifiedChinese  int //简体中文
-	TraditionalChinese int //繁体中文
-	KangxiDictionary   int //康熙字典
-	GodBook            int //神册
+	SimplifiedChinese  int // 简体中文
+	TraditionalChinese int // 繁体中文
+	KangxiDictionary   int // 康熙字典
+	GodBook            int // 神册
 }
 
-//FindCharacterStrokes 通过文字查询推荐笔画数
+// FindCharacterStrokes 通过文字查询推荐笔画数
 func FindCharacterStrokes(char string) int {
-	//TODO:find
+	// TODO:find
 	s := &Strokes{}
 	if s.GodBook > 0 {
 		return s.GodBook
diff --git a/version.go b/version.go
index 9e8741a9..43dc5729 100644
--- a/version.go
+++ b/version.go
@@ -1,4 +1,4 @@
 package fate
 
 // Version ...
-const Version = "v3.5.3"
+const Version = "v3.5.7"
diff --git a/wuge.go b/wuge.go
index c9b5f12c..49bf887c 100644
--- a/wuge.go
+++ b/wuge.go
@@ -67,8 +67,8 @@ func tianGe(l1, l2, _, _ int) int {
 // 人格(单姓单名)姓加名
 //  人格(单姓复名)姓加名的第一字
 func renGe(l1, l2, f1, _ int) int {
-	//人格(复姓)姓氏的第二字的笔画加名的第一字
-	//人格(复姓单名)姓的第二字加名
+	// 人格(复姓)姓氏的第二字的笔画加名的第一字
+	// 人格(复姓单名)姓的第二字加名
 	if l2 != 0 {
 		return l2 + f1
 	}
@@ -91,19 +91,19 @@ func diGe(_, _, f1, f2 int) int {
 // 外格(单姓复名)一加名的最后一个字
 // 外格(单姓单名)一加一
 func waiGe(l1, l2, _, f2 int) (n int) {
-	//单姓单名
+	// 单姓单名
 	if l2 == 0 && f2 == 0 {
 		n = 1 + 1
 	}
-	//单姓复名
+	// 单姓复名
 	if l2 == 0 && f2 != 0 {
 		n = 1 + f2
 	}
-	//复姓单名
+	// 复姓单名
 	if l2 != 0 && f2 == 0 {
 		n = l1 + 1
 	}
-	//复姓复名
+	// 复姓复名
 	if l2 != 0 && f2 != 0 {
 		n = l1 + f2
 	}
@@ -113,7 +113,7 @@ func waiGe(l1, l2, _, f2 int) (n int) {
 // zongGe input the ScienceStrokes with name
 // 总格,姓加名的笔画总数  数理五行分类
 func zongGe(l1, l2, f1, f2 int) int {
-	//归1
+	// 归1
 	zg := (l1 + l2 + f1 + f2) - 1
 	if zg < 0 {
 		zg = zg + 81
diff --git a/wuge_test.go b/wuge_test.go
index db483fa9..b94632da 100644
--- a/wuge_test.go
+++ b/wuge_test.go
@@ -2,9 +2,10 @@ package fate_test
 
 import (
 	"fmt"
-	"github.com/babyname/fate"
 	"log"
 	"testing"
+
+	"github.com/babyname/fate"
 )
 
 // TestWuGe_WaiGe ...
diff --git a/wuxing.go b/wuxing.go
index 4d240ff0..11953b16 100644
--- a/wuxing.go
+++ b/wuxing.go
@@ -2,6 +2,7 @@ package fate
 
 import (
 	"errors"
+
 	"github.com/xormsharp/xorm"
 )
 
@@ -25,14 +26,14 @@ func ToLuck(s string) (l Luck, e error) {
 	return Luck(0), errors.New("parse error")
 }
 
-//WuXing 五行:five elements of metal,wood,water,fire and earth
+// WuXing 五行:five elements of metal,wood,water,fire and earth
 type WuXing struct {
 	WuXing  string `json:"wu_xing"`
 	Luck    Luck   `json:"luck"`
 	Comment string `json:"comment"`
 }
 
-//FindWuXing find a wuxing
+// FindWuXing find a wuxing
 func FindWuXing(engine *xorm.Engine, s ...string) *WuXing {
 	var wx WuXing
 	_, e := engine.Where("first = ?", s[0]).And("second = ?", s[1]).And("third = ?", s[2]).Get(&wx)
diff --git a/xiyong.go b/xiyong.go
index 769a4df5..051113a3 100644
--- a/xiyong.go
+++ b/xiyong.go
@@ -5,19 +5,19 @@ import (
 	"strings"
 )
 
-//XiYong 喜用神
+// XiYong 喜用神
 type XiYong struct {
 	WuXingFen          map[string]int
-	Similar            []string //同类
+	Similar            []string // 同类
 	SimilarPoint       int
-	Heterogeneous      []string //异类
+	Heterogeneous      []string // 异类
 	HeterogeneousPoint int
 }
 
 var sheng = []string{"木", "火", "土", "金", "水"}
 var ke = []string{"木", "土", "水", "火", "金"}
 
-//AddFen 五行分
+// AddFen 五行分
 func (xy *XiYong) AddFen(s string, point int) {
 	if xy.WuXingFen == nil {
 		xy.WuXingFen = make(map[string]int)
@@ -30,7 +30,7 @@ func (xy *XiYong) AddFen(s string, point int) {
 	}
 }
 
-//GetFen 取得分
+// GetFen 取得分
 func (xy *XiYong) GetFen(s string) (point int) {
 	if xy.WuXingFen == nil {
 		return 0
@@ -54,7 +54,7 @@ func (xy *XiYong) minFenWuXing(ss ...string) (wx string) {
 	return
 }
 
-//Shen 喜用神
+// Shen 喜用神
 func (xy *XiYong) Shen() string {
 	if !xy.QiangRuo() {
 		return xy.minFenWuXing(xy.Similar...)
@@ -62,7 +62,7 @@ func (xy *XiYong) Shen() string {
 	return xy.minFenWuXing(xy.Heterogeneous...)
 }
 
-//QiangRuo 八字偏强(true)弱(false)
+// QiangRuo 八字偏强(true)弱(false)
 func (xy *XiYong) QiangRuo() bool {
 	return xy.SimilarPoint > xy.HeterogeneousPoint
 }
diff --git a/yao.go b/yao.go
index 8dc94ca3..c9fc429d 100644
--- a/yao.go
+++ b/yao.go
@@ -4,8 +4,8 @@ import "github.com/godcong/yi"
 
 // GuaYao ...
 type GuaYao struct {
-	Yao     string `bson:"er_yao"`          //二爻
-	JiXiong string `bson:"er_yao_ji_xiong"` //二爻吉凶
+	Yao     string `bson:"er_yao"`          // 二爻
+	JiXiong string `bson:"er_yao_ji_xiong"` // 二爻吉凶
 }
 
 func getYao(xiang *yi.GuaXiang, yao int) GuaYao {
diff --git a/zhouyi.go b/zhouyi.go
index b465108e..056b9a46 100644
--- a/zhouyi.go
+++ b/zhouyi.go
@@ -4,7 +4,7 @@ import (
 	"github.com/godcong/yi"
 )
 
-//QiGua 起卦
+// QiGua 起卦
 func QiGua(xia, shang int) *yi.Yi {
 	return yi.NumberQiGua(shang, xia)
 }
diff --git a/zodiac.go b/zodiac.go
index 788149c7..f2846c94 100644
--- a/zodiac.go
+++ b/zodiac.go
@@ -23,12 +23,12 @@ const (
 	ZodiacPig     = "猪"
 )
 
-//Zodiac 生肖
+// Zodiac 生肖
 type Zodiac struct {
 	Name      string
-	Xi        string //喜
+	Xi        string // 喜
 	XiRadical string
-	Ji        string //忌
+	Ji        string // 忌
 	JiRadical string
 }
 
@@ -125,7 +125,7 @@ func filterZodiac(c chronos.Calendar, chars ...*Character) bool {
 	return GetZodiac(c).PointCheck(3, chars...)
 }
 
-//PointCheck 检查point
+// PointCheck 检查point
 func (z *Zodiac) PointCheck(limit int, chars ...*Character) bool {
 	for _, c := range chars {
 		if z.Point(c) < limit {
@@ -135,7 +135,7 @@ func (z *Zodiac) PointCheck(limit int, chars ...*Character) bool {
 	return true
 }
 
-//Point 喜忌对冲,理论上喜忌都有的话,最好不要选给1,忌给0,喜给5,都没有给3
+// Point 喜忌对冲,理论上喜忌都有的话,最好不要选给1,忌给0,喜给5,都没有给3
 func (z *Zodiac) Point(character *Character) int {
 	dp := 3
 	dp += z.zodiacJi(character)