Goでクラスメソッドのようなものを作成するには?
現在Goを勉強しています。
その過程で他の言語でいうクラスメソッドを作りたいと考えました。
ここで質問なのですが、同じpackageに所属しているクラス(構造体?)同士では、同じ名前のクラスメソッドは作れないのでしょうか?
この質問に至るまでの過程を説明させていただきます。
まずこのクラスメソッドを作りたいと考えた場合、自分の認識ではGoの場合はパッケージにつける形にするしかないと思っています。
package models
type User struct {
Name string
Gold int
}
func Create() User {
~~~
}
そしてこれを呼び出すためには、
import models
models.Create()
こうなりますよね?
しかしこの書き方には問題があります。
なぜなら同じmodelsのパッケージで別のクラス(例えばItemとか)を追加した場合、そのクラスではCreateというメソッド名のクラスメソッドを作ることはできないからです。
私が考えるこの問題の解決方法は2種類あります。
1つはUserCreateみたいにクラス名をメソッドの前につけることです。
2つめはUserとItemなどをそれぞれ別のフォルダに分けて、別のパッケージにしてしまうことです。
ただどちらにも問題があると思っています。
1つめの方法は、UserCreate,ItemCreate,UserAll,ItemAll....というようにmodelsの下に大量でしかも似たようなメソッド名が並ぶことです。
2つめは、その考え方だと一つのクラスに一つのパッケージという事に結果的になることです。
models_user,models_item,....
同じフォルダに複数のパッケージはおけないためフォルダもふえます。
どのようにするのがこの場合良いのでしょうか?
ご回答いただけると助かります。