タグ

golangに関するkammのブックマーク (29)

  • MTC2018 カンファレンスLPの裏話 〜GraphQL編〜 - Mercari Engineering Blog

    こんにちは、メルペイのライブラリとか作るおじさんの @vvakame です。 インフラ編に続きGraphQLAPI)編です。 MTC2018のカンファレンスLPのGraphQLによるAPI実装について紹介していきます。 リポジトリをこちらで公開しているので気が向いたら見ていってください。 Playgroundもあって、しばらくは生きている状態のままだと思います。 GraphQLやっていき 筆者は最近GraphQL、特にGo言語用のライブラリであるgqlgenに入れ込んでいます。 そこで、APIの実装にGraphQLを使うことによりgqlgenの使い方を社内に示し、ついでクライアント側の人たちにGraphQLの良さを体感してもらおう!という思惑です。 MTCでもCSToolをgqlgenでやっていき!という話題がありましたし! …と思ったらアプリの人たちはFlutterを選び、Dartには

    MTC2018 カンファレンスLPの裏話 〜GraphQL編〜 - Mercari Engineering Blog
  • Gin+Gorm+GraphQL(gqlgen)でCRUDできるAPIをつくってみた | Ver.1.0 Blog

    元号ももう令和に代わり粛々とGoの勉強を続けているのですが、今回はGOGraphQLを使って CRUDできるAPIを作ってみました。 gin-gorm-gqlgen-sample そもそもGOに慣れていなかったり各種ライブラリの情報が少なかったりで結構時間かかりましたが、 なんとかそれらしきものができたのでリポジトリを共有しておきます。 前回の記事でも、最初にながれを説明して詰まったところを最後にまとめて終わりという形だったので 今回も同じ形でいければななんて思っています。 サンプルを作るにあたり色々と情報を漁ったのですがGormとgqlgenを組み合わせの情報が少なく苦労したので そこらへんの情報ものせていければ。 使用技術 今回GraphQLサーバ構築に使った大きな部分の技術をまとめると Docker Dep (パッケージ管理) Gin (Webフレームーク) Gorm (ORM)

    Gin+Gorm+GraphQL(gqlgen)でCRUDできるAPIをつくってみた | Ver.1.0 Blog
  • Docker, Gin, Gorm, DepでCRUDできるAPI作成 | Ver.1.0 Blog

    Goのパッケージ管理ツールです。単純にパッケージ管理が必要なのと、Dockerで環境を構築する時に"go get"で Dockerfileが荒らされるのが嫌だったので、アプリ内でしか使わないものはdepコマンドで管理するようにします。 早速つくっていく コンテナの準備 まずはDockerのイメージの作成からやっていきます。Dockerfileを晒すとこういう感じです。 最終的なリポジトリはこちらです。 https://github.com/version-1/gin-gorm-sample FROM golang:latest ENV ROOTDIR /app ENV WORKDIR /app/src/gin-sample ENV GOPATH $ROOTDIR ENV GOBIN $ROOTDIR/bin WORKDIR $WORKDIR VOLUME $ROOTDIR ADD . $R

    Docker, Gin, Gorm, DepでCRUDできるAPI作成 | Ver.1.0 Blog
  • コピペでできるGoでgRPCサーバ立ててRailsからアクセスする方法 - SMARTCAMP Engineer Blog

    最近社内でElixirをひっそり布教しようとしている、瀧川です。 弊社の一部プロダクトでは、gRPCGolangアプリケーションを呼び出す構成をとっています。 それを説明するためにハンズオンをしたので、その一連の流れをこちらにもつらつら書いていきます! 内容は、以下の画像みたいなのを作っていこうと思います。 必要なコードは記事中に載せるのでコピペで動くはずなので、ぜひ実際にやってみてください! そもそもgRPCって? 実践 事前にインストールしてください リポジトリを作成しましょう さっそくProtocol Buffersで通信を定義しましょう GolanggRPCサーバ作りましょう 定義からGolangのソースコードを生成 生成したGolangのインタフェースを実装したサーバを作成 動作確認 Railsを実装しましょう gRPC定義からRubyのソースコードを生成 呼び出すコードをC

    コピペでできるGoでgRPCサーバ立ててRailsからアクセスする方法 - SMARTCAMP Engineer Blog
  • jqのGo実装 gojq を作りました! ― スタックマシン型インタープリタによるイテレータセマンティクスの実装 - プログラムモグモグ

    jqはとても便利なコマンドです。 JSONを返すAPIを実装するときや、SaaSのAPIから特定の情報を抜き出してシェル変数に代入するときなど、web開発や運用には欠かせないツールとなっています。 しかし、私にとってjqのクエリを一発で書くのは容易ではなく、思い通りの出力が得られないことがよくありました。 難しいエラーメッセージに悩まされて、jqで書くのを諦めて別の言語で書き直すこともありました。 jqの十八番と思える場面で使いこなせないのは、なかなか悔しいものがあります。 ツールを使うのが難しいなら、同じものを作ってしまえばよいのです。 jqの全ての機能を実装する jqを言語としてきちんと書けるようになる jqを完全に理解する jqの全ての機能を自分で実装してしまえば、jqがどういうものか、クエリがどのように処理されるのか、詳しくなれるはずです。 jqを得意な言語と言えるようになって、ク

    jqのGo実装 gojq を作りました! ― スタックマシン型インタープリタによるイテレータセマンティクスの実装 - プログラムモグモグ
  • さようなら ImageMagick - Cybozu Inside Out | サイボウズエンジニアのブログ

    こんにちは、アプリケーション基盤チームの青木(@a_o_k_i_n_g)です。 一般的な Web アプリケーションがそうであるように、サイボウズのグループウェアにも画像をサムネイルで表示する機能があります。サイボウズでは日々数万件やそれ以上のサムネイルを生成しており、それらは全て ImageMagick によって生成されていました。 そこで得た知見はこちらの記事で公開されています。 blog.cybozu.io しかし現在、サイボウズから ImageMagick は消え去りました。その理由と、我々が取った代替手段について紹介します。 ImageMagick を外した理由 言うまでもなく ImageMagick は優秀なツールで、画像変換に関する何らかのサービスやツールを作る場合には採用の第一候補になることでしょう。あらゆる画像フォーマットに対応し、出力画像をきめ細かに制御できる膨大なオプシ

    さようなら ImageMagick - Cybozu Inside Out | サイボウズエンジニアのブログ
  • オブジェクト指向言語としてGolangをやろうとするとハマること - Qiita

    埋め込み(embedded)に要注意というお話です。あるいは、GolangC++のようなゼロオーバーヘッドを目指していると考えれば腑に落ちるよね、的な。 Goはオブジェクト指向言語っぽく使うことができます。次のような機能を提供しています。 interfaceを使ったコーディング 埋め込み(embedded)を使った実装継承 インタフェースは次のような感じです。 // ポニーは歩ける type Pony interface { Walk() } // アースポニーも歩けるので、Ponyインタフェースに渡せる type EarthPony struct { } func (ep *EarthPony) Walk() { fmt.Println("歩くよ") } インタフェースはメソッド宣言しかかけません。実装は書けません。でも、定義されたメソッドを持てば、それはすべて「これの仲間だ」という感

    オブジェクト指向言語としてGolangをやろうとするとハマること - Qiita
    kamm
    kamm 2018/03/15
  • なぜ私達は Python から Go に移行したのか - Frasco

    新しい言語に移行するのは常に大きな決断です。その言語をよく知る人がチームメンバーに1人しかいない時などは特にそうです。今年の初め、我々は Stream の主要言語を Python から Go に切り替えました。この記事では、なぜ私達が Python から Go に移行しようと決断したのか、その理由を説明します。 Go を使う理由 理由1 - パフォーマンス Go は速いです! Go は極端に速い。そのパフォーマンスは Java もしくは C++ に匹敵します。私達のユースケースでは、GoPython より30倍速いです。GoJava を比較したベンチマークはこちらです。 理由2 - 言語パフォーマンスの問題 多くのアプリケーションにとって、プログラミング言語は、単にアプリとデータベースを繋ぐものにすぎません。言語そのもののパフォーマンスは通常あまり重要ではありません。 しかしな

    なぜ私達は Python から Go に移行したのか - Frasco
    kamm
    kamm 2017/10/26
  • golang の並列処理を Ruby と比較しながら学ぶ

    一ヶ月ほど前に社内のインフラ共有会でタイトルの話をしました。記録の ために記事を書いておきます。 Gist に置いてある ので、コードは git clone で取得可能です。 $ git clone https://gist.github.com/c0a4234a5264c89655c40adcf7c27cb2.git Ruby# 例えば Ruby で 30 個の処理をするコードがあったとします。こんな素朴 なコードです。それぞれ 3 秒かかる処理が 30 あるので、とても遅いです。 Thread を使って 5 並列にしました。明らかに速くなりました。 ついでにそれぞれの結果(というほどのものではありませんが)を results に代入し、最後にまとめて表示しました。 results は共有リソースになるので、Thread::Mutex#synchronize でロッ クをかけて安全に書き

  • ミリシタを支える GAE/Go

    2017-09-28 thu. 第 1 回 Google Cloud INSIDE Games & Apps 株式会社バンダイナムコスタジオ エンジニア 保科 一成 氏の登壇スライドです。

    ミリシタを支える GAE/Go
  • 物理サーバを選定する際のポイント – Eureka Engineering – Medium

    エンジニアとしてのものづくりの楽しみ方とモバイルエンジニアとしての開発の面白さ」を論じる。スキル向上に悩めるモバイルエンジニアへの参考として価値を期待し、モバイルアプリ開発の奥深さに考えを巡らせることで強い動機を持ち、次の挑戦が見えてくる。

    物理サーバを選定する際のポイント – Eureka Engineering – Medium
    kamm
    kamm 2017/07/28
  • GolangでSlack Interactive Messageを使ったBotを書く - Mercari Engineering Blog

    SREの@deeeet です。 MercariではSlack Botを使い様々な業務の自動化を行っています。例えばメインのAPIのReleaseはBotによる自動化がされており、JPとUSとUKの3拠点で1日に10回以上のReleaseをSlack上で実現しています(これ以外にも多くの事例があります)。 これまでのSlack Botは基的には文字ベースでのやり取りが普通でした(グラフなどの画像を返答として利用することはあります)が、SlackはよりInteractiveなやりとりを実現できるInteractive Messageという仕組みも提供しています。これによりButtonによる決定やMenuによる選択といったアクションをユーザにとらせることができるようになります。 Buttonの仕組み自体は古くから提供されていましたが他のTeamへの配布が前提でありOAuthの仕組みを準備する必

    GolangでSlack Interactive Messageを使ったBotを書く - Mercari Engineering Blog
  • Go言語をほぼ毎日書いている話 (序) - ゆううきメモ

    はてなの京都オフィスで開催された そうだ Go、京都。 - connpass にて、「Go言語をほぼ毎日書いている話(序)」というふわっとした話をしました。いわゆる Write Code Every Dayという活動ですね。 タイトルに(序)と付けているのは、書き始めてまだ5ヶ月程度だからです。 ちなみにこのGWでは、Rustを毎日書いていて、すでにタイトル詐欺感がありますね。 スライド スライドを以下に貼っておきます。 speakerdeck.com 同僚の id:niwatako さんの超速記により、ツイートはるだけで内容紹介できて贅沢。 去年からめっちゃGithubに草を生やしている話 #golangkyoto pic.twitter.com/xInr7G9BHT— にわタコ (@niwatako) 2017年4月29日 オペレーションよりソフトウェアや文章を書く方が実は好き ソフト

    Go言語をほぼ毎日書いている話 (序) - ゆううきメモ
    kamm
    kamm 2017/05/08
  • Go言語と並列処理

    Go言語の特徴として挙げられる機能の1つに、「並列処理を書くのが簡単」というものがあります。 そこで今回は、Goにおける並列処理の機能を紹介してから、そもそも現代のコンピューターでどのようにして並列処理が実現されているのかをとりあげます。 複数の仕事を同時に行うとは? 複数の仕事を行うことを表す言葉には並行と並列の2つがありますが、これらには次のような区別があります。 並行処理(Concurrent) 並行(Concurrent): CPU数・コア数の限界を超えて複数の仕事を同時に行うこと ほんの少し前まで、コンピューターに搭載されているCPUはコア数が1つしかないものが普通でした。 そのような、今ではもう絶滅危惧種になりつつあるシングルコアのコンピューターであっても、インターネットを見ながらWordとExcelを立ち上げてレポートを書けます。 この場合に大事になるのが並行(Concurr

    Go言語と並列処理
    kamm
    kamm 2017/04/29
  • 複数のデータベースをまとめてSELECTできるツール「mdq」を公開しました - KAYAC engineers' blog

    こんにちは。 2016新卒でLobiのサーバーサイドエンジニアをやっているmorikuniです。 今回は、mdqというGo製のツールを作ったので、その紹介をします。 mdqは複数のデータベースに並列にクエリを投げて、結果をJSONで出力してくれるというものです。 github.com mdqに近いコンセプトのツールとして、弊社の荒賀(@ken39arg)が作ったshard_promptがあります(#6「Shardingマジ怖い」tech.kayac.com Advent Calendar 2012)。 こちらはSQLを解析し、複数データベースにまたがる集約関数を一部サポートしていますが、MySQL専用かつ直列にクエリを投げるというものでした。 mdqでは複数データベースにまたがる集約関数はサポートしませんが、PostgreSQLなどMySQL以外のデータベースへのクエリや、並列処理による速

    複数のデータベースをまとめてSELECTできるツール「mdq」を公開しました - KAYAC engineers' blog
  • Goのインメモリキャッシュ用ライブラリ「go-cache」のご紹介 - timakin.log

    github.com 利用した動機 Perlで言うCache::Memory::Simpleのように、 メモリキャッシュを取り扱うためのライブラリを探してたら、 速攻見つかったので利用してみた。 ユースケース 今GithubAPIを利用したCLIツールを作っている。 その際にユーザーのリポジトリ情報とか取ってくるんだけど、 それを一度ならず繰り返し叩きに行く。 for分回している中で関数を呼んで、その中でAPI叩きに行く実装が入ってたら死ぬ。 なので結果を都度キャッシュしておけるようにgo-cacheを利用した。 内部実装 中身、非常に簡単で、Set用のキーをそのままcacheが内部で持ってるmapのキーとして使ってる。 この中にはunnamed typeなobjectと、有効期限を表すintを持った構造体が入ってる。 どこかに共通のキャッシュインスタンスみたいなのを持っておけば、有効期限

    Goのインメモリキャッシュ用ライブラリ「go-cache」のご紹介 - timakin.log
  • 分散環境でユニークなidを発番するGo製プロダクト「katsubushi」のご紹介 - KAYAC engineers' blog

    Lobiチームの長田です。 今回はkatsubushiというアプリケーションを紹介します。 https://github.com/kayac/go-katsubushi katsubushiはid発番を行うアプリケーションです。 水平分割されたデータベースに対してユニークなidを発番するために作られました。 なお、記事中の「データベース」はMySQLを指します。 katsubushiの特徴 Snowflakeと同様のアルゴリズムでid発番 SnowflakeはTwitter社がかつて公開していたid発番アプリケーションです。 https://github.com/twitter/snowflake/tree/master 既にメンテナンスされておらず、masterブランチにはその旨が書かれたREADMEしか残されていません。 タグが切られているので、ソースコード等はそちらで確認できます。

    分散環境でユニークなidを発番するGo製プロダクト「katsubushi」のご紹介 - KAYAC engineers' blog
  • Big Sky :: golang の sort インタフェース難しい問題が解決した

    golang では配列をソートしたい場合に癖があり、Int や Float64、String といった固定の型であれば sort パッケージが提供する関数でソートが可能でしたが、独自の型や Int64 等といった sort パッケージが用意していない型の配列をソートするには Sorter というインタフェースを備えた型で扱うしかありませんでした。 package main import ( "fmt" "sort" ) type Food struct { Name  string Price int } type Foods []Food func (f Foods) Len() int { return len(f) } func (f Foods) Less(i, j int) bool { return f[i].Price < f[j].Price } func (f Foods

    Big Sky :: golang の sort インタフェース難しい問題が解決した
    kamm
    kamm 2016/10/04
  • Go 言語で wc を実装してみた - takatoshiono's blog

    Go 言語で wc を実装してみた GitHub - takatoshiono/go-wc: Go implementation of wc command for practice なぜか A Tour of Go をやり終えた時「全然うまく書けない」というのが感想だった。もっと Go 言語のコードを読み書きする必要がある。 そして読むだけだとやる気が続かないから何か書きたい。何を作ろうか? Go 言語なのでスタンドアローンで起動するバイナリ実行形式のファイルがよさそう。仕様が簡単で手頃なやつがいいな...と考えて wc にしたのだった。他にも以下が候補にあった。 ab smtp server beer コマンド(なんかうまそうなビールを表示する) wc コマンド find コマンド (コマンド系で攻めるなら GNU coreutils, findutils などを見るとよさそうか...

    Go 言語で wc を実装してみた - takatoshiono's blog
    kamm
    kamm 2016/09/23
  • Goで覗くシステムプログラミングの世界

    プログラミングの勉強にあたってよく言われるのは、「流行に左右されるような技術の尻を追いかけるよりも、土台となる技術を身につけることが大切」ということです。 例えば、ウェブブラウザで動くJavaScriptを書くときは、流行しているライブラリの書き方を暗記するよりも、 ブラウザがどのようにCSSHTMLを解釈してスクリーンに文字や絵を描き出していく(レンダリングしていく)のかを理解することが大切です。 さもないと、ライブラリの流行が変わるだけで勉強したスキルが失われてしまいかねません。 データベースでも同じことがいえます。SQLの文法を学ぶことよりも、データベースがどのようにスケジューリングを行い、 どのようにデータを探索していくのかを学ぶほうが、パフォーマンス・チューニングのコツなどもひらめきやすくなるでしょう 1 。 「土台となる技術を身につける」を、もう少しちゃんと言い換えれば、「今

    Goで覗くシステムプログラミングの世界
    kamm
    kamm 2016/09/22