是的,您可以通过切片传递给可变参数
Sprintf函数的参数来做到这一点:
func TruncatingSprintf(str string, args ...interface{}) (string, error) { n := strings.Count(str, "%s") if n > len(args) { return "", errors.New("Unexpected string:" + str) } return fmt.Sprintf(str, args[:n]...), nil}func main() { tmp_str := "hello %s %s %s" // don't hesitate to add many %s here str, err := TruncatingSprintf(tmp_str, "world") // or many arguments here if err != nil { fmt.Println(err) return } fmt.Println(str)}示范1
演示2 (即使%s大于参数,也会输出不同的版本)
但是您通常不使用动态格式的字符串,这是不安全的,并且如果您想接受 任何
字符串,则还应该使此代码适应于您的需求
%%s。如果您走了这么远,那么您可能应该看看模板(它可以让您使用命名字符串,因此丢失的一个不必是最后一个)。



