在Go中制作一个任意切片类型的stringer方法

时间:2018-06-03 17:23:16

标签: go

Golang新手。所以我在Go游览中阅读了关于stringer的内容,我想知道有没有办法为任何类型的切片定义一个通用的自定义Stringer()? E.g:

package main

import "fmt"

type IntSlice []int

func (a IntSlice) String() string {
    return fmt.Sprintf("len %d\tcap %d", len(a), cap(a))
}

func main() {
    a:=[40]int{}
    sa:=IntSlice(a[:])
    fmt.Println(unsafe.Sizeof(a), "\t", unsafe.Sizeof(sa), " ", cap(sa))

    fmt.Println(sa)
}

像这样但没有IntSlice类型的定义。

谢谢!

1 个答案:

答案 0 :(得分:3)

type SliceStringer struct {
    Slice interface{}
}

func (ss SliceStringer) String() string {
    rv := reflect.ValueOf(ss.Slice)
    return fmt.Sprintf("len %d\tcap %d", rv.Len(), rv.Cap())
}

https://play.golang.org/p/jWnm9vCDFhq