タグ

Goに関するguitgraphのブックマーク (74)

  • 開発用適当ツールはGoで作るのがオススメ - Qiita

    開発用適当ツールとは? 開発していると、たまに何かしらプロジェクト内で開発者用や運用者用にテストデータを作成したり、DBAPIに繋いでCSVExcelを出したりする名もなきツールが大量に必要になってきますよね? 配布して他の人にも使ってもらったりしたくなりますよね? これが開発用適当ツール1です。 そういった開発用適当ツールをGoで作ってみたら案外体験が悪くなかったのでシェアしたいと思います。 どうやって開発用適当ツールを作るか? 既存プロジェクトにそのままGoプロジェクトレイアウトを重ねていきます。 具体的には以下のような感じです。 project-root-directory/ プロジェクトの既存ファイル go.mod go.sum cmd/ ツール1/ main.go ツール2/ main.go internal/ (もしくは分かりやすいディレクトリ) (main.go に入ら

    開発用適当ツールはGoで作るのがオススメ - Qiita
  • Webアプリケーションにおけるレートリミット、サーキットブレーカー、リトライの役割を調べて実装してみた - RAKUS Developers Blog | ラクス エンジニアブログ

    はじめに Webアプリケーションにおけるレートリミット、サーキットブレーカー、リトライの役割 リトライ サーキットブレーカー レートリミット レートリミット、サーキットブレーカー、リトライの実装 サンプルアプリケーションの実装 リトライ、サーキットブレーカー、レートリミットを追加 まとめ 年に1度の技術イベント「RAKUS Tech Conference」を開催します!! はじめに こんにちは!エンジニア2年目のTKDSです。 今回は、レートリミット・サーキットブレーカー・リトライについて調べた内容を紹介し、ライブラリを使ってGoで実装してみます。 Webアプリケーションにおけるレートリミット、サーキットブレーカー、リトライの役割 リトライ リクエストが失敗した場合に再試行します。 リトライは、一時的な障害に対して効果を発揮します。 ネットワークの瞬断やサービスの一時的な過負荷など、やり直

    Webアプリケーションにおけるレートリミット、サーキットブレーカー、リトライの役割を調べて実装してみた - RAKUS Developers Blog | ラクス エンジニアブログ
  • 今どきの Go の書き方まとめ (2020 年末版) - エムスリーテックブログ

    こんにちは、m3 エンジニアリンググループ CTO 矢崎(id:Saiya)です。 過去に Go 言語の仕様を一通り見た経験があったのですが、久しぶりに Go のコードを最近読み書きした際に、ここ数年の Go 言語やエコシステムの進化による変化もあり、発見やハマりが多々ありました。 Go 言語公式のロゴもスピード感ありますね。 同じような迷い・回り道をしてしまう方ももしかしたらおられるのではないかと思いますゆえ、 エムスリー Advent Calendar 2020 6 日目の記事として、筆者が実際に「最初から知っていれば時間を無駄にしなかったのに...!」と感じた知見をざっくばらんにシェアいたします。 記事がどなたかの一助になりますと幸いです。 なお記事の内容は筆者個人の理解・自身で直接読み書きしたユースケースの範囲での知見であり、全ての Go 利用事例に当てはまらない点も含みうりま

    今どきの Go の書き方まとめ (2020 年末版) - エムスリーテックブログ
    guitgraph
    guitgraph 2020/12/06
  • Realize から Air に移行し、 Go(echo) + Air + docker-compose でホットリロードを利用して開発を行う。 - @teitei_tk Blog

    この記事は Go 2 Advent Calendar 2020 の4日目の記事です。 tl;dr Goでホットリロード(a.k.a Live reload)を利用する際には今までは Realize というライブラリを使っている人が多いが、開発が止まっている。 issueも放置され、go modの対応もされておらず、2020/10/25現在のモダンな環境で構築を行うと詰まる点が多い。 代わりに Air というライブラリを利用してホットリロードを行う。 Go + docker-composeを利用してホットリロードを利用した開発を行いたいと検索をして一番多かったのがrealizeというライブラリだった。 github.com が、開発が停滞しているようで、issueも溜まっており、go modの対応もされておらず、2020/10/25 現在の環境で新規に作ろうとすると、いくつもハマる点があった

    Realize から Air に移行し、 Go(echo) + Air + docker-compose でホットリロードを利用して開発を行う。 - @teitei_tk Blog
  • Go 脱初心者への道

    最近、 Go の学習を始めました。入門書や 公式のチュートリアル を終えてもなかなか解らないことをまとめてみました。 1. パッケージ作成・パッケージ管理 1. a. ディレクトリ構成は非公式ながら標準と目されるものがある(らしい) Standard Go Project Layout /cmd にmainのアプリケーションのソースを置きます。 /pkg にライブラリのソースを置きます。 /src にソースを置いてはいけません。 なお、このディレクトリ構成は go コマンド(go build 等)がデフォルトで認識するディレクトリ (/src , /pkg , /bin) とは全く異なるので注意が必要です。 2021-05-24 追記 このレイアウトは殆ど普及していないとのこと。また、リポジトリ名が「標準」を名乗るのは誤解を招くとのissueも挙がっています。 個人的な意見として、ライブラ

    Go 脱初心者への道
    guitgraph
    guitgraph 2020/10/20
  • golang.org/x/text 配下のパッケージをいくつか紹介する - Qiita

    はじめに 今回は準標準の golang.org/x/text 配下のパッケージを紹介します。 ここではは主に多言語、多locale対応の際の文字列操作をサポートするパッケージが管理されています。 アジア圏などの文字管理に考慮事項が多いlocaleに関してはそれ向けに特化したパッケージなども提供されています。 今日はその中からいくつかのパッケージを紹介したいと思います。 これは Go6 Advent Calendar 2019 の投稿です(ちょっと遅刻しました) golang.org/x/text/number doc: https://golang.org/x/text/number このパッケージは、言語による数値表現の差分を吸収してくれます。 出力の際は同じく準標準のパッケージである https://golang.org/x/text/message をつかって出力できます。 例えば英

    golang.org/x/text 配下のパッケージをいくつか紹介する - Qiita
    guitgraph
    guitgraph 2020/07/09
  • SlackをGo製ツールのGUIフロントエンドとして使う(#1: データの登録と表示) - ほんじゃらねっと

    ブラウザで操作できるツールを作りたいけどWebのフロントエンド作るの面倒だな...とWeb系開発者にあるまじき事を考えつつ良いプラットフォームを探していたら、SlackAPIが進化してツールフロントエンド化するのにうってつけの機能が増えているのを見つけました。 api.slack.com チャットツールのAPIといえば、「チャットで入力したテキストをボット側でがんばって解釈して実行する」というCUIのコマンド的な使い方しかできないイメージだったのですが、最近のSlackAPIは「ショートカット(Shortcuts)」「モーダル(Modals)」「ブロックキット(Block Kit)」といった機能を使うことで、入力コンポーネントを使用したGUIでボットとやりとりすることができるようになっています。 これらを駆使すれば、入力フォームからデータを登録したり、編集フォームでデータを変更したり、

    SlackをGo製ツールのGUIフロントエンドとして使う(#1: データの登録と表示) - ほんじゃらねっと
  • Goのインターフェース抽象度を美しく保つ為の思考 - 好奇心に殺される。

    Go Goのインターフェース抽象度を美しく保つ為の思考 Goで抽象化を適切に、そして美しく保つ為の自分の考えやTipsを紹介します。 Overview とある場面でGoのinterfaceが持つ振る舞いの抽象度について議論があり、今回はそれをアウトプットしておきます。Go初心者でinterfaceを使った設計に苦手意識を持つ人向けです。 目次 今回の目次です!下記について自分の考えをお話しします! 振る舞いの抽象化の度合いを意識する 抽象度をどこまであげるか 引数や返り値から発生する「抽象化の漏れ」 抽象度をあげる為の統合 Getter/Setterと抽象度 それではいってみましょう! 振る舞いの抽象化の度合いを意識する 振る舞いをinterfaceとして定義していくのがGoの抽象化ですが、そもそも 抽象化は度合いのある概念です 。この度合いを意識しないと適切なinterfaceの設計は困

    Goのインターフェース抽象度を美しく保つ為の思考 - 好奇心に殺される。
    guitgraph
    guitgraph 2020/06/23
  • 作って学ぶGraphQL。gqlgenを用いて鉄道データ検索API開発入門 | フューチャー技術ブログ

    春の入門祭りの7日目です。 はじめに※このエントリーはGoGraphQLサーバアプリ開発の入門記事です。技術要素にGo, gqlgen, Docker, PosgreSQLなどが登場します。 TIG DXユニット 1の真野です。技術ブログ運営もしています。 フューチャーではOpenAPI関連の過去記事からお察しもできるように、REST-likeなWeb APIを実装することが多いです。しかし日製HeadlessCMSのmicroCMSを触ってみたの記事で紹介されたように、HeadlessCMS界隈を初めGraphQLAPIを提供するサービスが増えている体感もあり、GraphQLを春の入門祭りのテーマにしました。 学習する上でドキュメントを読み込むだけでは忘れがちです。手を動かしながらタイトルにあるように鉄道データ検索APIGraphQLで実装していきましょう。実装の前に結果のみを知

    作って学ぶGraphQL。gqlgenを用いて鉄道データ検索API開発入門 | フューチャー技術ブログ
  • Goのテストに入門してみよう! | フューチャー技術ブログ

    2020/08/15更新: 「テストの失敗をレポートしたい」と「サブテストの一部のみ実施したい」の章を追加 はじめにTIG の辻です。今回は春の入門祭りということで Go のテストに入門してみよう! という記事です。 書いた背景ですが Go の標準ライブラリのコードリーディング会で testing パッケージにチャレンジしてみましたが、難しすぎてわからん。そもそも Go のテストって何ができるんだっけ? という話になり、基的な内容をなるべく具体例をまじえながらまとめました。 ざっとどんなことができるんだろう、という index になれば幸いです。 TipsGo に組み込まれているテストの仕組みの中に、ベンチマークに関するテストと Example テストというサンプルコード用のテストも含まれているのですが、この 2 つは対象外にします。基礎的と思われる内容から順に並べてみました。 はじめに

    Goのテストに入門してみよう! | フューチャー技術ブログ
  • go generate のベストプラクティス - Qiita

    概要 Go 言語におけるコード生成 (go generate) について、自分の中でベストプラクティスと思えるものが増えてきたので、ここでまとめて紹介してみたいと思います。 2020/05/30 初版 2020/06/03 次の節を追加 マップを元データとするときは要素の出力順をソートする 使用するコードジェネレータのバージョンをモジュールに記録する 2020/06/03 次の資料を公開 go generate 完全入門 (プログラミング言語Go完全入門 質問会 発表資料) wtz.go と time について go generate のベストプラクティスを説明するにあたり、この記事では wtz.go と time の 2 つのライブラリを実例としてとりあげます。 wtz.go は筆者が Go 標準ライブラリの time の Windows ランタイム部分を参考にして作成したもので、 Wi

    go generate のベストプラクティス - Qiita
    guitgraph
    guitgraph 2020/06/01
  • Go の t.Cleanup がとてもべんり - blog.syfm

    Go 1.14 で testing パッケージに新しく t.Cleanup(func()) や b.Cleanup(func()) が導入されました。 最初は今まで defer を使っていたところを置き換えられるくらいしか良いところがないかな〜と思っていましたが、想像以上に柔軟な使い方ができるので今まで使用したパターンを書いておきます。 Cleanup の特徴 テストランナーは panic ハンドラがあるので、Cleanup は panic が起きたとしても常に呼び出されます。例えば、以下のコードではちゃんと called が出力されます。 func Test_main(t *testing.T) { t.Cleanup(func() { fmt.Println("called") }) panic("") } The Go Playground 別 goroutine で panic し

    Go の t.Cleanup がとてもべんり - blog.syfm
  • goroutineでバッチ処理時間を大幅に改善した話 - Tech Do | メディアドゥの技術ブログ 

    はじめに こんにちは、Media Do Tech Do Blog初執筆のogadyです。 メディアドゥには2019年の8月に入社して、この度ついにブログ執筆させていただくことになりました! 記事では、私のチームで運用しているバッチツールをgoroutineで高速化した話をさせていただきます。 背景 現在メディアドゥでは、二つの電子書籍取次システムを片寄せし、統合する案件を進めています。 私のチームは、システムのDBマイグレーションを行う移行・突合システムをgoで開発・運用しています。 移行・突合システムでは、移行元の取次システムのデータを移行・突合システムにインポートして、ごちゃごちゃ加工してマイグレーションしています。 移行・突合システムイメージ図 この「取次システムのデータを移行システムにインポートして」という部分が曲者で、最新状態を保つため定期的・突発的に移行システムのDBを総入替

    goroutineでバッチ処理時間を大幅に改善した話 - Tech Do | メディアドゥの技術ブログ 
    guitgraph
    guitgraph 2020/05/13
  • Go言語でハマったことメモ(インターフェース) - Qiita

    Golangを始めました。 GolangはC言語のように、シンプルな文法・データ構造でできているのですが、同時に、生産性を高めるための、高度な概念も取り入られています。 そしてそのために、Golangには若干トリッキーな構文がいくつかあります。 しかし、それらを知らずに、他の言語での先入観や勝手な思い込みで判断してしまって、ハマることがちょいちょいありました。 ここでは、Golangを始めてみて、個人的にハマったことや、勘違いしたことを、トピック別に備忘録としてメモしていこうと思います。 ここでは、「インターフェース(interface)」とは何ぞやについてのメモを記載しました。 インターフェースとは? Golangの変数は、値だけを持っていて、型情報は持っていません。Golangには、変数の値とその変数の型情報をセットにして保持する、言語組み込みの特殊な構造体があり、その構造体をインター

    Go言語でハマったことメモ(インターフェース) - Qiita
    guitgraph
    guitgraph 2020/04/26
  • VS CodeのGo言語テストコード生成ツールを使ってみたらめちゃくちゃ便利だった話とか - kdnakt blog

    年末年始はGoのテストコードを書いて過ごしている。 そんなことよりそろそろ2019年の抱負的なものを書かないと……とは思うものの、振り返り系記事ばかりで技術系記事がおろそかになってもあれなので、テストコードを書いていて学んだことをまとめておく。 [Go言語用VS Codeセットアップ手順] [テストコード・スケルトン自動生成] [関数の戻り値を比較する3つの方法] 等価演算子 (==, !=) で比較する Object.Equal() で比較する リフレクションを利用して reflect.DeepEqual() で比較する [まとめ] [Go言語用VS Codeセットアップ手順] 実行環境はMac 10.14.2 + VS Code 1.30.1。 VS Codeの左側のメニューの5番目の四角いアイコンが「Extensions」、拡張機能のメニュー。検索ウィンドウに「go」と入力するとMi

    VS CodeのGo言語テストコード生成ツールを使ってみたらめちゃくちゃ便利だった話とか - kdnakt blog
  • Goでステガノグラフィやってみる

    こんにちは、痩せるが口癖の3年目の終わりが近いエンジニアの井村です。 ゲーム事業グループ内でGo勉強会を隔週でやっていまして第4回目の時に担当になったのでその内容を書こうと思います。 勉強会 まず、前提として私のGo言語の経験は勉強会時点で「スターティングGo言語」のChapter5までの基構文を読んだ程度です。 今回の勉強会ではステガノグラフィをテーマとしました。 画像データに別のデータ(画像・文字列)を埋め込み、その方法を参加者に教えてそれを復元してもらいました。 ステガノグラフィとは ステガノグラフィはデータ隠蔽の一種で画像、音声、テキストなどのデータを別のデータに隠す技術のことです。 今回の勉強会ではLSBステガノグラフィと呼ばれる方法を使いました。 LSB法 各RGB値の最下位ビット(LSB)にデータを埋め込む方法。 RGB値の最下位1bitを使う場合、1ピクセルに3bit使う

    Goでステガノグラフィやってみる
    guitgraph
    guitgraph 2020/03/24
  • Goのinterfaceの使いかた 基礎編 - エムスリーテックブログ

    エムスリーエンジニアリンググループ/BIRの滝安(@juntaki)です。 BIRはビジネスインテリジェンス&リサーチの略で、そこでは医療従事者の会員向けアンケートをベースに、製薬会社へのマーケティング支援を提供する事業を行っています。BIRではエムスリーではじめてGoを導入し、今ではほとんどの新規システムをGoで立ち上げています。(一部でKotlinもつかっています) Goでは、interfaceの使い方を知ることで、依存関係、コンポーネントの責務を整理した設計を考えることができます。 この記事ではGo導入当初にメンバに説明した、interfaceの基的な使い方やTipsを整理していきます(すでに、Goをよく知っている人には当たり前すぎるかもしれません)。 また、この記事の後にBIRのメンバーがGo関連記事をいろいろ書く予定となっています! interfaceの使い方 interfac

    Goのinterfaceの使いかた 基礎編 - エムスリーテックブログ
    guitgraph
    guitgraph 2020/03/14
  • vimで高速コーディングする方法 - Qiita

    こんにちわ、ゴリラです。 Vimといえば高速でコーディングできるという印象を持っている方が多いのではないでしょうか? 今日は、Postfix Code Completion という手法をつかって早くコーディングする方法紹介します。 この方法を使えば次のgifのように、さくっとJSONを返すHTTPサーバーを立てられます。 Postfix Code Completionとは 後置補完という補完手法です。 例えば、(a == b)に対してifを使いたい場合は(a == b).ifと入力して展開するとif (a == b) { }というふうに補完してくれます。 後ろのコードifが前のコード(a == b)に作用するという考え方です。 これを積極的に使用していくとより高速にコーディングできるようになります。 僕の場合は、割と後置補完だけではなくスニペットのように使っています。 VimでPostfi

    vimで高速コーディングする方法 - Qiita
  • Goの標準ライブラリのコードリーディングのすすめ | フューチャー技術ブログ

    パッケージの選定そもそも、どのパッケージを読んだらいいんだろう? という疑問があると思います。上記のパッケージを選定した方法を紹介したいと思います。 読むパッケージの選定は有志のメンバー数名で一緒に決めました。 まずパッケージのステップ数を見てスクリーニングしています。gocloc というツールを使うと以下のフォーマットで簡単にステップ数を確認できます。 $ gocloc archive ------------------------------------------------------------------------------- Language files blank comment code ------------------------------------------------------------------------------- Go 21 782

    Goの標準ライブラリのコードリーディングのすすめ | フューチャー技術ブログ
    guitgraph
    guitgraph 2020/03/10
  • GoとRustの言語比較記事を書くのが流行ってるらしい

    コンテキスト 私もGoRustの比較記事書いてバズるやつやりたい — みょん (@myuon_myon) February 27, 2020 仕事GoRustを書いています。いずれもWebのサーバーサイドです。パフォーマンスとかほとほどって感じなので極限までチューニングしたりしません。という前提で読んでください。 Rust/Goはいずれも習得してから2年くらい書いています。書いてる量も多分そんなに変わりません。 Go なんと言っても習得難度が低いので人を選ばず書けるようになります。現状だと仕事で書くなら一番無難な選択肢だなと思っています。一方言語もエコシステムも何もかもかなりクセが強いので、Go Wayにちゃんと従うことが大事だなと思ったりします。 ジェネリクスがないことは高速なコンパイルなど利点もありますがmap,filter等を型ごとにfor文書きまくることになるのでとても手が疲