Go 中为啥喜欢这样创建变量

经常能看到类似 newRouter 这样的代码

type router struct {
	roots    map[string]*node
	handlers map[string]HandleFunc
}

func newRouter() *router {
	return &router{
		roots:    make(map[string]*node),
		handlers: make(map[string]HandlerFunc),
	}
}

func (r *router) AddRoute(method string, pattern string, handler HandleFunc)
func (r *router) getRoute(method string, path string) (*node, map[string]string)

然后在其它地方这样调用

r := newRouter()
r.AddRoute()

为啥不直接这样呢?

var r router

代码都能看懂,但是不知道为啥喜欢这样用,或者这样用的好处是啥?

通过指针来保证代码块中访问的一致性,还是说避免参数复制产生的内存消耗?

在 pipe 里面也会有类似的代码

package gulu

// ..........

// Result represents a common-used result struct.
type Result struct {
	Code int         `json:"code"` // return code
	Msg  string      `json:"msg"`  // message
	Data interface{} `json:"data"` // data object
}

// NewResult creates a result with Code=0, Msg="", Data=nil.
func (*GuluRet) NewResult() *Result {
	return &Result{
		Code: 0,
		Msg:  "",
		Data: nil,
	}
}
package controller
// .... 

result := gulu.Ret.NewResult()
  • golang

    Go 语言是 Google 推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去 10 多年间软件开发的难度令人沮丧。Go 是谷歌 2009 发布的第二款编程语言。

    417 引用 • 1336 回帖 • 679 关注
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    1756 引用 • 11526 回帖 • 580 关注
1 操作
An 在 2020-07-29 11:23:33 更新了该帖

赞助商 我要投放

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • InkDP

    可能是 D 的习惯吧

  • wizardforcel

    当然是防止过度复制了。

    这个习惯和绝大多数编程语言一致。