前置更新
前置更新
This commit is contained in:
159
data/view/gtools/generate/common.go
Normal file
159
data/view/gtools/generate/common.go
Normal file
@@ -0,0 +1,159 @@
|
||||
package generate
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"github.com/xie1xiao1jun/public/tools"
|
||||
)
|
||||
|
||||
// 打印
|
||||
func (p *PrintAtom) Add(str ...interface{}) {
|
||||
var tmp string
|
||||
for _, v := range str {
|
||||
tmp += tools.AsString(v) + _interval
|
||||
}
|
||||
p.lines = append(p.lines, tmp)
|
||||
}
|
||||
|
||||
// 打印
|
||||
func (p *PrintAtom) Generate() []string {
|
||||
return p.lines
|
||||
}
|
||||
|
||||
//设置元素名字
|
||||
func (e *GenElement) SetName(name string) {
|
||||
e.Name = name
|
||||
}
|
||||
|
||||
//设置元素类型
|
||||
func (e *GenElement) SetType(tp string) {
|
||||
e.Type = tp
|
||||
}
|
||||
|
||||
//设置注释
|
||||
func (e *GenElement) SetNotes(notes string) {
|
||||
e.Notes = notes
|
||||
}
|
||||
|
||||
//添加一个tag标记
|
||||
func (e *GenElement) AddTag(k string, v string) {
|
||||
if e.Tags == nil {
|
||||
e.Tags = make(map[string][]string)
|
||||
}
|
||||
e.Tags[k] = append(e.Tags[k], v)
|
||||
}
|
||||
|
||||
//获取结果数据
|
||||
func (e *GenElement) Generate() string {
|
||||
tag := ""
|
||||
if e.Tags != nil {
|
||||
for k, v := range e.Tags {
|
||||
tag += fmt.Sprintf(`%v:"%v"`, k, strings.Join(v, ","))
|
||||
}
|
||||
tag = fmt.Sprintf("`%v`", tag)
|
||||
}
|
||||
|
||||
var p PrintAtom
|
||||
p.Add(e.Name, e.Type, tag, "//", e.Notes)
|
||||
return p.Generate()[0]
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// struct
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//获取结果数据
|
||||
func (s *GenStruct) SetStructName(name string) {
|
||||
s.Name = name
|
||||
}
|
||||
|
||||
//设置注释
|
||||
func (e *GenStruct) SetNotes(notes string) {
|
||||
e.Notes = notes
|
||||
}
|
||||
|
||||
//添加一个元素
|
||||
func (s *GenStruct) AddElement(e GenElement) {
|
||||
s.Em = append(s.Em, e)
|
||||
}
|
||||
|
||||
//获取结果数据
|
||||
func (s *GenStruct) Generate() []string {
|
||||
var p PrintAtom
|
||||
p.Add("//", s.Notes)
|
||||
p.Add("type", s.Name, "struct {")
|
||||
for _, v := range s.Em {
|
||||
p.Add(v.Generate())
|
||||
}
|
||||
p.Add("}")
|
||||
|
||||
return p.Generate()
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// package
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//定义包名
|
||||
func (p *GenPackage) SetPackage(pname string) {
|
||||
p.Name = pname
|
||||
}
|
||||
|
||||
//通过类型添加import
|
||||
func (p *GenPackage) AddImport(imp string) {
|
||||
if p.Imports == nil {
|
||||
p.Imports = make(map[string]string)
|
||||
}
|
||||
p.Imports[imp] = imp
|
||||
}
|
||||
|
||||
//添加一个结构体
|
||||
func (p *GenPackage) AddStruct(st GenStruct) {
|
||||
p.Structs = append(p.Structs, st)
|
||||
}
|
||||
|
||||
//获取结果数据
|
||||
func (p *GenPackage) Generate() string {
|
||||
p.genimport() //补充 import
|
||||
|
||||
var pa PrintAtom
|
||||
pa.Add("package", p.Name)
|
||||
//add import
|
||||
if p.Imports != nil {
|
||||
pa.Add("import (")
|
||||
for _, v := range p.Imports {
|
||||
pa.Add(v)
|
||||
}
|
||||
pa.Add(")")
|
||||
}
|
||||
//-----------end
|
||||
//add struct
|
||||
for _, v := range p.Structs {
|
||||
for _, v1 := range v.Generate() {
|
||||
pa.Add(v1)
|
||||
}
|
||||
}
|
||||
//-----------end
|
||||
|
||||
//输出
|
||||
strOut := ""
|
||||
for _, v := range pa.Generate() {
|
||||
strOut += v + "\n"
|
||||
}
|
||||
|
||||
return strOut
|
||||
}
|
||||
|
||||
//获取结果数据
|
||||
func (p *GenPackage) genimport() {
|
||||
for _, v := range p.Structs {
|
||||
for _, v1 := range v.Em {
|
||||
if v2, ok := EImportsHead[v1.Type]; ok {
|
||||
if len(v2) > 0 {
|
||||
p.AddImport(v2)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
152
data/view/gtools/generate/def.go
Normal file
152
data/view/gtools/generate/def.go
Normal file
@@ -0,0 +1,152 @@
|
||||
package generate
|
||||
|
||||
//包类
|
||||
type IPackage interface {
|
||||
//定义包名
|
||||
SetPackage(string)
|
||||
//通过类型添加import
|
||||
AddImport(string)
|
||||
//添加一个结构体
|
||||
AddStruct(IStruct)
|
||||
//获取结果数据
|
||||
Generate() string
|
||||
}
|
||||
|
||||
//结构体类
|
||||
type IStruct interface {
|
||||
//设置结构体名字
|
||||
SetStructName(string)
|
||||
|
||||
//设置注释
|
||||
SetNotes(string)
|
||||
|
||||
//添加一个元素
|
||||
AddElement(IElement)
|
||||
|
||||
//获取结果数据
|
||||
Generate() []string
|
||||
}
|
||||
|
||||
//元素类
|
||||
type IElement interface {
|
||||
//设置元素名字
|
||||
SetName(string)
|
||||
//设置元素类型
|
||||
SetType(string)
|
||||
|
||||
//设置注释
|
||||
SetNotes(string)
|
||||
|
||||
//添加一个tag标记
|
||||
AddTag(k string, v string)
|
||||
|
||||
//获取结果数据
|
||||
Generate() string
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//元素类
|
||||
type GenElement struct {
|
||||
Name string //元素名
|
||||
Type string //类型标记
|
||||
Notes string //注释
|
||||
Tags map[string][]string //标记
|
||||
}
|
||||
|
||||
//结构体
|
||||
type GenStruct struct {
|
||||
Name string //名字
|
||||
Notes string //注释
|
||||
Em []GenElement //元素组合
|
||||
}
|
||||
|
||||
//包体
|
||||
type GenPackage struct {
|
||||
Name string //名字
|
||||
Imports map[string]string //元素组合
|
||||
Structs []GenStruct //结构体组合
|
||||
}
|
||||
|
||||
//间隔
|
||||
var _interval = "\t"
|
||||
|
||||
var EImportsHead = map[string]string{
|
||||
"stirng": "string",
|
||||
}
|
||||
|
||||
var isGoKeyword = map[string]bool{
|
||||
"break": true,
|
||||
"case": true,
|
||||
"chan": true,
|
||||
"const": true,
|
||||
"continue": true,
|
||||
"default": true,
|
||||
"else": true,
|
||||
"defer": true,
|
||||
"fallthrough": true,
|
||||
"for": true,
|
||||
"func": true,
|
||||
"go": true,
|
||||
"goto": true,
|
||||
"if": true,
|
||||
"import": true,
|
||||
"interface": true,
|
||||
"map": true,
|
||||
"package": true,
|
||||
"range": true,
|
||||
"return": true,
|
||||
"select": true,
|
||||
"struct": true,
|
||||
"switch": true,
|
||||
"type": true,
|
||||
"var": true,
|
||||
}
|
||||
|
||||
var isGoPredeclaredIdentifier = map[string]bool{
|
||||
"append": true,
|
||||
"bool": true,
|
||||
"byte": true,
|
||||
"cap": true,
|
||||
"close": true,
|
||||
"complex": true,
|
||||
"complex128": true,
|
||||
"complex64": true,
|
||||
"copy": true,
|
||||
"delete": true,
|
||||
"error": true,
|
||||
"false": true,
|
||||
"float32": true,
|
||||
"float64": true,
|
||||
"imag": true,
|
||||
"int": true,
|
||||
"int16": true,
|
||||
"int32": true,
|
||||
"int64": true,
|
||||
"int8": true,
|
||||
"iota": true,
|
||||
"len": true,
|
||||
"make": true,
|
||||
"new": true,
|
||||
"nil": true,
|
||||
"panic": true,
|
||||
"print": true,
|
||||
"println": true,
|
||||
"real": true,
|
||||
"recover": true,
|
||||
"rune": true,
|
||||
"string": true,
|
||||
"true": true,
|
||||
"uint": true,
|
||||
"uint16": true,
|
||||
"uint32": true,
|
||||
"uint64": true,
|
||||
"uint8": true,
|
||||
"uintptr": true,
|
||||
}
|
||||
|
||||
type PrintAtom struct {
|
||||
lines []string
|
||||
}
|
||||
1
data/view/gtools/generate/generate.go
Normal file
1
data/view/gtools/generate/generate.go
Normal file
@@ -0,0 +1 @@
|
||||
package generate
|
||||
Reference in New Issue
Block a user