为了账号安全,请及时绑定邮箱和手机立即绑定

鸭子在围棋中键入

鸭子在围棋中键入

Go
慕码人8056858 2021-05-22 18:15:00
我想编写一个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}


查看完整回答
反对 回复 2021-05-24
  • 2 回答
  • 0 关注
  • 193 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信