37457


現在gocsvというライブラリを使っています。  
このライブラリのメソッドに

[code]

    gocsv.MarshalString(&client)
    
[/code]

というものがあります。  
このclientの型はstruct型のインスタンスです。(本当は配列ですが、問題を単純化するためにちょっと変更します)

このライブラリの前後処理をまとめるためにラップ関数を作りました。  
このような感じです。

[code]

    func convertCsvStringFromStruct(model interface{}) string {
       //共通処理
       gocsv.MarshalString(model)
       //共通処理
    }
    
    type Hoge struct{
    }
    
    type Fuga struct{
    }
    
    convertCsvStringFromStruct(Hoge{})
    convertCsvStringFromStruct(Fuga{})
    
[/code]

しかしこのライブラリを使って実行するとこのようなエラーがでます。

[code]

    cannot use interface {}, only struct supported
    
[/code]

このエラーが出る原因はライブラリで以下のように記述している部分があるためです

[code]

    func ensureInInnerType(outInnerType reflect.Type) error {
        switch outInnerType.Kind() {
        case reflect.Struct:
            return nil
        }
        return fmt.Errorf("cannot use " + outInnerType.String() + ", only struct supported")
    }
    
[/code]

この問題をどのように解決すれば良いでしょうか？  
このライブラリだけの問題ならまだいいのですが、他のライブラリでも似たような問題が発生して困っています。  
ご回答よろしくお願いします。


CC BY-SA 3.0
2017-08-18T10:10:48.253
37309
2017-08-24T06:59:03.157
20353
question
go
structが中身のinterfaceの型のインタスンスを、reflect.Structのチェックに通過させる方法


これ以上は回答がつかなさそうなので、swtich文を書く方法でFixさせていただきます。  
ご回答ありがとうございました。


CC BY-SA 3.0
2017-08-24T06:59:03.157
37457
2017-08-24T06:59:03.157
20353
37309
answer