2017-03-13 4 views
0

別の型へのポインタのスライスを表す型を作成しようとしていますが、そのためのメソッドを定義しています。例えば単純化:それは、このような別のファイルに呼び出されたcol.ToStrings未定義(型の列にはフィールドまたはメソッドのToStringはありません)

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 
} 

:私はエクスポートされた「列」タイプにメソッドToStrings()を呼び出すしようとすると、

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

type Columns c.Columns 

func ToString(col Columns) string { 

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

は、しかし、私はこのエラーを取得します:

columns.ToStrings undefined (type Columns has no field or method ToStrings)

コンパイラがメソッドToStrings()を見つけることができないようです。これを回避する方法はありますか?なぜ "Columns"型に定義されたエクスポートされたメソッドがコンパイラで見つからないのですか?

+0

メソッドを持たない新しい 'Columns'型を作成しました。元のメソッドを使いたい場合は、なぜ新しいタイプを作成しましたか? – JimB

+0

私はちょうどそれがより読みやすいと思った..私は古いタイプから新しいタイプを作るときにあなたが言っていることから集めます。 –

+0

ありがとうございました。回答を受け入れると病気になります。 –

答えて

0

type Columns c.Columnsは、新しいメソッドセットを使用してまったく新しいタイプを作成します。これを行う唯一の理由は、既存の型のメソッドを特に削除することです。

関連する問題