タグ

関連タグで絞り込む (150)

タグの絞り込みを解除

golangとgoに関するluccafortのブックマーク (40)

  • スレッドセーフなテスト用の時間を固定するライブラリを作った - tenntenn.dev

    はじめに time.Now関数を用いたコードをテストする場合、テスト対象のコードに次のような変更を加える必要があります。 引数に現在時刻を渡す パッケージ変数やフィールドなどに現在時刻を返す関数やインタフェースを設定する context.WithValue関数でコンテキストに現在時刻を設ける どの方法を用いてもプロジェクトの初期から考慮する必要があります。途中で変更するとなると修正が箇所を漏れなく探し出す必要があります。また、パッケージ変数に現在時刻を返す関数を設定した場合、テストを並列に実行することを諦める必要が出てくるでしょう。 このような課題を解決するために、testtimeというライブラリを作成しました。 テストの並列実行と時刻の固定 次のようにパッケージ変数を使ってtime.Now関数のラッパーの挙動を変えてテストする手法があります。 var nowFunc func() tim

    luccafort
    luccafort 2021/07/07
    途中までtesttime便利なのでは?と思って読んでいたのに-overlayフラグがでてからこれめちゃくちゃ便利なのでは?!?!!!!ってなった。
  • Go 言語で API サーバーの開発をはじめるためのライブラリ選定|maco

    こんにちは、まちいろの工藤です。 まちいろでは開発フレームワークに Rails を採用していますが、最近の新規案件では Go 言語を採用してみています。この記事では、Go で開発を始めるにあたって行ったライブラリ選定の中身を紹介したいと思います。 選定にあたっては、awesome-go や Qiita などの記事を参考にしました。 ModulesGo 1.11 から Go modules が導入されたとのことで、素直に Go modules を利用することにしました。特にハマることもなく利用ができています。 Web Application FrameworkgRPC + grpc-gateway or grpc-web ・https://github.com/grpc/grpc-go ・🙆proto でスキーマ駆動開発が可能 ・🙅‍♂️REST API を提供する場合は grpc-ga

    Go 言語で API サーバーの開発をはじめるためのライブラリ選定|maco
  • kyoto.goコミュニティーを作ったった - おうさまのみみはロバのみみ

    TL;DR 三行で説明すると Umeda.goが休日開催で厳しい Kyotoにもご当地Golangコミュニティーがほしい ないので作る という流れで「KyotoにもUmedagoみたいなコミュニティーほしー!」ってTwitterに投稿してから 1週間で爆速キックオフイベントを開催して無事クロージングできたという話をします。 当日のまとめ kyoto.goコミュニティーのページはこちら kyotogo.connpass.com 当日のイベントの告知ページはこちら kyotogo.connpass.com 活動内容ログはkyoto.rbのscrapbox活用がめちゃくちゃ気に入ってるのでそれを参考にした。 kyoto.goscrapboxページはこちら scrapbox.io 基的にはScrapboxにまとめてあるのでそちらのログを眺めるとなんかやっとるな!という雰囲気がつかめると思いま

    kyoto.goコミュニティーを作ったった - おうさまのみみはロバのみみ
    luccafort
    luccafort 2020/01/23
    初のコミュニティー運営者になっていた。前年サブオーガナイザーならやってもいいかなーとか言ってたらオーガナイザーになってるの最高に草
  • pvpool〜メルカリの商品閲覧数カウントアップの裏側〜 | メルカリエンジニアリング

    メルカリでは出品されている商品の閲覧数を「出品した商品」の一覧や「いいね!した商品」の一覧画面から見ることができます。以下は「いいね!した商品」の一覧画面です。(開発版アプリの画面になります) 赤い枠で囲まれている部分がそれぞれの商品の閲覧数になります。今回紹介する閲覧数のカウントアップのバックエンドはGoで開発されています。 データベース上の商品閲覧数のカウントアップ メルカリでは日々大量のリクエストを処理していますが、そういった中でもデータベースへのアクセスはINSERTやUPDATE等の書き込み処理よりもSELECTによる読み込み処理が圧倒的多数を占めます。(メルカリでは、データベースには主にMySQLを利用していますが、サービスやリージョンによってはGCPが提供しているCloud DatastoreやCloud Spannerを利用している箇所もあります) 商品が閲覧される時に実行

    pvpool〜メルカリの商品閲覧数カウントアップの裏側〜 | メルカリエンジニアリング
    luccafort
    luccafort 2018/02/27
    確かにPV数とかリアルタイムに上がっていくのが重要なサービスもあるけどメルカリでの使い方だと完全にリアルタイムである必要性がないというのはあるかもなー。閲覧数が急激に増えてる場合に効果高そう。
  • golangでAPIなど外部にアクセスするロジックのテストをする - $shibayu36->blog;

    golangで、例えばGithubAPIを叩くような、特定のAPIにアクセスするロジックを書いた時、何も考えずにテストを書くと、テストを実行する際にもそのまま外部のAPIにアクセスしてしまう。この場合、色んなパターンのテストを書きづらい、依存している外部サービスが落ちたらテストも一緒に落ちるなどの問題が起こる。 このような問題から、統合テストではなくユニットテストのときは手元のみで完結して、外部サービスに依存しない状況でテストを書きたくなることがある。そこで今回は外部にアクセスするロジックを、手元で完結させた状態でテストする方法を試したので、その方法について書いてみる。 テストしたいコード 例えば以下のようなコード。Githubの https://github.com/shibayu36/shibayu36 の最新のリリースタグを取得し、そのリリースタグ名を出力する。これはGithub

    golangでAPIなど外部にアクセスするロジックのテストをする - $shibayu36->blog;
    luccafort
    luccafort 2018/01/12
    外部APIに依存しすぎてるテストコードを改善しようとして心折れたことがあったのでそのときにこういう実装が出来れば良かったのか…という気づきを得ている。
  • Go言語で書いた Web アプリケーションの習作をサービス化して公開するところまでやってみた - えいのうにっき

    もともと数ヶ月前から、Go言語によるWebアプリケーション開発 を読みながら Go での Webアプリケーション開発の勉強をしていた。 Go言語によるWebアプリケーション開発 作者: Mat Ryer,鵜飼文敏,牧野聡出版社/メーカー: オライリージャパン発売日: 2016/01/22メディア: 大型この商品を含むブログ (3件) を見る 「実際に動くもの」を、「手を動かして作りながら学ぶ」のが僕は好きで、今回も同様、それを楽しんでやっていたのだけど、思いの外それっぽいものができあがってしまって。これをそのままローカルで動かすだけじゃおもしろくないな、もったいないな、と思ったので、それをサービス化して公開するところまでやってみた。 かんじんのアプリケーションは↓これ。Yukizuri と書いて「ゆきずり」と読む。 https://yukizuri.moshimo.worksyukizu

    Go言語で書いた Web アプリケーションの習作をサービス化して公開するところまでやってみた - えいのうにっき
    luccafort
    luccafort 2017/12/27
    作って公開までいってるの純粋にすごい。公開するのなにかと面倒というか考慮しないといけないことあって大変だったりするからなー。
  • mercari/datastore実戦投入

    DatastoreについてみなさまGCPをお使いになっているでしょうか。 GCPにはバックエンドのDBとしてCloudSQLというRDBと、NoSQLであるDatastoreというのがあります。 周囲の事例を聞く限りは、マスターデータなど変化が少なかったり、seedデータ的なものを用意しなければならないものをのぞいて、基的にDatastoreを利用している印象です。 また、GAEで開発する場合はinternalなAPIからDatastoreを利用できる一方、GKEなどからは、GCPの外部向けAPIを呼び出すことでデータを送受信します。 さて、自分はいつもGoAPIを書くのがいいよ!と触れ回ってるわけですが、GCP上で開発を進める際には前述の通りDBにはDatastoreを使っています。 このDatastoreですが、そのまま使うと自前でキーを発行する必要があったり、値をキャッシュしたり

    mercari/datastore実戦投入
    luccafort
    luccafort 2017/11/25
    導入に3〜4日かかったとあるけど逆に考えると手探り状態でその程度で済んだのだと考えられてすごーい!という雑な感想が出てくる。しかしGoのコードみてたら書きたくなってきた。
  • Go 2にむけて

    The Go Blogの日語訳を公開しています。修正は https://github.com/ymotongpoo/goblog-ja/ まで。 Go 2にむけて Toward Go 2 by Russ Cox はじめに (この文章は日行われた Gophercon 2017 での私の発表の書き起こしで、Goコミュニティ全体にGo 2のための議論や計画をする中での支援を求めるものです。 動画が公開されたらこちらにリンクする予定です。) Rob Pike、Robert Griesemer、そしてKen Thompsonが新しいプログラミング言語について数日議論を重ねた後、2007年9月25日にRobが「Go」という名前を提案しました。 翌年、Ian Lance Taylorと私がチームに参加し、5人で2つのコンパイラと標準ライブラリを開発し、その成果が2009年11月10日のオープンソース

    luccafort
    luccafort 2017/07/20
    重要でないと思ったら一度寝かせるというのはいい考えかもしれない。そこで大きな問題になれば直すべく動くし、そうでなければ無視して構わないレベルのものだと判断できるもんな。
  • Go言語LT大会で登壇しました #golang

    こんにちは。@tenntennです。 6月5日に開催されたGo言語LT大会で登壇してきましたので、そのレポートを書きたいと思います。 go-beginners.connpass.com Go言語LT大会とは Goビギナーズが主催するGoに関するLTを行う勉強会です。 Goの注目度が高まっていることもあって、今回は100名を越える応募がありました。 オススメの標準・準標準パッケージ 20選 私はゲスト講演ということでLTではなく、30分枠で登壇させて頂きました。 「オススメの標準・準標準パッケージ 20選」というタイトルで私が好きなパッケージを挙げていき、どういう点が便利でどう使うと良いかという点をお話しました。 www.slideshare.net ちなみに私が挙げたパッケージは以下のパッケージです。 fmt io io/ioutil strings bytes bufio encodin

    Go言語LT大会で登壇しました #golang
    luccafort
    luccafort 2017/06/07
    定期的にGo合宿してほしさある…。もくもく会みたいに土日の空いた時間でやればいいんじゃ!という結論に大体の場合なるんだけども。とりあえず今はGoよりもRoRの基礎部分を固めたい。少なくとも使えるレベルにならね
  • golang.tokyo#6で登壇しました #golang

    こんにちは。@tenntennです。 6月1日に開催されたgolang.tokyo#6にて登壇しました。 今回はそのレポートを書きたいと思います。 golangtokyo.connpass.com golang.tokyoとは? golang.tokyoは、プログラミング言語のGoを用いて製品開発を行っている企業が集まり、日々の製品開発で得たノウハウを共有する場として開催されている勉強会です。 Goの注目度が高まっているおかげもあって、毎回募集人数を大幅に越える応募人数となっています。 もし抽選でハズレてしまって、なかなか参加できないという方は、#4からセッションを録画していますので、golang.tokyoのYouTubeチャンネルをぜひご覧ください。 セッション一覧 今回のgolang.tokyoはセッション2つにライトニングトークが4つという構成で行われました。 ここでは簡単にそれら

    golang.tokyo#6で登壇しました #golang
    luccafort
    luccafort 2017/06/05
    CSViewer良さげ。この手のツールは各言語あるけどどの環境でも動かせるのでGoはこういうのが強みだよなあ。
  • Go言語感想文 - なるせにっき

    序 最近、敵情視察を兼ねた仕事ととしてGoでアプリケーションを書いていた。このアプリケーションがどんなものかはそのうちid:tagomorisさんがどこかで話すと思うけれど、このコンポーネントがOSS化される予定はいまのところないので、そこで得た知見をここにまとめておくことにする。 GoroutineとChannel さて、GoといえばGoroutineとChannelですね。 Goroutineはようするにスレッドなんですが、文法と実装の支援でより気軽に使えるのが他の言語との違いでしょうか。なので、Goroutineをどれだけほいほい使うべきかというコスト感覚を身につけることがとても大事な気がします。Rubyなどとは気持ちを切り替えていく必要があるでしょう。ぼくはまだ切り替えきれていません。 もう一つがChannelですね。これは端的にはメッセージキューです。 Goは前述の通り同時に動く

    Go言語感想文 - なるせにっき
    luccafort
    luccafort 2017/06/03
    いくつか「あれ?これ勘違いされてるんじゃね?」と思ってたらすでにmattnさんが訂正エントリ書いてた。http://mattn.kaoriya.net/software/lang/go/20170603001109.htm
  • Gopher Fest 2017に参加してきました #golang

    こんにちは。@tenntennです。 現地時間の5月15日にアメリカのサンフランシスコで行われたGopher Fest 2017に参加してきましたので、参加レポートを書きたいと思います。 www.meetup.com Gopher Festとは? Gopher Festとは、毎年Google I/Oに合わせて開催されるGoSFが主催するイベントです。 今年も現地時間の5月19日〜5月21日に開催されたGoogle I/O 2017に合わせて開催されました。 規模こそはそこまで大きくありませんが、開催地がサンフランシスコということもあって、GoogleGoチームのメンバーや著名なGoエンジニアが登壇するため、毎年楽しみなイベントです。 また、近年はGoogle I/OではGoに関する話題は扱われなくなっており、世界中のエンジニアが集まってGoに関する情報を交換できるのはGopherConと

    Gopher Fest 2017に参加してきました #golang
    luccafort
    luccafort 2017/06/01
    [Google I/O]これ読んで英語の重要性を改めて感じたので頑張ろう…
  • Go言語のFunctional Option Pattern - Qiita

    オプション パッケージを作る際、柔軟性を持たせるためにオプションを持たせたい時がしばしばあります。 しかしオプションは知っての通り設定しないことが少なくありません。 単にコンストラクタに並べるようでは無用な複雑さをはらむことになります。 JavaなどではOptional Parameterなどのように、デフォルト値が指定できる機能があります。 機能の厳選されたgo言語ではそのような機能はありませんが、 "Self Referential Functions Design"というテクニックがあり、 それについての記事がRob Pike氏の記事を筆頭にいくつか説明されています。 オプションと相性が非常に良いため、合わせて"Functional Option Pattern"とも呼ばれています。 Dave Cheney氏の記事を参考におおまかに説明したいと思います。 様々な解決策 あるServe

    Go言語のFunctional Option Pattern - Qiita
    luccafort
    luccafort 2017/04/02
    実装が冗長だなあとは思うけど確かにパッケージは使う側を想定して作るべきという主張もわかるしこういう実装方法がベターなのかなあ。(´ε`;)ウーン…
  • golang.tokyo#4でGo開発環境Goglandのライブデモを見てきた | メルカリエンジニアリング

    こんにちは、メルカリアッテのAPIチームでGoエンジニアをしている@sonatardです。 この記事は弊社ソウゾウの社員である@tenntennが運営しているgolang.tokyo #4のブログ枠として書いています。 golang.tokyo #4では、ゲストスピーカーとしてJetBrains社のSergey Ignatov氏にご登壇いただきGoglandをライブデモ形式で紹介して頂きました。 メルカリアッテではGoogle App Engine for Go (GAE/Go) を全面的に採用しており、サーバサイドエンジニアの中でもGoglandの利用者が増えています。そこでSergey Ignatov氏に紹介して頂いた機能とソウゾウ エンジニアたちが利用しているお気に入りの機能をまとめてご紹介したいと思います。 ソウゾウがGAE/Goを採用した経緯は@ttsuruokaのatte 開発

    golang.tokyo#4でGo開発環境Goglandのライブデモを見てきた | メルカリエンジニアリング
    luccafort
    luccafort 2017/03/23
    Goglandさっそく入れてみた。RubyMineとかPhpStormとかGoglandとかJetBrain製のツールに囲い込まれてる感があるな。
  • [翻訳] Why Go? - Qiita

    (この記事は Dave Cheney さんの Why Go? の翻訳です。) 数週間前、友人に「Goに注目に値するのはなんで?」と聞かれました。 彼は私がGoに情熱を注いでいることを知っていましたが、なぜ私が他の人もGoを気にするべきだと思っているのかを知りたいようでした。 この記事は、私がGoを重要なプログラミング言語だと考える、3つの大きな理由を紹介します。 メモリ安全 個人としては、私もあなたもC言語でメモリリークも危険なメモリの再利用もしないプログラムを書く事ができるでしょう。しかし、40年以上の経験から、集団としてのプログラマーはC言語で信頼できるプログラムを書けない事がはっきりしています。 コードの静的解析、 valgrind, tsan (訳注: たぶん ThreadSanitizer), -Werror といったツールは10年以上前から使えますが、それらのツールが広く認知さ

    [翻訳] Why Go? - Qiita
    luccafort
    luccafort 2017/03/21
    開発者の生産性以外はあまりピンと来ないのはぼくがもう長らくC言語に触れていないからなのかな。個人的にはメモリ安全よりもポータビリティー性のほうが…。
  • Travis CIでdepを使う - くりにっき

    zatsu_monitor でdep対応をしたのでその時のメモ depについて .travis.yml depをいれたメリット depについて depについては下記を参照 mattn.kaoriya.net .travis.yml 必要最低限だとこんな感じ language: go go: - 1.7 - tip before_install: - go get github.com/golang/dep/... install: - $GOPATH/bin/dep ensure script: - go test depのREADMEに書いてるのを.travis.ymlに書いただけです。 .travis.ymlの完全版はこちら https://github.com/sue445/zatsu_monitor/blob/c265f1b9301c056cbac5006952270812c915

    Travis CIでdepを使う - くりにっき
    luccafort
    luccafort 2017/01/31
    "依存するライブラリのバージョンを上げた時にそれがgitの履歴として残るのはいいですね。"なんでこのバージョンのライブラリをあげる必要があったのかが明示化されるのはいい。しかしgo getしても$PATH通らないのか…。
  • 物理サーバを選定する際のポイント – Eureka Engineering – Medium

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

    物理サーバを選定する際のポイント – Eureka Engineering – Medium
    luccafort
    luccafort 2017/01/28
    わかってればこんな初歩的な内容でハマらんだろ!とか思ったがそうかos.getenv("GOPATH") を 使ってるサードパーティー製ライブラリが引っかかる罠があるか。
  • GoのためのGo

    Go言語はシンプルさを念頭にデザインされた言語です。仕様は単純明瞭さのために小さく収められていますが、そのため表現力に欠けているとか、コードが冗長になるという印象を持つ人も多いでしょう。有名なところでは、ジェネリクスや例外といった機能が(今のところ)存在しないことが問題にされることが多いようです。 一般に、ソフトウェアエンジニアリングというものは書かれる言語だけに依るものではありません。視点を拡げてGoを取りまくツール群を含めて見てみると、go fmt や goimports といったツールが広く使われていること、また go generate コマンドの存在などを見ても、Goという言語には、人間のプログラミングを機械によってさまざまな面から補助しようという態度があります。

    luccafort
    luccafort 2017/01/28
    これは一読以上の価値があるやつだ!
  • Go Binary Hacks - go buildせずにビルドする #golang - Qiita

    はじめに Goではルールに従いソースコードを配置してgo buildを実行するだけで実行バイナリを作ることができます。 とても便利なのですが、一体裏で何が行われているのでしょうか? この記事ではgo buildの仕組み、簡単なシンボルテーブルの説明、Goに用意されているバイナリ操作コマンドを学ぶことができます。 実行バイナリの作成 実はGoでもC言語と同様に以下のフローで実行バイナリを生成しています。 1. ソースコードをコンパイルをしてオブジェクトファイルを作成 2. オブジェクトファイルをまとめてライブラリを作成 3. オブジェクトやライブラリをリンクして実行バイナリを作成 go buildではこれらの処理を複数コマンドにより実現しています。 コマンドの詳細はgo buildの-xオプションで確認することができます。 同一パッケージに1つのファイルしかない場合

    Go Binary Hacks - go buildせずにビルドする #golang - Qiita
    luccafort
    luccafort 2017/01/24
    go buildが普段なにを行っているのかの参考になる非常によい記事なのだけどもどういうモチベーションが生まれればこれを調べよう!という気になったのかが少しだけ気になる。なんかきっかけあったのかな。
  • Arukasを使って無料でGo製のslackbotを運用する - きょこみのーと

    はじめに SlackbotをHerokuで一日中動かすと課金が発生するので色々ハックが必要となったりするので、なんとかしたくArukasに出会いました。 今回は、自分が作ったgo製のslackbotを元につくったbotをgithubにpushしてWercker経由でdockerImageを作ってArukasへのDeployを行う方法を紹介します。 github.com 今回のコードとか設定をexampleとして公開してますので、よろしければ参考にしていただければと。 Arukasとは? いまのところ無料でDockerをホスティングできるサービスです。 arukas.io 一応CLIツールも公開されていて、結構便利です。 github.com ※注意点としては、CMDで起動したプロセス監視とかは無いので自分でとかgo-server-starterとかを入れてプロセス死んだときに再起動する仕組

    Arukasを使って無料でGo製のslackbotを運用する - きょこみのーと
    luccafort
    luccafort 2017/01/04
    お役立ちっぽい情報だこれ。ちょっと知識量が足らなくてわからんところあるのでexampleみながら勉強させてもらおう。