我有以下代码,

package main
import "fmt"

func main() {
    var s1 []int
    //s2 := []int{}

    fmt.Printf("%d, %d, %T, %t, %#[3]v\n", len(s1), cap(s1), s1, s1 == nil)
}

输出结果是,

0, 0, []int, true, []int(nil)

我真的搞不懂"%[3]v"的用法,..由于我只传递了4个参数...

我预期的输出是

0, 0, []int, true

但是输出中的"[]int(Nil)"让我有点困惑.

推荐答案

正如您可以登记的fmt package documentation:

由于显式索引会影响后续的谓词,因此可以使用此表示法通过重置要重复的第一个参数的索引来多次打印相同的值: fmt.Sprintf("%d %d %#[1]x %#x", 16, 17)个 将产生"16 17 0x10 0x11".

因此,在您的特定示例中,如果使用%#[3]v,您将再次以默认格式%v打印nil片[]int(nil)的第三个参数.

Go相关问答推荐

在字符串与字符串子切片上使用len进行位转移产生意外输出

在Golang中,@LATEST和@UPGRADE特殊查询有什么不同?

获取作为类型参数传递给方法接收方中的类型参数的切片的基础类型

GORM Find(&;Room)操作使用空数据而不是实际数据填充 struct

如何将GoFr筛选器用于查询参数?

减少在围棋中映射DTO时的重复代码量

未实现的 desc = 未知服务 pb.AuthService 我的简单身份验证服务器上出现错误

当我的 go build 成功时,如何修复我的 docker build 失败? Dockerfile 包括 go mod 下载

GoLang:net.LookupHost 返回重复的 ips

使用 unsafe.Pointer 将 struct point直接转换为另一个 struct 是否安全?

有没有办法约束(通用)类型参数?

grpc-gateway:重定向与定义不匹配(原始文件)

Golang grpc go.mod 问题

具有近似约束的函数值导致的实例化失败

httprouterhttp.HandlerFunc() 是如何工作的?

为什么 go.mod 中的所有依赖都是间接的?

Go:如何创建一个可以提供配置文件中描述的 url 的服务器

Go generics:我会在哪里使用 any 而不是 interface{}?

Golang 泛型同时具有接口和实现

为什么在 unsafe.Sizeof() 中取消引用 nil 指针不会导致panic ?