LoginSignup
2
0

More than 1 year has passed since last update.

Goの構造体のレシーバを利用したらcannot define new methods on non-local type stringというエラーがでる

Posted at

はじめに

構造体をなんとなくで利用していてエラーが発生したのでまとめます
同じエラーがおきるようなことは少ないかもですが、起きたときにルールを知らないと時間を使ってしまいそうでした

問題

testdata.go
package testdata

func (u *User) CreateUser (user User) {
  // ユーザー作成の処理
}

このようなUserのレシーバーをテストデータを作成する箇所で作成したのですが以下のようなエラーが発生しました

cannot define new methods on non-local type string

解決方法

レシーバーを利用するときは自パッケージ内で定義したtypeでなければならないというルールがありました
このコードでは関係ないところでレシーバーを使っていたのでエラーが発生しています

もしレシーバーを作成するならUserを定義していたmodelsのパッケージのどこかに書く必要があったようです

おわりに

まだまだ構造体やインターフェースに慣れず初心者を抜けられません
早く使いこなせるようになりたいです

参考

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0