相关疑难解决方法(0)

在Go中,有没有办法从另一个包访问结构的私有字段?

我在一个包含私有字段的结构中有一个结构:

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)?

private friend package go

25
推荐指数
1
解决办法
1万
查看次数

为什么在打印结构字段时我的类型的 String() 方法没有被调用?

我有一个叫做 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)

go

0
推荐指数
1
解决办法
68
查看次数

标签 统计

go ×2

friend ×1

package ×1

private ×1