ActivityPub用のtwilogみたいなやつを作っている(notestockがあるのは知ってるよ!)

gotosocialからnotestockが使えなくて、少し調べてもわからなかった上にnotestockがソースコードを公開しておらず(してないよね?)調査を進めるのが困難そうだったので、自分で作ってみることにした。もとより自分のデータを自分で管理することは重要だと思っていたので、そういう意味もある。

https://github.com/chao7150/activitypublog

使用技術はGo+Echo+MySQL8.0。まあ正直手慣れたRemix+Prismaでやったほうが早いとは思うんだけど、たまには違うことをやったほうがいい。自分でアプリケーションをGoで書くのはこれが初めて。普段一番書いているTypeScriptに比べると、補間、エコシステム、ドキュメント、ビルドの速さが優れている。型システムは劣っている。module/packageが難しく、挙動もベストプラクティスもよくわかっていない。この辺を読んで参考にしている

また、具体的なGoの書き方の作法はGoToSocialを真似ている。

Goで良いなと思ったのは、timeだ。たとえば

// Go
time.Now().Add(5 * time.Minute)

は間違いなく

// JavaScript
new Date(Date.now() + 5 * 1000 * 60)

よりエレガントだ。

フォーマット文字列も好きだ。大抵は%vでどうにかなるという逃げ道を残しつつ、各データ型の中でも様々な表現を可能にしている。

if err...の洪水については、エラーメッセージを真面目に考える契機になる。すなわち、エラーはerrを通して呼び出し元に順に伝播するわけだが、その過程の各関数の中で徐々に情報を付け加えることができる

if err != nil {
    return c.String(http.StatusInternalServerError, fmt.Sprintf("error GET /: %v", err))
}

具体的に何が失敗したのかはerrの中身をそのまま表示しつつ、この階層では GET / という場所でエラーが起きたという情報を付け加えている。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です