タグ

Golangに関するfm315のブックマーク (40)

  • Go で実 DB を使ったテストをしてみた - Repro Tech Blog

    はじめに こんにちは。Repro で新規事業の開発をしている冨永です。 我々のチームでは主に、ユーザーのイベント集計を定期的にバッチ処理するフローで Go を採用しています。 GoRDB など外部依存のあるコンポーネントを扱うテストをする際 interface などで抽象化しモックすることが多かったのですが、実際にその部分の挙動が確かめられないという不安がありました。 そこで今回は testfixtures というライブラリを使って実際に DB アクセスするテストを書いてみたのでその紹介です。 きっかけ まずはチーム内でテストに関する共通認識を作るためワークショップを実施しました。 各々の『知りたいこと』『教えたいこと』『議論したいこと』を話し合った結果、以下のような話題が上がりました。 今回は特に『外部依存のあるコンポーネントでテストが書き辛い』というトピックが盛り上がり、その中で

    Go で実 DB を使ったテストをしてみた - Repro Tech Blog
  • Goのプロジェクト構成の基本

    Goプロジェクトをどの様なファイル構成で配置すれば良いか読み物が少ないという指摘を見たのでまとめてみようと思う。 GOPATHについて Go1.16がリリースされたことでGo-Moduleによるプロジェクト構成が標準で推奨されることになりました。(Go1.11までさかのぼってGo-Moduleは使える様になってます) Go-Moduleモードでは「GOPATH配下にプロジェクトを置かなければならない」という制約からは解放されています。なので、実質GOPATHはどこを指していても構わないし設定されていなくても「ユーザーホーム/go」というデフォルトの場所が決まっているので開発できます。 おすすめの環境変数設定は以下の2つだけ。 「GOPATH=~/.go」(WindowsGOPATH=%USERPROFILE%\.go) 「PATH=$GOPATH/bin:$PATH」(Windows

    Goのプロジェクト構成の基本
    fm315
    fm315 2024/01/28
  • Goでの Mysql接続から構造体へのデータ割り当てまで - Qiita

    package main import ( "database/sql" //ここでパッケージをimport "fmt" "log" _ "github.com/go-sql-driver/mysql" //コード内で直接参照するわけではないが、依存関係のあるパッケージには最初にアンダースコア_をつける ) //引っ張ってきたデータを割り当てるための構造体を用意 type Person struct { ID int Name string } func main() { //mysqlへ接続。ドライバ名(mysql)と、ユーザー名・データソース(ここではgosample)を指定。 db, err := sql.Open("mysql", "root@/gosample") log.Println("Connected to mysql.") //接続でエラーが発生した場合の処理 if e

    Goでの Mysql接続から構造体へのデータ割り当てまで - Qiita
  • Go言語で最速のJSONデコーダーを作った話

    はじめに こんにちは。Sugawara Yuutaです。今回は高校の休み時間に考え、空いた時間で作ったJSONデコーダーについて紹介したいと思います。 知ってる限りでは、汎用型受け入れ型をとっているデコーダー(つまり、標準パッケージと同じスタイルという意味です)の中では最速です。 モチベーション Go言語で開発を始めて、(Go言語のコミュニティーのスタイルがJavaScriptなどと比べるとなんでも標準ライブラリでやってしまうようなのにも関わらず)サードパーティー製のJSONデコーダーが多く作られていることに驚きました。 しかし、大規模なものから小規模なものまで試してみて、それぞれが必ずしも共通しているとは限らない、たくさんの問題を持っていることに気づきました。それについては下のセクションで詳しく取り上げます。 今までのJSONデコーダーが持つ問題 具体的なライブラリの名前は出さないでおき

    Go言語で最速のJSONデコーダーを作った話
  • Goで社内ツールを作るならこんなふうに

    バックグラウンド 最近企業でにわかにGoの採用が増えているようですね。この流れを受けて実際にうちでも採用してみようと考えている方も多いかもしれません。しかし、Goに限った話ではないのですが、いきなり大きなプロジェクトに未経験の技術を投入するのはリスクが伴います。ですから最初は技術検証とGo教育を兼ねて、小さな社内ツールなどから導入するのがよいでしょう。幸い、Goは非常に習得が容易な言語ですから、既に他言語の経験があるプログラマーがじゅうぶんに開発できるようになるまでには、数日と掛からないことがほとんどです。 この記事は、そんな小さなツールの導入フェーズにあたって、自らの経験から少し役に立つかもしれない情報をシェアします。 リポジトリの構成 自らの経験上、初めてGoを触れるときによく出る質問の一つは「リポジトリ構成はどうすればいいのか?」です。 結論から申し上げると、 テンプレもルールもな

    Goで社内ツールを作るならこんなふうに
    fm315
    fm315 2022/04/24
  • Go言語らしくGoコードを実装するための手法と思想 - かねしんショップ - BOOTH

    書は、実践的なGo言語の開発方法や設計思想を解説したです。対象読者は、Go言語でツールやライブラリの開発経験はあるが、「Go言語らしく実装するにはどのように記述したらいいんだろう」と悩んでいる初級者や中級者の方、Go言語のノウハウが貯まっていないチームを対象としています。 日では、Go言語のはあまり多く出版されておらず、また、「Go言語らしさ」という言葉を考えすぎて悩んでいる人も多いと思います。「Go言語らしさ」を意識している人はGo言語の公式の情報や設計思想から知識を得ていますが、世の中に拡散されている記事では、それらと紐づされてGoのコードを解説しているものは少ないです。Go言語で開発をしている方に「Go言語らしさ」を意識して開発をしてもらうためにはGo言語の設計思想や背景を深く理解することが重要です。書では、この「Go言語らしさ」について深く吟味してGoのコードを解説をして

    Go言語らしくGoコードを実装するための手法と思想 - かねしんショップ - BOOTH
    fm315
    fm315 2020/07/05
  • WindowsにGo言語をインストールする方法まとめ - Qiita

    WindowsGo言語環境を整える方法は主に3つあります。 Chocolatey でインストールする (オススメ) MSI形式インストーラーを使用してインストールする WSL(Windows Subsystem for Linux) に対して、Linuxのインストール手順を実施する 開発を手元のWindowsパソコンで継続的に行っていく場合、パッケージマネージャのChocolateyは非常に便利なので、Chocolateyでインストールする手順を強くオススメします。 Chocolatey でインストールする この手順を進めると、 GOROOT = C:\tools\go GOPATH = %USERPROFILE%\go の構成でGo言語がインストールされます。 まず管理者権限でコマンドプロンプトを起動する 以下の手順で操作します Winキーを押す cmd とタイプする 最も一致する検索

    WindowsにGo言語をインストールする方法まとめ - Qiita
  • Go Conference 2019 Autumn - 資料一覧 - connpass

    c-bata Goptuna Distributed Bayesian Optimization Framework at Go Conference 2019 Autumn

    Go Conference 2019 Autumn - 資料一覧 - connpass
  • Gogs: A painless self-hosted Git service

    Easy to install Simply run the binary for your platform. Or ship Gogs with Docker or Vagrant, or get it packaged. Cross-platform Gogs runs anywhere Go can compile for: Windows, Mac, Linux, ARM, etc. Lightweight Gogs has low minimal requirements and can run on an inexpensive Raspberry Pi. Some users even run Gogs instances on their NAS devices.

  • プログラミング言語 Go ドキュメント — プログラミング言語 Go ドキュメント v0.1 documentation

    翻訳プロジェクトについて¶ この翻訳は Sphinx を使って以下のサイトで共同で行っています。翻訳に参加ご希望の方は、 yoshiki at shibu.jp までご連絡ください。 http://bitbucket.org/shibu/golang-docjp/ 翻訳ルール¶ まずはBitbucketのアカウントを作ってご連絡ください。書き込み権限を設定します。 翻訳したいものがある方は上記のBitbucketのサイト上でチケットを発行してください。Issueタブです。大項目単位です。 翻訳は読みやすさを考えて「です・ます」調で統一します。 Sphinxディレクティブを使った相互リンクは暇なときに設定します。もしくは書き込み権限のある方は設定してもらっても構いません。 Mercurialでcloneして翻訳してからcommit、pushしてください。commit前にpull&update

    fm315
    fm315 2019/09/20
  • 負荷試験のためのノウハウと Webフレームワークの負荷試験 (Python,Node,Go,PHP) - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? この記事はRetty Advent Calendar 2017 における 22日目の記事です。 昨日は @saku さんの swiftで丸画像をパフォーマンス高く表示する方法 でした。 はじめに 趣味のBot開発から気づけばWebフレームワークの負荷試験を行なっていました。 Software Engineerの@tkngueです。普段業務としては、Data Engineer/Web Service開発/データ分析やってます 「速さは正義」 とは皆の共通の認識で、言うまでもないことだと思うのですが 記事では、速さってなんだろうって考えて

    負荷試験のためのノウハウと Webフレームワークの負荷試験 (Python,Node,Go,PHP) - Qiita
  • Go言語と並列処理(3)

    前々回は並行・並列の基Go言語の文法、前回はOSスレッドとの違いと、並列処理をサポートする標準ライブラリの紹介をしてきました。 今回は、並行・並列で処理を記述するためのパターンをいくつか紹介します。 さらに、Goによるプログラミングには直接関係しませんが、これまでの説明では登場しない並列処理のモデルとして、GPUのスレッディンングモデルを紹介します。 今回の記事の執筆にあたっては、GPUまわりの部分でエヌビディアジャパンの森野慎也さんにご協力いただきました。 感謝申し上げます。 Goにおける並行・並列処理のパターン集 Goにかぎらず、並列化を導入するとどれだけ効率が改善するかをあらわす数式として有名な、アムダールの法則というものがあります。 Pは並列化できる仕事の割合、Nは並列数です。 ある仕事のうち50%の部分が並列化可能だとすると、Nを無限大にしても(分母の右側の項がゼロになる)、

    Go言語と並列処理(3)
    fm315
    fm315 2017/05/24
  • 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言語をほぼ毎日書いている話 (序) - ゆううきメモ
    fm315
    fm315 2017/05/08
  • Go で書かれたマイクロサービスの分散トレーシング | Google Cloud 公式ブログ

    分散システムやマイクロサービスの開発に適しているとして、Go プログラミング言語が人気を集めています。しかし、適切なツールが揃っていなければ、Go で書かれたマイクロサービスのトラブルシューティングは非常に大変です。 Go の大ファンである私たち Google Cloud は先ごろ、分散トレーシング バックエンドの Stackdriver Trace に Go クライアント ライブラリを追加しました。これで、実行環境が Google Cloud PlatformGCP)か他のクラウドかに関係なく、あらゆる Go アプリケーションの難しいパフォーマンス問題を検出(そして解決)しやすくなります。 分散トレーシングを使う理由あるページのレイテンシ問題を解決しようとしていると仮定しましょう。そのシステムは多くの独立したサービスから作られており、そのページのデータは下流のさまざまなサービスによって

    Go で書かれたマイクロサービスの分散トレーシング | Google Cloud 公式ブログ
    fm315
    fm315 2017/05/02
  • GoのためのGo

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

    fm315
    fm315 2017/01/28
  • なぜGo言語 (golang) はよい言語なのか・Goでプログラムを書くべき理由 | yunabe.jp

    結論としてはGo言語には以下のようないくつかの長所があり、現実路線で非常にバランスがとれた言語だと思います。 これらの長所のために失われたメリットも当然いくつもありますが、一定程度以上の規模のプロジェクトで利用する言語の選択肢としては現存するプログラミング言語の中では一番か二番目によいのではないかと思います。 コンパイルが速い (vs. C++) GCとメモリ安全性 (vs. C++) 妥当で現実的なレベルの型安全性 (vs. Python/Ruby) 実行時パフォーマンスが良さ (vs. Python/Ruby) 現実問題、ある程度の規模と期間のプロジェクトになると型検証があるとリファクタリングなどがだいぶ楽になるのでありがたい。 型があるので自然と実行時パフォーマンスも良い 標準ライブラリが整備されている (vs. C++) むしろ標準ライブラリにjsonのparserすら存在しないC

    fm315
    fm315 2017/01/17
  • Grumpy: Go running Python!

    The latest news from Google on open source releases, major projects, events, and student outreach programs. Google runs millions of lines of Python code. The front-end server that drives youtube.com and YouTube’s APIs is primarily written in Python, and it serves millions of requests per second! YouTube’s front-end runs on CPython 2.7, so we’ve put a ton of work into improving the runtime and adap

    Grumpy: Go running Python!
    fm315
    fm315 2017/01/05
  • Big Sky :: コマンドラインアプリで OAuth2 認証を使う際に使えるテクニック

    OAuth2 でレスポンスタイプがコードもしくはトークンの場合、ブラウザで認証を行ってコードやトークンを自前サーバで受け取る事になる。モバイルアプリだと組み込みブラウザが前提になっておりリダイレクトの最終 URL からアクセスコードやトークンを得る。ただコマンドラインアプリの場合、認証の為に起動したブラウザの最終 URL を得る方法はない。また1コマンドラインアプリケーションの為にドメイン付きのコールバックサーバを用意するのも面倒だし、作ったサーバをユーザに信用して貰う必要がある。あとそもそも外部のサーバで受け取ったトークンをどうやってコマンドラインアプリに渡すかという問題がある。 そこで使うのがローカルサーバを立てる方法。認証後のコールバック先をコマンドラインアプリから起動したローカルサーバにし、そこにリダイレクトさせてアクセストークンを貰い保存する。 今日はこれが伝わり易い用に Mic

    Big Sky :: コマンドラインアプリで OAuth2 認証を使う際に使えるテクニック
  • Goで作るDBレプリケーションツール

    gopli - DB replication tool to synchronize data with multi environments written in Golang. ツールの名前はgopli (go replication)で、意図どおりの名前ですね。 これは何tomlで書いた、ssh/db接続用の設定ファイルを元に、特定の環境間でデータを同期させるツールです。今の所MySQLのみ対応で、postgresqlに対応しろと言われたものの、なかなか手が回っていない状況です。 使い方は簡単で、 まず以下のように、 sshでのサーバーへの接続と、MySQLへの接続設定をtomlで書きます。 [database] [database.local] host = "localhost" management_system = "mysql" name = "app_developmen