Skip to content

Three areas of code that I think can be optimized #304

Open
@guowei-gong

Description

我不确定这些点修改后,可以让 qmgo 变的更好,如果可以,我很乐意修改并 pr。

  1. Qmogo 中的 util.go 中的 SplitSortField 函数中,if len() 影响了代码缩进。代码应通过尽可能先处理错误情况/特殊情况并尽早返回或继续循环来减少嵌套。减少嵌套多个级别的代码的代码量。

修改前:
image

修改后:

func SplitSortField(field string) (key string, sort int32) {
	key = field
	sort = 1

	if len(field) == 0 {
		return key, sort
	}

	switch field[0] {
	case '+':
		key = strings.TrimPrefix(field, "+")
		sort = 1
	case '-':
		key = strings.TrimPrefix(field, "-")
		sort = -1
	}
	return
}
  1. Qmogo 中的 cursor.go 中的 Next 函数中,err 判断可以简化。尽量缩小变量作用范围。

修改前:
image

修改后:

func (c *Cursor) Next(result interface{}) bool {
	if c.err != nil {
		return false
	}
	if c.cursor.Next(c.ctx) {
		if err := c.cursor.Decode(result); err != nil {
			c.err = err
			return false
		}
		return true
	}
	return false
}
  1. Qmogo 中的 session.go 中的 StartTransaction 函数中,返回值做了多余的判断。不必要的 if else 判断。

修改前:
image

修改后:

func (s *Session) StartTransaction(ctx context.Context, cb func(sessCtx context.Context) (interface{}, error), opts ...*opts.TransactionOptions) (interface{}, error) {
	transactionOpts := options.Transaction()
	if len(opts) > 0 && opts[0].TransactionOptions != nil {
		transactionOpts = opts[0].TransactionOptions
	}
	return s.session.WithTransaction(ctx, wrapperCustomCb(cb), transactionOpts)
}

期待您的回复 :-)

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestquestionFurther information is requested

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions