【问题标题】:col.ToStrings undefined (type Columns has no field or method ToStrings)col.ToStrings 未定义(列类型没有字段或方法 ToStrings)
【发布时间】:2017-08-03 22:06:22
【问题描述】:

我正在尝试创建一个表示指向另一个类型的指针切片的类型并为其定义一个方法,我的代码看起来与此类似,尽管对于示例进行了一些简化:

package column

type Column struct {

    name string
}

type Columns []*Column

func (c Column) ToString() string {

    return c.name
}

func (c Columns) ToStrings() []string {

    var strSlice []string

    for _, v := range c {

        strSlice = append(strSlice, v.ToString())
    }

    return strSlice
}

然后在一个单独的文件中调用它,如下所示:

import (
    c "main/column"
    "strings"
)

type Columns c.Columns

func ToString(col Columns) string {

    return strings.Join(col.ToStrings(), ",\n")
}

但是,当我尝试在导出的“列”类型上调用方法 ToStrings() 时,我收到此错误:

columns.ToStrings 未定义(列类型没有字段或方法 ToStrings)

编译器似乎找不到方法ToStrings()。有没有解决的办法?为什么编译器找不到为“Columns”类型定义的导出方法?

【问题讨论】:

  • 您创建了一个没有任何方法的新 Columns 类型。如果您想要原始类型的方法,为什么要创建新类型?
  • 我只是觉得它更具可读性..所以我从你所说的收集到当我从旧类型中制作新类型时它不携带方法?
  • 谢谢你,如果你把它作为答案,我会接受它。

标签: go methods types export slice


【解决方案1】:

type Columns c.Columns 使用新方法集创建一个全新的类型。这样做的唯一原因是专门删除现有类型的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-22
    • 1970-01-01
    • 2020-12-24
    • 1970-01-01
    • 2021-11-26
    • 2021-08-02
    相关资源
    最近更新 更多