我所知道的打印int
,我们可以使用%d
,并且string
我们可以使用%s
,但我们仍然可以使用%v
打印它们。那么,如果我总是习惯于%v
打印它们怎么办?如果我这样做会发生什么问题?
不会有什么不好的,但是%d
动词指示fmt
软件包打印为数字(以10为底),%v
动词表示使用可以覆盖的
默认 格式。
请参阅以下示例:
type MyInt int
func (mi MyInt) String() string {
return fmt.Sprint("*", int(mi), "*")
}
func main() {
var mi MyInt = 2
fmt.Printf("%d %v", mi, mi)
}
输出(在Go Playground上尝试):
2 *2*
使用%v
动词时,fmt
程序包将检查该值是否实现fmt.Stringer
接口(这是一个String() string
方法),如果是,则将调用该方法将值转换为string
(如果指定了标志,则可以进一步格式化)。
格式规则的完整列表位于的doc文件中fmt
,并引用了相关部分:
除非使用动词%T和%p进行打印,否则特殊格式注意事项适用于实现某些接口的html" target="_blank">操作数。按申请顺序:
如果操作数是reflect.Value,则将操作数替换为其所持有的具体值,然后使用下一个规则继续打印。
如果操作数实现了Formatter接口,则将调用它。Formatter提供了对格式的精细控制。
如果%v动词与#标志(%#v)一起使用,并且操作数实现GoStringer接口,则将调用该接口。
如果格式(对于Println等,隐式为%v)对于字符串(%s%q%v%x%X)有效,则以下两个规则适用:
如果操作数实现错误接口,则将调用Error方法将对象转换为字符串,然后根据动词的要求对其进行格式化(如果有)。
如果操作数实现String()字符串方法,则将调用该方法将对象转换为字符串,然后根据动词的要求对其进行格式化(如果有)。
问题内容: 我有以下课程: 这是编译结果; 为什么我的输出中包含数字? 问题答案: 在第二种情况下,它将两个字符(G-71和o-111)的unicode码相加并打印总和。这是因为被视为数字类型,因此在这种情况下,运算符是通常的求和。
下面的print语句将打印“helloworld”。有人能解释一下吗? 而如下所示:
所以我有这个代码,叫我白痴哈哈,但是我不能让它打印7。 代码: 我需要知道如何改变与函数中的参数同名的变量。 任何帮助都将不胜感激,如果你不明白这个问题,我很乐意解释更多。
我试图使用流按国籍对我的对象进行分组并打印出来。 但是它说:"不能解析方法'println"
问题内容: 以下打印语句将打印“ hello world”。有人可以解释吗? 而且是这样的: 问题答案: 当使用特定的种子参数(在这种情况下为或)构造的实例时,它遵循以该种子值 开头 的随机数生成算法。 每个使用相同种子构造的对象每次都会生成相同的数字模式。
这应该很容易完成,但是当我尝试将字符串转换为整数时,这些命令返回错误: Android monitor返回以下错误: 提前致谢