我在一个包含私有字段的结构中有一个结构:
package foo
type Foo struct {
x int
y *Foo
}
Run Code Online (Sandbox Code Playgroud)
另一个包(例如,白盒测试包)需要访问它们:
package bar
import "../foo"
func change_foo(f *Foo) {
f.y = nil
}
Run Code Online (Sandbox Code Playgroud)
有没有办法声明bar是一种"朋友"包或任何其他方式,以便能够访问其foo.Foo私人成员bar,但仍然保持私有所有其他包(可能是某些东西unsafe)?
我有一个叫做 Password 的类型,它只是一个字符串。我想通过提供一个编辑值的 String() 方法来实现 Stringer 接口。
// Password a secret string that should not be leaked accidentally
type Password string
func (p Password) String() string {
return "*********" // redact the password
}
Run Code Online (Sandbox Code Playgroud)
如果我尝试打印密码,这将按我的预期工作。
p := Password("password not leaked here!")
fmt.Printf("password = %v \n", p)
// got... password = *********
Run Code Online (Sandbox Code Playgroud)
但是,如果 Password 是另一个结构中的字段,则不会调用我的 String() 方法。
// User has a name and password
type User struct {
name string
password Password
}
user := User{"Fran", Password("password was leaked!")}
fmt.Printf("user = …Run Code Online (Sandbox Code Playgroud)