タグ

goに関するmackee_wのブックマーク (22)

  • tanukirpcというWebフレームワークを作っています - ぱいぱいにっき

    最近の盆栽ですけれど、tanukirpcというGoのWebフレームワークを書いています。ある程度やりたいことができはじめてきたので、どんなフレームワークかを紹介します。 github.com TL;DR Webアプリケーションでよくやるようなことを、最短手順で自然に書けるように設計したフレームワーク リクエストをパースして構造体にマッピングする リクエストの内容をバリデーションする レスポンスの構造体をエンコードしてレスポンスとして書き込む グローバルスコープもしくはリクエストスコープでの構造体のコントローラーへの依存性注入 DBコネクションやAPIクライアントの保持などに使う 現在の責務範囲はWebアプリケーションのコントローラーだが、Webアプリを作る時によくやるようなことはできるだけやれるようにしてく tanukiup 開発サーバー起動用コマンド。ファイル更新を監視してビルドおよびサ

    tanukirpcというWebフレームワークを作っています - ぱいぱいにっき
  • Goで複数の引数を取る関数やメソッドをどう書くのがいいのか - ぱいぱいにっき

    普段Go書いているときにそこまで気にしてなかったが、ふと気になったので色々パターンを挙げてみる。なおこの記事には「答え」が書かれてないので、みなさんの意見を聞かせてください。 複数の引数を取るパターン一覧 そのまま引数を羅列する 複数の引数をまとめたstructを取る Functional Options Pattern そのまま引数を羅列する 例えばHTTPリクエストを行うような関数があったとして、 func Request(ctx context.Context, method http.Method, _url string, query url.Values, formValues url.Values) error { // do something } というシグネチャが考えられる。 実際にnet/http.NewRequsetWithContext は func NewReq

    Goで複数の引数を取る関数やメソッドをどう書くのがいいのか - ぱいぱいにっき
    mackee_w
    mackee_w 2023/10/02
  • Go向けORM sqllaの紹介と JOINやUNIONを含んだクエリの扱い方

  • GoでDBを使ったアプリを書くときみんなどうしてる? Tonamelはどうしているか晒してみます - KAYAC Engineers' Blog

    こんにちは。ゲームコミュニティ事業部サーバサイドエンジニアの谷脇です。 この記事はTech KAYAC Advent Calendar 2022の2日目です。 私はTonamelというWebサービスを運営しています。Tonamelでは、GoPerlを用いてサーバサイドアプリケーションを構築しています。 この記事ではTonamelでのパッケージ構成や、DBを使う際に用いているライブラリについて紹介します。 そもそもTonamelって何 パッケージ構成やは、アプリケーションの特性や、実装の複雑さなども考慮するため、前提として作っているものを説明します。 tonamel.com Tonamelとはeスポーツを始めとした競技の大会を開催するときに用いるプラットフォームです。大会主催者と参加者双方が利用します。 Tonamelの機能説明 この図に挙げているように、『参加者管理』と『トーナメント表』

    GoでDBを使ったアプリを書くときみんなどうしてる? Tonamelはどうしているか晒してみます - KAYAC Engineers' Blog
    mackee_w
    mackee_w 2022/12/02
    実際に数年運用している例です。GoでWebアプリ作るときの校正の参考にしてもらえれば幸いです。 #golangjp
  • じわじわとPerlからGoに移行しようとしている俺達のマイクロサービシーズの紹介 / The migrating to microservices in Go from Monolith in Perl

    YAPC::Japan::Online 2022 Track B

    じわじわとPerlからGoに移行しようとしている俺達のマイクロサービシーズの紹介 / The migrating to microservices in Go from Monolith in Perl
  • テストのためだけに`interface`を書きたくないでござる — KaoriYa

    golangでテストのためだけにinterfaceを書くのが死ぬほど嫌だったので編み出した技を紹介します。 TL;DR テスト(=mock)のためだけにinterfaceは切りたくない 型エイリアスとビルドタグを組み合わせるとinterfaceがなくてもモックが作れる この手法に必要なモックを自動生成するプログラムを作った interfaceは当に必要なシーンで使うべき Background 現在モックを使った単体テストは一般的です。 Javaでの例を挙げると、モックしたいコンポーネントについて予めinterfaceを定義しておき、モックではそのインターフェースを実装するのが定石です。 しかしgolangのinterfaceはJavaなどのそれとは若干性質が異なるため、テスト=モックのためだけにinterfaceを書くのはオーバーワーク気味です。 そうテストのためだけにinterface

    mackee_w
    mackee_w 2020/01/21
  • GoのDBライブラリと俺たち、それからsqlla - KAYAC Engineers' Blog

    年末ですね。カヤックでは360度評価の時期でもあるので、みんな振り返りだとか内省などの言葉がいたるところで飛んでいます。この記事でも今年の出来事を振り返りしてみたいと思います。どうも、ソーシャルゲーム事業部ゲーム技研の谷脇です。 この記事はTech KAYAC Advent Calendar 2019 Migration Trackの20日目の記事です。19日目はAWS Lambda Node.js runtime の EoL に疲れたので Go にしていっている話でした。 この記事のあらまし あるWebサービスを作るプロジェクトORMを切り替えた 開発言語はGo言語 DBライブラリ/ORMgithub.com/xo/xoを使っていました ですが開発途中から、私が作成したライブラリであるgithub.com/mackee/go-sqllaに乗り換えました どっちもコード生成系だけれど、

    GoのDBライブラリと俺たち、それからsqlla - KAYAC Engineers' Blog
    mackee_w
    mackee_w 2019/12/20
    GoのORMに関する考察を書きました
  • GitHub - bradleyfalzon/ghinstallation: HTTP Round Tripper for GitHub Apps - Authenticate as an Installation Workflow

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    GitHub - bradleyfalzon/ghinstallation: HTTP Round Tripper for GitHub Apps - Authenticate as an Installation Workflow
    mackee_w
    mackee_w 2019/12/05
    go-githubをGitHub Appsで使うときの認証どうするか問題、これでだいたい解決できそう
  • kamakura.go #5 @鎌倉 (2019/06/22 14:30〜)

    夏バテに負けるな! 夏バテにはGoが最適!!! ご無沙汰しております。約1年ぶりにkamakura.goをやります 前回まではkamakuraとは名ばかりで、横浜で行っていましたが、今回やっと鎌倉開催です 会社の建物ができたので 夏前だし鎌倉はあじさいの時期で盛り上がっているかもしれませんが、そこは負けじとGoをやってまいる所存です 同じくやってまいる所存の各位はぜひご参加のほどおねがいします 会場は鎌倉駅周辺に所在していますが、よりよい鎌倉駅付近の会場が見つかった場合はそちらに変更する可能性があります kamakura.goって? 鎌倉及び湘南藤沢地域、もしくは東京周辺などから遠出してGoについて語りたいGo言語愛好家の集いです 前回は2018年5月に横浜で行いました kamakura.go #4 @ 横浜 定期的に開催していく所存です。海の家LTなども行いたいですね(希望) テーマ「平

    kamakura.go #5 @鎌倉 (2019/06/22 14:30〜)
    mackee_w
    mackee_w 2019/06/04
    登壇者来てくれ!!!よろしくな!!!
  • gowrtr - goコード生成支援ライブラリ - その手の平は尻もつかめるさ

    gowrtr (go writerと発音します) というgoのコード生成支援ライブラリ (ジェネレータ群) を書きました. github.com Synopsisに書いたように, package main import ( "fmt" "github.com/moznion/gowrtr/generator" ) func main() { generator := generator.NewRoot( generator.NewComment(" THIS CODE WAS AUTO GENERATED"), generator.NewPackage("main"), generator.NewNewline(), ).AddStatements( generator.NewFunc( nil, generator.NewFuncSignature("main"), ).AddState

    gowrtr - goコード生成支援ライブラリ - その手の平は尻もつかめるさ
    mackee_w
    mackee_w 2019/01/14
    gofmtとかgoimportsかますのはコード生成でよくやることなので組み込まれてるの便利
  • kuiperbeltでWebSocketから卒業してみてSocket.IOと共に歩んでみる - KAYAC engineers' blog

    ソーシャルゲーム事業部の谷脇、またの名をid:mackee_wです。みなさんいかがお過ごしですか。 私は現在、東京プリズンというゲームアプリのサーバサイドを担当しています。東京プリズンはリアルタイムのボードゲーム的な殴り合いゲームなのですが、当然リアルタイム通信技術が使われています。 東京プリズンではリアルタイム通信に拙作のkuiperbeltというサーバミドルウェアが使われています。このミドルウェアは主にWebSocketの接続を管理します。kuiperbeltを使うと普通のHTTPしかしゃべることが出来ない言語・フレームワークであってもスケールするWebSocketアプリケーションを構築することができます。 ……という話は今年のCEDEC 2018で行ったので、こちらのスライドを見てください。 speakerdeck.com さて、このkuiperbeltの発表から現在までに実装した機

    kuiperbeltでWebSocketから卒業してみてSocket.IOと共に歩んでみる - KAYAC engineers' blog
    mackee_w
    mackee_w 2018/12/18
    馬力でSocketIOプロトコルをパースする話を書いた
  • Go における FunctionalOptionPattern と MethodChaining について考える - pospomeのプログラミング日記

    きっかけ FunctionalOptionPattern MethodChaining MethodChaining の問題点 Error フィールドによる解決方法 Error フィールドによる解決方法の問題 1. 各メソッドでエラーが発生しないような印象を受ける 2. エラーチェックを忘れそう その1 3. エラーチェックを忘れそう その2 FunctionalOptionPattern による解決方法 MethodChaining としての解決方法 Error フィールドの問題点は当に問題なのか? どちらを使うべきなのか? まとめ きっかけこの記事を書くきっかけは以下のブログで、 MethodChaining の代わりに FunctionalOptionPattern を利用したという記事。 https://www.calhoun.io/using-functional-option

    Go における FunctionalOptionPattern と MethodChaining について考える - pospomeのプログラミング日記
    mackee_w
    mackee_w 2018/03/12
    MethodChainingに出来る出来ない処理もあるけど、MethodChainingだと一行にまとめられるのでSQLと対比しやすとか。 / 拙作のORM https://github.com/mackee/go-sqlla では.First()とかがerrorを返すのを採用してます
  • fluent-logger-golang の実戦的な使いかたまとめ - 酒日記 はてな支店

    OSS紹介アドベントカレンダー の14日目の記事です。 Fluentd の 公式 GoLogger である fluent-logger-golang はこのように使うのがよさそう、という使い方をまとめてみました。 元々社内で書いておいたドキュメントを編集したものです。 github.com 前提のユースケース Webアプリケーション(APIサーバ) を Go で書いていて、そこから何らかのログを Fluentd に送信したい。 config のお勧めオプション Timeout : Connect に対するタイムアウト。デフォルト3秒なのでそのままでよさそう WriteTimeout : 書き込みのタイムアウト。デフォルトだとずっと待ってしまうので 3 秒とか? BufferLimit : デフォルト 8MB これを超えると捨てられてしまう。送る流量によって調整が必要 MaxRetry

    fluent-logger-golang の実戦的な使いかたまとめ - 酒日記 はてな支店
    mackee_w
    mackee_w 2017/12/14
    ノウハウが詰まっている
  • kamakura.go #3 @横浜 (2018/01/20 14:00〜)

    イベント概要 kamakura.go として、湘南・鎌倉地域のGo言語ユーザーが集い、切磋琢磨しつつ交流するための活動をしています。 Go開発環境にGo!! 第3回目の、kamakura.go #3は会場を横浜に移して、4名の方々にGo開発環境を大公開していただく内容となります。 また、今期のISUCON優勝チームからはGoを使っていかにISUCONを攻略したか、という裏話もお話します。 皆様のご参加お待ちしております。(湘南・鎌倉だけでなく、どの地域からの参加も歓迎しています!) ディレクトリ構成 Go言語周りのワークフロー 便利go generateツール エディタやIDE ステージング環境 テスト などの話題を中心に進めていく予定です。 会場のアクセス BUKATSUDOへのアクセスは以下をご参照ください。 http://bukatsu-do.jp/access.html タイムテー

    kamakura.go #3 @横浜 (2018/01/20 14:00〜)
    mackee_w
    mackee_w 2017/12/13
    kamakuraなのに横浜???
  • schemalexの神機能 - ken39arg’s blog

    この記事はOSS紹介 Advent Calendar 2017 の 5日目の記事です。 schemalexとは schemalex/schemalex Generate the difference of two mysql schema と書いてある通り、2つのMySQLのスキーマの差分(ALTER)を表示するプロダクトで、@soh335が中心となって開発をしており、 僕も業務でも使っているのでたまにpatchを送っています。 perlだとSQL::Translator::Diffにあたり、 このschemalexはMySQLにしか対応していないのですが、Go製のプロダクトのためバイナリが提供されているため、コマンドラインツールとして簡単に使えるところがSQL::Translator::Diffより使いやすいと思って気に入っています。 紹介したいこと @lestrratによる#34 のP

    schemalexの神機能 - ken39arg’s blog
    mackee_w
    mackee_w 2017/12/05
    書いてもらった
  • GoのASTを使ってパッケージのメンテナンスを考える - YAMAGUCHI::weblog

    はじめに こんにちは、Go界の骨盤職人です。buildersconにmattnさんがいらしていたということで生mattnさんに謁見したかったのですが、諸事情でこの日程はどうしても都合がつかず、参加できなかったことが非常に残念でいまでも悔やんでいます。 さて、Goは安定して開発が進んでおり、いまは安定バージョンが1.8にもなろうというところです。セルフホスティングも1.5で達成し、GCの高速化も順調に進んでいる中、いまだにGoの問題として挙げられるものとして「パッケージバージョンの管理」があります。今日はその辺の話をしようと思います。 TL;DR go パッケージを使って、自分たちが書いたコードが依存してるパッケージを明らかにし、依存先パッケージの更新に追従していこう。 前置き 以下の話はGoをプロダクションで中規模〜大規模に利用している環境を想定しており、細かな閉じられたパッケージのみを開

    GoのASTを使ってパッケージのメンテナンスを考える - YAMAGUCHI::weblog
    mackee_w
    mackee_w 2016/12/16
    goのastパッケージは使ってみるだけで夢が広がって楽しいと思います
  • 世の中の困り事はだいたいGoのコード自動生成で解決する - builderscon tokyo 2016

    Abstract みなさんは自らの手を汚さずにコードを生成し、それをデプロイして自分の手柄として主張したことはありますでしょうか? 私はあります。 このトークでは見た目は融通がきかなさそうなプログラミング言語であるGoにおいて、コード自動生成という一見すると闇っぽい技術を使うといかに柔軟に事をすすめることが出来るのか、世界が開けるのか、頭がパンパカパーンになるのかを説きます。 いいですか、コード生成は闇ではありません、悪でもありません。現実的なそこにある手段なのです。 コード生成を用いると、 人が読める言語で人が読めない、かつ大量のAPIのハンドラーを生成する 型が全く違うRDBMSGoとをすんなりとつなげる 来リフレクションが必要な箇所でコードを生成して補完を利かす 静的型付け言語が動的型付言語に見える コード生成でなんでも出来る気がしてくる コードを書きたくなくなってくる むしろコ

    世の中の困り事はだいたいGoのコード自動生成で解決する - builderscon tokyo 2016
  • Push通知のためのProvider Server「Gunfish」 - KAYAC Engineers' Blog

    Lobiチームの吉村です。 今回はチャットサービスの品質を高める上で重要になってくる「Push通知」について、Lobiのアプローチのひとつである「Gunfish」を紹介します。 Push通知はユーザが「自分に返信が来た」「運営からお知らせが来た」などの情報をリアルタイムに知ることができる機能で、チャットをメインコンテンツとして展開しているLobiにおいて非常に重要な要素となっています。 Gunfishは「Push通知を漏れなくすべてのユーザへ届けたい」という想いを込めて開発したアプリケーションです。 LobiのPush通知と今までの実装 Lobiのアプリでは、ユーザに気づいて欲しいイベントが発生したとき、ユーザにPush通知が届きます。例えば、 自分のコメントにレスがついたとき 自分のコメントに「ぐー(※1)」をされたとき ユーザが所属するグループ内で「シャウト(※2)」がなされたとき 運

    Push通知のためのProvider Server「Gunfish」 - KAYAC Engineers' Blog
  • Yokohama\.(pm6?|go) #14 を開催します。 #yokohamapm - Yokohama Perl Mongers

  • Yokohama\.(pm6?|go) #14 (2016/03/18 19:00〜)

    Goの話も聞きたくなったのでGoも正規表現に加えました 第14回となるYokohama.pmですがGo言語の話も主催がしたくなったのでGo言語もタイトルに含めました。 正直Perl/Go以外でもプログラミングやtechな話題だったらなんでもいいです というわけで皆様発表or参加のほどよろしくおねがいします 会場 岩崎学園様のご協力のもと、情報科学専門学校の教室をお借りして開催します 今回は学生の方も参加していただくため、学生枠を設けています。学生の方はそちらから申込ください。 募集要項 発表/LTはPerlGo言語、その他プログラミング言語などに関わるもの、もしくは横浜っぽいものでお願いします 発表およびLTの抽選で漏れた場合でも優先的に参加できるように配慮しますので安心してご応募ください 発表は質問込みで20min、LTは5minで容赦なく切るタイプです。submitの際にこのイベント

    Yokohama\.(pm6?|go) #14 (2016/03/18 19:00〜)
    mackee_w
    mackee_w 2016/02/22
    Goの話も聞けると思うのでよろしくお願いします!