Ai
1 Star 0 Fork 0

nggs/micro

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
tpl.go 13.66 KB
一键复制 编辑 原始数据 按行查看 历史
李文建 提交于 2020-04-05 00:11 +08:00 . 整合其他模块代码
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540
package mgo
const DefaultTemplate = `
var _ = msg.PH
{{range .Messages}}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// collection [{{.Name}}] begin
func New_{{.Name}}() *{{.Name}} {
m := &{{.Name}}{
{{range .Fields}}
{{if (eq .DescriptorProtoType "message") }}
{{if not .IsRepeated}}
{{.Name}}: Get_{{.GoTypeToName}}(),
{{end}}
{{end}}
{{end}}
}
return m
}
func (m {{.Name}}) JsonString() string {
bs, _ := json.Marshal(m)
return fmt.Sprintf("{\"{{.Name}}\":%s}", string(bs))
}
func (m *{{.Name}}) ResetEx() {
{{range .Fields}}
{{if .IsRepeated}}
{{if eq .DescriptorProtoType "message"}}
{{if .IsMap}}
{{if and (not .ValueField.IsScalar) (not .ValueField.IsString) (not .ValueField.IsEnum)}}
for _, i := range m.{{.Name}} {
Put_{{.ValueTypeToName}}(i)
}
{{end}}
{{else}}
for _, i := range m.{{.Name}} {
Put_{{.GoTypeToName}}(i)
}
{{end}}
{{end}}
//m.{{.Name}} = {{.GoType}}{}
m.{{.Name}} = nil
{{else}}
{{if or (eq .DescriptorProtoType "int32") (eq .DescriptorProtoType "uint32") (eq .DescriptorProtoType "int64") (eq .DescriptorProtoType "uint64") }}
m.{{.Name}} = 0
{{end}}
{{if or (eq .DescriptorProtoType "sint32") (eq .DescriptorProtoType "sint64") (eq .DescriptorProtoType "fixed32") (eq .DescriptorProtoType "fixed64") (eq .DescriptorProtoType "enum")}}
m.{{.Name}} = 0
{{end}}
{{if or (eq .DescriptorProtoType "bool")}}
m.{{.Name}} = false
{{end}}
{{if or (eq .DescriptorProtoType "string")}}
m.{{.Name}} = ""
{{end}}
{{if or (eq .DescriptorProtoType "double") (eq .DescriptorProtoType "float")}}
m.{{.Name}} = 0.0
{{end}}
{{if or (eq .DescriptorProtoType "bytes") }}
m.{{.Name}} = nil
{{end}}
{{if or (eq .DescriptorProtoType "message") }}
if m.{{.Name}} != nil {
m.{{.Name}}.ResetEx()
} else {
m.{{.Name}} = Get_{{.GoTypeToName}}()
}
{{end}}
{{end}}
{{end}}
}
func (m {{.Name}}) Clone() *{{.Name}} {
n, ok := g_{{.Name}}_Pool.Get().(*{{.Name}})
if !ok || n == nil {
n = &{{.Name}}{}
}
{{range .Fields}}
{{if (eq .DescriptorProtoType "message") }}
{{if .IsRepeated}}
if len(m.{{.Name}}) > 0 {
n.{{.Name}} = make({{.GoType}}, len(m.{{.Name}}))
for i, e := range m.{{.Name}} {
{{if .IsMap}}
{{if and (not .ValueField.IsScalar) (not .ValueField.IsString) (not .ValueField.IsEnum)}}
if e != nil {
n.{{.Name}}[i] = e.Clone()
}
{{else}}
n.{{.Name}}[i] = e
{{end}}
{{else}}
if e != nil {
n.{{.Name}}[i] = e.Clone()
}
{{end}}
}
} else {
//n.{{.Name}} = {{.GoType}}{}
n.{{.Name}} = nil
}
{{else}}
if m.{{.Name}} != nil {
n.{{.Name}} = m.{{.Name}}.Clone()
}
{{end}}
{{else if (eq .DescriptorProtoType "bytes")}}
{{if .IsRepeated}}
if len(m.{{.Name}}) > 0 {
for _, b := range m.{{.Name}} {
if len(b) > 0 {
nb := make([]byte, len(b))
copy(nb, b)
n.{{.Name}} = append(n.{{.Name}}, nb)
} else {
//n.{{.Name}} = append(n.{{.Name}}, []byte{})
n.{{.Name}} = append(n.{{.Name}}, nil)
}
}
} else {
//n.{{.Name}} = [][]byte{}
n.{{.Name}} = nil
}
{{else}}
if len(m.{{.Name}}) > 0 {
n.{{.Name}} = make([]byte, len(m.{{.Name}}))
copy(n.{{.Name}}, m.{{.Name}})
} else {
//n.{{.Name}} = []byte{}
n.{{.Name}} = nil
}
{{end}}
{{else}}
{{if .IsRepeated}}
if len(m.{{.Name}}) > 0 {
n.{{.Name}} = make([]{{.GoTypeToName}}, len(m.{{.Name}}))
copy(n.{{.Name}}, m.{{.Name}})
} else {
//n.{{.Name}} = []{{.GoTypeToName}}{}
n.{{.Name}} = nil
}
{{else}}
n.{{.Name}} = m.{{.Name}}
{{end}}
{{end}}
{{end}}
return n
}
func Clone_{{.Name}}_Slice(dst []*{{.Name}}, src []*{{.Name}}) []*{{.Name}} {
for _, i := range dst {
Put_{{.Name}}(i)
}
if len(src) > 0 {
dst = make([]*{{.Name}}, len(src))
for i, e := range src {
if e != nil {
dst[i] = e.Clone()
}
}
} else {
//dst = []*{{.Name}}{}
dst = nil
}
return dst
}
{{if .ID}}
func (sc SimpleClient)FindOne_{{.Name}}(session *mongodb.Session, query interface{}) (one *{{.Name}}, err error) {
one = Get_{{.Name}}()
err = session.DB(sc.dbName).C(Tbl{{.Name}}).Find(query).One(one)
if err != nil {
Put_{{.Name}}(one)
return nil, err
}
return
}
func (sc SimpleClient)FindSome_{{.Name}}(session *mongodb.Session, query interface{}) (some []*{{.Name}}, err error) {
some = []*{{.Name}}{}
err = session.DB(sc.dbName).C(Tbl{{.Name}}).Find(query).All(&some)
if err != nil {
return nil, err
}
return
}
func (sc SimpleClient)UpdateSome_{{.Name}}(session *mongodb.Session, selector interface{}, update interface{}) (info *mgo.ChangeInfo, err error) {
info, err = session.DB(sc.dbName).C(Tbl{{.Name}}).UpdateAll(selector, update)
return
}
func (sc SimpleClient)Upsert_{{.Name}}(session *mongodb.Session, selector interface{}, update interface{}) (info *mgo.ChangeInfo, err error) {
info, err = session.DB(sc.dbName).C(Tbl{{.Name}}).Upsert(selector, update)
return
}
func (sc SimpleClient)UpsertID_{{.Name}}(session *mongodb.Session, id interface{}, update interface{}) (info *mgo.ChangeInfo, err error) {
info, err = session.DB(sc.dbName).C(Tbl{{.Name}}).UpsertId(id, update)
return
}
func (m {{.Name}}) Insert(session *mongodb.Session, dbName string) error {
return session.DB(dbName).C(Tbl{{.Name}}).Insert(m)
}
func (m {{.Name}}) Update(session *mongodb.Session, dbName string, selector interface{}, update interface{}) error {
return session.DB(dbName).C(Tbl{{.Name}}).Update(selector, update)
}
func (m {{.Name}}) UpdateByID(session *mongodb.Session, dbName string) error {
return session.DB(dbName).C(Tbl{{.Name}}).UpdateId(m.ID, m)
}
func (m {{.Name}}) RemoveByID(session *mongodb.Session, dbName string) error {
return session.DB(dbName).C(Tbl{{.Name}}).RemoveId(m.ID)
}
{{end}}
{{if .Msg}}
func (m {{.Name}}) ToMsg(n *msg.{{.Msg}}) *msg.{{.Msg}} {
if n == nil {
n = msg.Get_{{.Msg}}()
}
{{range .Fields}}
{{if .Msg}}
{{if .IsMessage }}
{{if .IsRepeated}}
if len(m.{{.Name}}) > 0 {
{{if .IsMap}}
{{if and (not .ValueField.IsScalar) (not .ValueField.IsString) (not .ValueField.IsEnum)}}
n.{{.Msg}} = make({{.MsgRepeatedMessageGoType}}, len(m.{{.Name}}))
for i, e := range m.{{.Name}} {
if e != nil {
n.{{.Msg}}[i] = e.ToMsg(n.{{.Msg}}[i])
} else {
n.{{.Msg}}[i] = msg.Get_{{.ValueTypeToName}}()
}
}
{{else}}
n.{{.Msg}} = make({{.GoType}}, len(m.{{.Name}}))
for i, e := range m.{{.Name}} {
n.{{.Msg}}[i] = e
}
{{end}}
{{else}}
{{if and (not .IsScalar) (not .IsString) (not .IsEnum)}}
n.{{.Msg}} = make({{.MsgRepeatedMessageGoType}}, len(m.{{.Name}}))
for i, e := range m.{{.Name}} {
if e != nil {
n.{{.Msg}}[i] = e.ToMsg(n.{{.Msg}}[i])
} else {
n.{{.Msg}}[i] = msg.Get_{{.GoTypeToName}}()
}
}
{{else}}
n.{{.Msg}} = make({{.GoType}}, len(m.{{.Name}}))
for i, e := range m.{{.Name}} {
n.{{.Msg}}[i] = e
}
{{end}}
{{end}}
} else {
//n.{{.Msg}} = {{.GoType}}{}
n.{{.Msg}} = nil
}
{{else}}
if m.{{.Msg}} != nil {
n.{{.Msg}} = m.{{.Name}}.ToMsg(n.{{.Msg}})
}
{{end}}
{{else if .IsBytes}}
{{if .IsRepeated}}
if len(m.{{.Name}}) > 0 {
for _, b := range m.{{.Name}} {
if len(b) > 0 {
nb := make([]byte, len(b))
copy(nb, b)
n.{{.Msg}} = append(n.{{.Msg}}, nb)
} else {
//n.{{.Msg}} = append(n.{{.Msg}}, []byte{})
n.{{.Msg}} = append(n.{{.Msg}}, nil)
}
}
} else {
//n.{{.Msg}} = [][]byte{}
n.{{.Msg}} = nil
}
{{else}}
if len(m.{{.Name}}) > 0 {
n.{{.Msg}} = make([]byte, len(m.{{.Name}}))
copy(n.{{.Msg}}, m.{{.Name}})
} else {
//n.{{.Msg}} = []byte{}
n.{{.Msg}} = nil
}
{{end}}
{{else}}
{{if .IsRepeated}}
if len(m.{{.Name}}) > 0 {
n.{{.Msg}} = make([]{{.GoTypeToName}}, len(m.{{.Name}}))
copy(n.{{.Msg}}, m.{{.Name}})
} else {
//n.{{.Msg}} = []{{.GoTypeToName}}{}
n.{{.Msg}} = nil
}
{{else}}
n.{{.Msg}} = m.{{.Name}}
{{end}}
{{end}}
{{end}}
{{end}}
return n
}
{{end}}
{{if .MapKey}}
type {{.Name}}Map map[{{.MapKey}}]*{{.Name}}
func To{{.Name}}Map(m map[{{.MapKey}}]*{{.Name}}) *{{.Name}}Map {
if m == nil {
return nil
}
return (*{{.Name}}Map)(&m)
}
func New{{.Name}}Map() (m *{{.Name}}Map) {
m = &{{.Name}}Map{}
return
}
func (m *{{.Name}}Map) Get(key {{.MapKey}}) (value *{{.Name}}, ok bool) {
value, ok = (*m)[key]
return
}
func (m *{{.Name}}Map) Set(key {{.MapKey}}, value *{{.Name}}) {
(*m)[key] = value
}
func (m *{{.Name}}Map) Add(key {{.MapKey}}) (value *{{.Name}}) {
value = Get_{{.Name}}()
(*m)[key] = value
return
}
func (m *{{.Name}}Map) Remove(key {{.MapKey}}) (removed bool) {
if _, ok := (*m)[key]; ok {
delete(*m, key)
return true
}
return false
}
func (m *{{.Name}}Map) RemoveOne(fn func(key {{.MapKey}}, value *{{.Name}}) (removed bool)) {
for key, value := range *m {
if fn(key, value) {
delete(*m, key)
break
}
}
}
func (m *{{.Name}}Map) RemoveSome(fn func(key {{.MapKey}}, value *{{.Name}}) (removed bool)) {
left := map[{{.MapKey}}]*{{.Name}}{}
for key, value := range *m {
if !fn(key, value) {
left[key] = value
}
}
*m = left
}
func (m *{{.Name}}Map) Each(f func(key {{.MapKey}}, value *{{.Name}}) (continued bool)) {
for key, value := range *m {
if !f(key, value) {
break
}
}
}
func (m {{.Name}}Map) Size() int {
return len(m)
}
func (m {{.Name}}Map) Clone() (n *{{.Name}}Map) {
if m.Size() == 0 {
return nil
}
n = To{{.Name}}Map(make(map[{{.MapKey}}]*{{.Name}}, m.Size()))
for k, v := range m {
if v != nil {
(*n)[k] = v.Clone()
} else {
(*n)[k] = nil
}
}
return n
}
func (m *{{.Name}}Map) Clear() {
*m = *New{{.Name}}Map()
}
{{if .Msg}}
func (m {{.Name}}Map) ToMsg(n map[{{.MapKey}}]*msg.{{.Name}}) map[{{.MapKey}}]*msg.{{.Name}} {
if m.Size() == 0 {
return nil
}
n = make(map[{{.MapKey}}]*msg.{{.Name}}, m.Size())
for k, v := range m {
if v != nil {
n[k] = v.ToMsg(nil)
} else {
n[k] = msg.Get_{{.Name}}()
}
}
return n
}
{{end}}
{{end}}
{{if .Slice}}
type {{.Name}}Slice []*{{.Name}}
func New{{.Name}}Slice() *{{.Name}}Slice {
return &{{.Name}}Slice{}
}
func To{{.Name}}Slice(s []*{{.Name}}) *{{.Name}}Slice {
return (*{{.Name}}Slice)(&s)
}
func (s *{{.Name}}Slice) Add() *{{.Name}} {
return s.AddOne(Get_{{.Name}}())
}
func (s *{{.Name}}Slice) AddOne(newOne *{{.Name}}) *{{.Name}} {
*s = append(*s, newOne)
return newOne
}
func (s *{{.Name}}Slice) RemoveOne(fn func(index int, element *{{.Name}}) (removed bool)) {
for i, e := range *s {
if fn(i, e) {
*s = append((*s)[:i], (*s)[i+1:]...)
break
}
}
}
func (s *{{.Name}}Slice) RemoveSome(fn func(index int, element *{{.Name}}) (removed bool)) {
var left []*{{.Name}}
for i, e := range *s {
if !fn(i, e) {
left = append(left, e)
}
}
*s = left
}
func (s {{.Name}}Slice) Each(fn func(index int, element *{{.Name}}) (continued bool)) {
for i, e := range s {
if !fn(i, e) {
break
}
}
}
func (s {{.Name}}Slice) Size() int {
return len(s)
}
func (s {{.Name}}Slice) Clone() (n *{{.Name}}Slice) {
if s.Size() == 0 {
return nil
}
n = To{{.Name}}Slice(make([]*{{.Name}}, s.Size()))
for i, e := range s {
if e != nil {
(*n)[i] = e.Clone()
} else {
(*n)[i] = nil
}
}
return n
}
func (s *{{.Name}}Slice) Clear() {
*s = *New{{.Name}}Slice()
}
{{if .Msg}}
func (s {{.Name}}Slice) ToMsg(n []*msg.{{.Name}}) []*msg.{{.Name}} {
if s.Size() == 0 {
return nil
}
n = make([]*msg.{{.Name}}, s.Size())
for i, e := range s {
if e != nil {
n[i] = e.ToMsg(nil)
} else {
n[i] = msg.Get_{{.Name}}()
}
}
return n
}
{{end}}
{{end}}
var g_{{.Name}}_Pool = sync.Pool{}
func Get_{{.Name}}() *{{.Name}} {
m, ok := g_{{.Name}}_Pool.Get().(*{{.Name}})
if !ok {
m = New_{{.Name}}()
} else {
if m == nil {
m = New_{{.Name}}()
} else {
m.ResetEx()
}
}
return m
}
func Put_{{.Name}}(i interface{}) {
if m, ok := i.(*{{.Name}}); ok && m != nil {
g_{{.Name}}_Pool.Put(i)
}
}
// collection [{{.Name}}] end
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
{{end}}
`
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
Go
1
https://gitee.com/nggs/micro.git
git@gitee.com:nggs/micro.git
nggs
micro
micro
bac99dff65eb

搜索帮助