- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
Go 新手,所以请多多包涵。
我一直在查看“围棋之旅”页面,无意中发现了一些关于 Stringer 的令人费解的东西。考虑 https://tour.golang.org/methods/18 处的练习
我最初的回答是实现
func (this *IPAddr) String() string {
return fmt.Sprintf("%d.%d.%d.%d", this[0], this[1], this[2], this[3])
}
然而,这不用于 f 主要打印只是 fmt.Printf("%v: %v\n", name, ip)
。如果我将打印更改为 fmt.Printf("%v: %v\n", name, ip.String())
,则无论接收方类型是 *IPAddr 都会使用它
或 IPAddr
)。
为什么会这样?
最佳答案
因为您将 IPAddr
值传递给 fmt.Printf
,所以您的 String()
方法不是方法集的一部分.如果您传入一个指针,您的解决方案就会起作用:
fmt.Printf("%v: %v\n", name, &ip)
但一般的解决方案是不使用指针接收器:
func (ip IPAddr) String() string {
return fmt.Sprintf("%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3])
}
这样,String()
方法可以从 IPAddr
中使用,这是您传递给 Printf
的内容,或者*IPAddr
,包含值接收者的方法。
关于go - Stringers 令人费解的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39279384/
Go 新手,所以请多多包涵。 我一直在查看“围棋之旅”页面,无意中发现了一些关于 Stringer 的令人费解的东西。考虑 https://tour.golang.org/methods/18 处的练
The Go FAQ answers a question关于方法中按值与按指针接收器定义的选择。该答案中的陈述之一是: If some of the methods of the type must
对于 Go 之旅中的 Stringers 练习:对于两种不同格式的打印,我得到了两种不同的输出。我唯一改变的是格式动词。他们是 %v 和 %d。理论上,它们会给出相同的输出。但是输出的顺序也改变了,这
我正在尝试使用 go generate/stringer (golang.org/x/tools/cmd/stringer) 在枚举上生成 String() 方法。我有问题,我认为是因为不同系统上的
知道如何修复下面的错误吗?我有一个 go 生成器 (stringer),我尝试运行它,但它一直报告说它找不到包导入,尽管包肯定是导入的。 stringer: checking package: mai
这个问题在这里已经有了答案: Can I type assert a slice of interface values? (2 个答案) 关闭 3 年前。 我有一个实现 stringer 接口(i
这个问题在这里已经有了答案: Why isn't my Stringer interface method getting invoked? When using fmt.Println (6 个答
我需要以这种格式将数据发送到数据库 - {"param1":"value1", "param2":"value2", "param3": {"username": "admin", "password
我正在完成 golang 之旅,但我被困在其中一个练习中。我不确定为什么以下内容不适用于 String() 函数: type IPAddr [4]byte func (addr IPAddr) Str
与 fmt.Stringer 一样, fmt 包寻找 error interface打印值时。如果一个type满足这两个接口(interface),fmt 仅在查找 error 而不是 Stringe
我可以实现 Stringer 来指定 fmt.Print() 如何将我的自定义类型写入字符串。 json marshal 有等效项吗? 我想在 go 中存储唯一值,并在 json 中将其表示为一个 s
这个问题在这里已经有了答案: puzzling behavior for Stringers? (2 个答案) 关闭 4 年前。 全部: 只是一个简单的问题: 围棋教程中 https://tour.
我有一个这样的结构: .foo/bar/constants.go .foo/constants.go .main.go 在 main.go 中声明类型: package agepack type Ev
我正在尝试使用 stringer cmd 以便我可以为某些 int 类型生成 String() 方法。这是代码的样子 //go:generate stringer -type=MyIntType ty
我想重写所有实例 sql.NullString 的 Stringer 接口(interface),以便实例的输出是 instance.String 而不是 { instance.String, ins
刚接触 Golang。所以我在 Go 之旅中读到了关于 stringer 的内容,我想知道是否有任何方法可以为任何类型的 slice 定义一个通用的自定义 Stringer()?例如: package
package main type foo struct { bar string baz string } func (f foo) String() string { re
假设我有以下代码: package main import "fmt" type Car struct{ year int make string } func (c *Car)Str
我是一名优秀的程序员,十分优秀!