はじめに
構造体をなんとなくで利用していてエラーが発生したのでまとめます
同じエラーがおきるようなことは少ないかもですが、起きたときにルールを知らないと時間を使ってしまいそうでした
問題
testdata.go
package testdata
func (u *User) CreateUser (user User) {
// ユーザー作成の処理
}
このようなUser
のレシーバーをテストデータを作成する箇所で作成したのですが以下のようなエラーが発生しました
cannot define new methods on non-local type string
解決方法
レシーバーを利用するときは自パッケージ内で定義したtype
でなければならないというルールがありました
このコードでは関係ないところでレシーバーを使っていたのでエラーが発生しています
もしレシーバーを作成するならUser
を定義していたmodels
のパッケージのどこかに書く必要があったようです
おわりに
まだまだ構造体やインターフェースに慣れず初心者を抜けられません
早く使いこなせるようになりたいです
参考