1 回答

TA贡献1810条经验 获得超4个赞
似乎 Person 结构可以不导出并用作函数的返回值而不会收到以下错误:cannot refer to unexported name person.person.
但是,您可以创建一个从New()函数返回的 Person 接口,该函数返回实现该接口的未导出人员结构:
package models
type Person interface {
GetUsername() string
GetEmail() string
}
type person struct {
Username string
Email string
}
func (p person) GetUsername() string {
return p.Username
}
func (p person) GetEmail() string {
return p.Email
}
func New() Person{
return person{}
}
然后测试包可以使用该接口作为其返回值:
package test
func test() person.Person {
return person.New()
}
你有什么特别的理由想这样做吗?您将在惯用的 Go 代码中看到的常见模式如下所示:
// person.go
package person
// Person ...
type Person struct {
Username string
Email string
}
// New ...
func New() Person {
return Person{
Username: "username",
Email: "email",
}
}
// person_test.go
package person
import "testing"
func TestNew(t *testing.T) {
p := New()
if p.Username != "something" {
t.Error("error")
}
}
Person 结构及其测试包含在同一个包中,并且 Person 是一个导出的结构,它避免了以下 go-lint 警告:exported func New returns unexported type person.person, which can be annoying to use
- 1 回答
- 0 关注
- 115 浏览
添加回答
举报