鸭子在围棋中键入

我想编写一个Join带有String()方法的任意对象的函数:


package main


import (

    "fmt"

    "strings"

)


type myint int


func (i myint) String() string {

    return fmt.Sprintf("%d", i)

}


func main() {

    parts := []myint{myint(1), myint(5), myint(6)}

    fmt.Println(Join(parts, ", "))

}


func Join(parts []fmt.Stringer, sep string) string {

    stringParts := make([]string, len(parts))

    for i, part := range(parts) {

        stringParts [i] = part.String()

    }

    return strings.Join(stringParts , sep)

}

http://play.golang.org/p/EhkbyibzHw


[]myint无法传递给Join,因为它不是type fmt.Stringer,所以我必须写:


parts := []fmt.Stringer{myint(1), myint(5), myint(6)}

但是,如果我需要parts另一个必须将值设置为int的操作怎么办?我应该将其中的一部分切成myint薄片Stringer吗?


慕码人8056858
浏览 197回答 2
2回答

慕田峪4524236

问:我应该将的一部分切成myint薄片Stringer吗?Go中没有强制转换-只有转换。但是,除非在循环中显式进行,否则无法从具体的非接口类型片转换为接口类型片。原因是,例如在您的情况下,[]myint后备阵列的内存布局与实际[]fmt.Stringer情况不同。附带说明,您不必编写:parts := []myint{myint(1), myint(5), myint(6)}这应该以相同的方式工作:parts := []myint{1, 5, 6}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go