golangに関するtakehirohattoriのブックマーク (694)

  • 楽ができるGolangのライブラリ達 - Qiita

    ライブラリ探すなら基awesome go見とけばいいけど、いろいろ楽するためという観点で、思い出した順に適当に追記していく。気が向いたらサンプルも書く gojson https://github.com/ChimeraCoder/gojson jsonのデータを渡すとそれに対応するstructを生成してくれる。JSON APIを利用するときに楽ができる。既存APIのリプレイスをGoでやるときとかも良い。 goquery https://github.com/PuerkitoBio/goquery JQueryっぽくhtmlをパースしたり検索したりして楽ができる。自前でhtmlのパースなんか書いてられない。 goreq https://github.com/franela/goreq net/httpパッケージで、httpリクエストを飛ばすのは結構面倒だったりいろんな書き方があったりしてヘ

    楽ができるGolangのライブラリ達 - Qiita
  • GAE GoとDatastoreでGraphQL APIを開発する - Qiita

    Google Cloud Platformのマネージドサービスを使ってGraphQL APIを開発してみました。GraphQLについては初心者でしたので、実装しながらGraphQLについて学んだことを記録します。 利用した技術 App Engine SE Go 1.11 Go 1.11が11月にβリリース 2nd genと呼ばれる次世代ランタイム Cloud Datastore スケーラビリティの高いNoSQLデータベース Stackdriver Stackdriver Trace for Goを使いたかったため使用 個人で使う分には無料でいけます。動作も速い!! GAEの2nd genではプラットフォームのことはあまり意識することなく普通にサーバーを実装すればよいです。 にもかかわらず、必要な時、必要な分だけ高速に起動するので最高です。 主なライブラリ 使用した主なライブラリは以下のとお

    GAE GoとDatastoreでGraphQL APIを開発する - Qiita
  • 好みのエディタに快適な開発環境を提供するLSP - Qiita

    みなさん、エディタは何を使われていますか? 私はEclipseもIntelliJもVisualStudioもviもAtomやVSCodeももろもろ使ってきましたが、毎日orgで色々記録を取ったりと、なんだかんだEmacsが好きです。とはいえ言語によっては他のエディタのほうが効率的なこともあるので、エディタを使い分けるということをしていました。しかし、LSPという平和的なプロトコルの登場によって、エディタ間格差が緩和されつつあるのです。 図1: Emacsのlsp-uiとlsp-goの利用例 LSPに出会ったきっかけは数年前のGoカンファレンス(略して合コン)でした。Sourcegraphの人の発表でサービスを知り、Emacs用の開発支援ツールのベータテストだったりを見ているうちにgo-langserverが公開されていました。 LSPは、発表されてからすでに数年が経過し、今では、C/C++

    好みのエディタに快適な開発環境を提供するLSP - Qiita
  • GitHub Actions で Go言語の lint と test を実行する | DevelopersIO

    GitHub Actions で Go言語の lint を test を実行を行うサンプルについてのブログです。 はじめに 黒澤です。皆さんは GitHub Actions のベータに当選しましたでしょうか。 私は11月の頭ぐらいに当選していたのですが、当時は private リポジトリ限定で使える仕様だったため使うのを諦めていた勢です。 ですが先日ついに public リポジトリにも解禁されていたので軽く使い方を書いていこうと思います。 Enabling Actions on Public Repositories | GitHub Developer Guide ベータ権の申し込みとかそんなの知らない!って人はこちらのページからエントリーできます。 GitHub Actions GitHub Actions とは 2018年10月の GitHub Universe というイベントで発表

    GitHub Actions で Go言語の lint と test を実行する | DevelopersIO
  • Go 1.11 Modules でパッケージ管理を行う - tchsskのブログ

    これは Go4 Advent Calendar 2018 の 22 日目の記事です。 今年の 8 月に Go 1.11 がリリースされました。このバージョンでは Modules と呼ばれる新しいコンセプトが導入されています。これはバージョニングとパッケージ配布の仕組みで、 GOPATH 配下以外でのプロジェクト管理を可能にするものです。 これは Go 1.11 の時点では実験的な機能として提供されていて、環境変数 GO111MODULE の設定やプロジェクトGOPATH 配下にあるかどうかに応じて有効化されるようになっています。このバージョンでフィードバックを取り込みながら Go 1.12 で正式な機能としてリリースされる予定ということです。今回は現時点での Go Modules を試してみたいと思います。 Go 1.11 Modules で依存解決を行う 私は Web API の作成

    Go 1.11 Modules でパッケージ管理を行う - tchsskのブログ
  • 高速コレクション操作ライブラリ「Koazee」 - Qiita

    この記事はGo2 Advent Calendar 2018の17日目の記事です。 コレクション操作ライブラリ Koazee 12月はじめのこと、go-nutsに「速いコレクション操作ライブラリを作ったぜ」という投稿がありました。 [go-nuts] Koazee vs Go-Linq vs Go-Funk 彼のベンチマークによると類似のライブラリに比べてかなり速いという結果が示されています。ここでは彼が作ったコレクション操作ライブラリ Koazee を紹介しつつ、高速化の一端に触れてみます。 github.com/wesovilabs/koazee Lazy like a koala, smart like a chimpanzee (原文ママ) Koazeeの特徴は イミュータブル ストリームスタイル 遅延ローディング ジェネリックス 速い! とのことでここでは「ジェネリックス」と「速い

    高速コレクション操作ライブラリ「Koazee」 - Qiita
  • Go言語の golang/go パッケージで初めての構文解析ハンズオン - Qiita

    この記事は、Go Advent Calendar 2018の5日目の記事です。 「Go言語でつくるインタプリタ」を読んで、プログラミング言語の「仕組み」に興味がでてきた。そして、Go言語だと構文解析が簡単に出来るとの噂が!ということで golang/go パッケージを触ってみると、Go言語で出来る事のイメージが更に広がった。せっかくなので自分のような初心者向けにハンズオン形式で紹介していきます。最終的にGo言語のソースコードから抽象構文木を所得して、そこから更に、抽象構文木を書き換えてGo言語のソースコードに変換するところまでやります。 とりあえず抽象構文木を手に入れてみる 抽象構文木 (abstract syntax tree、AST) とは言語の意味に関係ない情報を取り除き、意味に関係ある情報のみを取り出した(抽象した)木構造のデータ構造です。よってGo言語においてはスペース、括弧、改

    Go言語の golang/go パッケージで初めての構文解析ハンズオン - Qiita
  • Goにまつわるとっても真面目なBenchmarkクイズ!「goの正規表現(regexp)は速いのか?」編 - Qiita

    Goにまつわるとっても真面目なBenchmarkクイズ!「goの正規表現(regexp)は速いのか?」編Go正規表現ベンチマークパフォーマンス 今回はクソ真面目にクイズを書いていきます。 なぜ真面目を強調しているかといえば、昔書いた記事が不真面目だったからです。 陶しいくらい「いいね」するよう勧めてくるgoroutineクイズ それではクイズに行きましょう。 最初の3問は小手調べ、Goの基事項のおさらいです。 その後、第四問から正規表現の速さ比べに入ります。 実行環境 こんなの Distro: Ubuntu 18.04.1 Kernel: 4.15.0-42-generic CPU: Intel(R) Core(TM) i5-7600 CPU @ 3.50GHz Mem: 16GB Go: go version go1.11.3 linux/amd64

    Goにまつわるとっても真面目なBenchmarkクイズ!「goの正規表現(regexp)は速いのか?」編 - Qiita
  • How to Write Testable Code in Golang - コネヒト開発者ブログ

    はじめに 記事は コネヒト Advent Calendar 2018 の19日目のエントリーになります。 こんにちは!先日PHPカンファレンス(通称: ペチコン)でLT登壇させていただいた @itosho です。 ペチコンのことも書きたいのですが、ペチコンでもGoの話をしたので、今日はGoのテストを話をしたいと思います。具体的には、今年公開した gdp というCLIツールのテストを書く時に工夫したことを紹介します。 ちなみに、gdpがどういうツールなのかは以前 Go製のCLIツールを公開しましたという記事で説明しているので、もし興味がある方はこちらも読んでいただけると嬉しいです。 開発初期のコード gdpにはリモートリポジトリに指定したtagが存在確認を行う処理があるのですが、当初はこんな感じのメソッドを用意していました。*1 呼び出される側 func IsExistTagInRemot

    How to Write Testable Code in Golang - コネヒト開発者ブログ
  • GoのAPI開発現場におけるユニットテストTips - BASE開発チームブログ

    これは、「BASE Advent Calendar 2018」4日目の記事です。 devblog.thebase.in BASEでサーバーサイドエンジニアをやっている、東口(@hgsgtk)です。BASE BANKというBASEの子会社にて金融事業の立ち上げを行っています。 以前投稿した、Goを運用アプリケーションに導入する際のレイヤ構造模索の旅路 | Go Conference 2018 Autumn 発表レポートという記事の中で、レイヤ構造を成長させていくためのユニットテストについて言及させていただいていました。こちらのエントリーにて進めていたコードベースでは、全体で約85%程度のテストカバレッジとなっています。日は、そんなGoのユニットテストについての内容です。 ユニットテストの知見 現在、Goのユニットテストについての知見は数多く見られ、テーブル駆動テスト・サブテストなどといった

    GoのAPI開発現場におけるユニットテストTips - BASE開発チームブログ
  • golang.tokyo #20 忘年LT大会!! 参加メモ #golangtokyo

    Dive panic & type @takochuu https://speakerdeck.com/takochuu/dive-panic-and-type runtimepkgのの中のコードを見るとGoの実行モデルがわかる 例えばpanic()の中身とか 当日は下で開始ぎりぎりまで受付のお手伝いをしていたのでほとんど聞けず。 labelerrとsuberrを作った話 @nametake https://speakerdeck.com/nametake/created-labelerr-and-suberr pkg/errorsだけではドメイン固有のエラーを作るちょっと良くない感じになるのでerrorのラッパーを作った https://github.com/nametake/labelerr https://github.com/nametake/suberr Wrap、Addでerr

  • Golangのmapとsliceはどちらが速いのか - 逆さまにした

    GoのパフォーマンスTipsメモにインデックスアクセスについて、以下のように述べられている。 mapのインデックスアクセスはsliceの数十倍遅い。 100件以下の場合バイナリサーチでsliceから目的の値を探すほうが早い。 100要素超えくらいからmapのアクセス速度一定の恩恵が発揮される。 実際にベンチマークを取ってみる。 測定したいこと 要素数の増加に従って、sliceとmapでインデックスアクセス速度がどのように変わるか sliceから特定の要素を探すとき、mapと性能分岐点になる要素数はいくつか 条件 sliceは[]int型とする sliceの中身はsort済みとする(indexをそのまま要素の値とする) mapmap[int]int型とする 環境 macOS High Sierra version 10.13.4(17E202) MacBook Pro (Retina, 1

    Golangのmapとsliceはどちらが速いのか - 逆さまにした
  • `Wrap(err)` in our production #golang | Wantedly Engineer Blog

    Go(Un)Conferenceについて Goが好きな人たちで軽と飲み物をお供にGoの知見をゆるく発表していく会の第4回です。 第1回:4/17(火) Go(Un)Conference(Goあんこ)LT大会 1kg togetterのまとめ 第2回:5/25(金) Go(Un)Conference(Goあんこ)LT大会 2kg togetterのまとめ 第3回:7/26(木) Go(Un)Conference(Goあんこ)LT大会 3kg togetterのまとめ また誰かがGoと別の言語を比較してジェ 復習: なぜ `Wrap(err)` が必要なのか一言で言うと「エラー発生箇所のコンテキスト・情報(stacktrace, etc.)をちゃんと残すため」です. ここは実際の挙動を見るとわかりやすいので,コードで説明します.知ってる人は読み飛ばしてもらって大丈夫です. `Wrap(err

    `Wrap(err)` in our production #golang | Wantedly Engineer Blog
  • GitHub - pocke/get: get a repository

    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 - pocke/get: get a repository
  • Goで独自エラー型を定義する - Qiita

    Goでのエラー判別という記事で、Goのエラーの判別方法にはだいたい3種類あるという話をしました。 どの関数から返されたかで判別 定義済みの変数と比較して判別 独自エラー型を定義してキャストして判別 今回の記事では3の独自エラー型を定義する際のノウハウについて扱います。 ※ Go2アドベントカレンダーのGoのカスタムエラーとその自動生成についてという記事とかなり内容が被っている気がしますが、ネタかぶりはご容赦ください。 generrはすごく良いツールだと思います!この記事のコードを自動生成したい場合にご利用ください。 それではいくつかの実装例を紹介します。 例1: エラーコードを持たせる 例えばエラーコードを持たせたい場合を考えます。 この場合、エラーコード型にそのままerrorインターフェースを持たせてしまえばいいでしょう。 GoのエラーはインターフェースなのでErrorメソッドさえ持たせ

    Goで独自エラー型を定義する - Qiita
  • Goによる静的解析入門 - BASEプロダクトチームブログ

    この記事は「BASE Advent Calendar 2018」24日目の記事です。 devblog.thebase.in はじめに BASEでエンジニアとしてインターンをしている池田です。今日はクリスマスイブということで、以前から気になっていたグリューワイン(ドイツのクリスマスに欠かせないホットワイン)をクリスマスマーケットに飲みに来ています。 普段はBASE BANKというBASEの100%子会社にて金融事業の立ち上げを行っています。BASE BANKのプロダクトのAPIGoを使って書かれているのですが、BASEでのGoの使用はこのプロジェクトが初だったので、開発基盤整備の一貫で様々なlinterの導入を行いました。その際にlinterの内部がどうなっているかに興味を持ち、すごく簡単なlinterの仕組みを実際に作ってみたので、今回はその知見をお話しします。 Goと静的解析 Goには

    Goによる静的解析入門 - BASEプロダクトチームブログ
  • 多分間違えてるColaboratoryの使い方(Go入門) - Qiita

    はじめに goを勉強したいなと思ったのですが、環境構築するのが面倒で(ウソです。当は全然面倒ではありません)かつ、どこでも使える環境が欲しいと思っていました。 実は、普段から旧cloud9上で jupyter を利用していたりするのですが、たまに落ちたりして困ることがありました。 そこで、Colaboratoryならいつでもどこでも使えるじゃん?と思い立ちやってみました。 Colaboratoryとは Googleが作ったjupyterのクローン。googleアカウントさえあれば無料で利用できる。さらにGPUも無料!! Google Colaboratoryにブラウザでアクセスするだけです。 jupyterとは 主に機械学習用に利用されている。 セルにPythonのコマンドを入力しながら実行しながらできるので試行錯誤がしやすい。 なれちゃうと、これなしでは生きていけなくなります。 環境設

    多分間違えてるColaboratoryの使い方(Go入門) - Qiita
  • Goでxo/xo入門 - nがひとつ多い。

    はじめに この記事はGo Advent Calendar 2018の19日目の記事です。 結構今更ですが、僕は番環境で投入しているものの、あんまり知られてないようなので改めて書いてみます。 自動DBモデリングツールxo/xoの紹介 github.com ラーメンを美味しく料理するための香辛料ではなくてですね、 xo is a command-line tool to generate Go code based on a database schema or a custom query. 動いている任意のDBエンジンからテーブルを抽出して、Goの構造体とかをコードで生成するツールです。 みなさんはどうやってから構造体を生成してますか? どーのこーのして生成しているでしょうが、hoge_countがbigint型だから〜goだとintか〜あーUNSIGNEDだからuintか〜とか考えなが

    Goでxo/xo入門 - nがひとつ多い。
  • Goにおける静的解析のモジュール化について - Mercari Engineering Blog

    Mercari Advent Calendar 2018 の16日目はメルペイ エキスパートチームの@tenntenn お送りします。 この記事では、Goの静的解析の新しいムーブメントであるgolang.org/x/tools/go/analysisを使ったモジュール化について解説したいと思います。 「静的解析は関係ないや」と思って、タイトルを見てブラウザのタブを閉じようと思ったかもしれませんが、ほとんどのGopherには無関係ではないと思いますので、ぐっと我慢してしばらく間お付き合いください。 静的解析のモジュール化とは Goにはgo vetやgolintなど静的解析ツールが多数あります。 静的解析ツールを用いることで、プログラムを実行せずにバグになりうる箇所を検出することができます。 実際に、コードレビューを行う際にCIで静的解析ツールを実行している方も多いかと思います。 Goは標準で

    Goにおける静的解析のモジュール化について - Mercari Engineering Blog
  • モジュール化された静的解析の実装を追ってみよう #golang - Qiita

    はじめに この記事では、Goにおける静的解析のモジュール化についてという記事で調子に乗って書ききれなかった詳細な実装の解説を行います。 そのため、まずは「Goにおける静的解析のモジュール化について」を読んでからこの記事を読んだほうが良いでしょう。 findcallの実装の詳細 golang.org/x/tools/go/analysis/passes/findcallパッケージは、指定した名前の関数の呼び出し部分を探す簡単なAnalyzerの実装例として提供されています。 このパッケージで提供されているfindcall.Analyzerは次のようなanalysis.Analyzer型の変数になっています。 var Analyzer = &analysis.Analyzer{ Name: "findcall", Doc: Doc, Run: run, RunDespiteErrors: tr

    モジュール化された静的解析の実装を追ってみよう #golang - Qiita