我希望following code在编译过程中至少会发出一个警告,因为格式化程序与变量类型不一致:
package main
import "fmt"
func main() {
s := "hello"
fmt.Printf("1 %w", s)
fmt.Printf("2 %s", s)
}
变量的类型在编译时是已知的,并且字符串格式化程序是以确定性的方式解析的--是否有什么原因导致错误没有在此时出现?
我得到的是一个输出
这似乎是某种消息,告诉%w
对于类型string
是错误的(但仅在运行时)
1条答案
按热度按时间smdncfj31#
fmt.Printf
字符串参数在运行时解释,而不是在编译时解释。printf根据格式说明符格式化并写入标准输出。它返回写入的字节数和遇到的任何写入错误。
使用静态分析筛选器,例如
go vet
。go command - cmd/go - Go Packages
报告包中可能的错误
用法:
Vet对导入路径命名的包运行Go vet命令。
有关vet及其标志的更多信息,请参见"go doc cmd/vet"。
so.go:
棉绒:
运行时间: