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 關注
- 130 瀏覽
添加回答
舉報