我想编写一个Join带有String()方法的任意对象的函数:package mainimport ( "fmt" "strings")type myint intfunc (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吗?
2 回答
慕田峪4524236
TA贡献1875条经验 获得超5个赞
问:我应该将的一部分切成myint薄片Stringer吗?
Go中没有强制转换-只有转换。但是,除非在循环中显式进行,否则无法从具体的非接口类型片转换为接口类型片。原因是,例如在您的情况下,[]myint后备阵列的内存布局与实际[]fmt.Stringer情况不同。
附带说明,您不必编写:
parts := []myint{myint(1), myint(5), myint(6)}
这应该以相同的方式工作:
parts := []myint{1, 5, 6}
- 2 回答
- 0 关注
- 193 浏览
添加回答
举报
0/150
提交
取消