タグ

golangに関するsyo-sa19820615のブックマーク (205)

  • 依存関係管理ツールdep(golang) - Qiita

    皆さんこんにちは、Janです。最近シンプルなGo言語にハマって学び始めました。初めてのブログでGoのパッケージ管理ツールについて説明します。 dep とは npmのようなパッケージ管理・依存関係管理ツールです。 dep と go getの違い dep とgo getは類似のことをやっていますが、違う目的で使用されています。 ではそれらの違いを見てみましょう。 go get 自分のgoプロジェクトに外部パッケージを取得することで作業できるようになり、それ全てが$GOPATH/src/github.com/の下にダウンロードかつインストールされて共有で使用できるようになります。 dep 自分のコードに依存関係を使いたいなら、それをダウンロードして使用することができます。 ワークフローとして,コードにインポートを追加して、dep ensureコマンドで実行することによってGopkg.toml,G

    依存関係管理ツールdep(golang) - Qiita
  • Goへの誤解について

    よくGoで誤解されるポイントについて個人的な見解を書いておきます。 今回の記事はGoアドベントカレンダー2017 その3の20日目の記事です。 使ってないパッケージがコンパイルエラーって面倒じゃね? さっさとgoimportsかgoreturnsを保存時に自動実行するエディタ環境を使いましょう。 gofmtも一緒に実行されていいことずくめですよ! インターフェースがnil判定出来ないパターンがあるのダメじゃん? 最初は私もそう思いました。しかし、typed-nilがnilリテラルと比較できなくなったのは 「nil判定サボったままinterface型に変換した」からでサボらなければ全く問題にならないのです。 map,sliceが不便? map,sliceはメソッドが一切ありません。 極論をいうとGoのプリミティブ型みたいなものなのです。 ユーザーが欲しいものはmapやsliceを駆使して各自

  • Dockerで最小のGoのイメージを作成する(cgo編) - Qiita

    「最小のNode.jsのDockerイメージを目指すスレ」、「JavaでもDockerでマルチステージビルド」というエントリーでは、Node.jsとJavaを使ったアプリケーションのイメージをなるべく小さくするトライアルをしました。 今度はGoでやってみます。ただし、Pure Goで最小というのはすでに方法があって、scratchという何も含まれないイメージを元に、静的リンクしたバイナリを配置するという方法です。 Building Minimal Docker Containers for Go Applications Goを使う場合に、一部cgoで使われたパッケージを利用したいこともあるでしょうし、雑にコマンドラインを利用することもあるだろう、ということで、今回も、できることを減らさずに(やりたいことにしたがって細かく作戦を微調整する必要がない)、なるべく小さく、という方針でいきたいと

    Dockerで最小のGoのイメージを作成する(cgo編) - Qiita
  • Go で書かれた API Gateway "KrakenD" - tchsskのブログ

    これは Go3 Advent Calendar 2017 の 10 日目の記事です。 小さな役割を持つサービス群でアプリケーションを構成する、いわゆる Microservices が流行して久しいですね。サービスが細かく分割されるとき、それらを取りまとめるサービスが必要になることがあります。一般に API GatewayAPI Aggregator と呼ばれるものです。 そんな API Gateway のひとつに Go で書かれた KrakenD というものがあります。 KrakenD - Open source API Gateway 今回はこれを試してみます。 仕様 複数のバックエンド API を集約 (aggregate) する動きを見るため、以下のような仕様でサービスを構築してみます。 バックエンドに GitHub と Qiita の Web API を使用する Kraken

    Go で書かれた API Gateway "KrakenD" - tchsskのブログ
  • 【翻訳】goroutine の仕組み - まるまるこふこふ

    訳者による概要 Krishna Sundarram 氏の記事「How Goroutines Work」の翻訳です。 「goroutine とは軽量スレッドである」という説明に対して抱くであろう 「どのようにして並行処理を実現しているのか」「既存のスレッド処理と何が違うのか」「なぜ軽量なのか」という疑問を解消する文章です。 とても良い文章なのですが、現在リンク切れになっており、 とてももったいないことだと思ったので、日語に翻訳しました。 原文: How Goroutines Work (2017/12/02 現在、リンク切れ) golang の紹介 もしあなたが golang 初心者で、並行処理(Concurrency)と並列処理(Parallelism)の違いがわからなければ、Rob Pike 氏のトーク (リンク先は英語)を参照してください。約 30 分のトークですが、30分視聴するだ

    【翻訳】goroutine の仕組み - まるまるこふこふ
  • Goのパッケージ構成の失敗遍歴と現状確認

    この記事は Gunosy Advent Calendar 2017の5日目の記事です。前回の記事はGunosyのパーソナライズを支える技術 -ワークフロー編-でした。 GoAPIを書くときの問題僕の在籍するGunosyはGoを昔(?)から番採用しておりまして、ノウハウも潤沢に溜まっている企業だと言えます。 しかし、contextの扱いやベストなパッケージ構成、テスト、net/httpでAPIを書くノウハウなどなど、迷うことは多々あります。 これは弊社特有の事情ではなく、Goのサーバーサイドエンジニア全員にとっての問題です。中でも、パッケージ構成をどうすればいいのか(相互参照せずに快適に開発を進められるパッケージ構成とは)を見つけるのは結構難しく、各々のチームにお任せ、という状況です。 今回は上記の問題のうち、パッケージ構成に踏みこんで見たいとおもいます。会社でもよくパッケージ構成をどう

    Goのパッケージ構成の失敗遍歴と現状確認
  • GoのInterfaceとは何者なのか #golang #go - niconegoto Blog

    はじめに これはGo Advent Calendar 2017 - Qiitaの3日目の記事です。 当初はコンパイラの最適化を話すつもりだったのですが… GoConでParallel Compilationの話をしたからコンパイラ最適化のところをアドベントカレンダーで出そうと思ってたんだけど結構内容が濃すぎてなんか間に合わなさそうな雰囲気を感じていているのでどうしようか考えている— 井手康貴/Koki Ide (@niconegoto) 2017年12月2日 こんな感じでつらいなということになり、アンケートを行いました。 というわけで何が読みたいのかアンケート— 井手康貴/Koki Ide (@niconegoto) 2017年12月2日 その結果、上記の通りInterfaceとは何なのかの記事を書くことになりました。(異論は認めません) コンパイラ最適化に関しては30%くらい書き進めてい

    GoのInterfaceとは何者なのか #golang #go - niconegoto Blog
  • ブラウザでも動く簡易 2D ゲームライブラリ Ebiten を Go で作った - Qiita

    Ebiten (海老天) 概要 年末年始休みを費やして Goゲームライブラリ Ebiten の新バージョン 1.1.0-rc1 をリリースしました。特徴は以下の通り: Go を使ったゲーム開発 楽しい! シンプルな API スクリーンもテクスチャも全部 ebiten.Image 構造体で表されます。 Ebiten における描画は ebiten.Image に ebiten.Image を描画する形だけでほぼすべて表現されます (v1.1.0-rc1 時点)。また、 ebiten.Image 構造体は image.Image インターフェイスを実装しているため、例えば描画中の画面を PNG にデコードして保存なども簡単にできます。 2D グラフィックス アルファブレンディング 行列演算による描画 (幾何変換および色変換)、いずれもシェーダ (GLSL) で実行されるので高速 オフスクリー

    ブラウザでも動く簡易 2D ゲームライブラリ Ebiten を Go で作った - Qiita
  • 前株/後株判定コマンド・kabu を Go でつくった - えいのうにっき

    どうしようもないコマンド・ツールなんだけど、日頃地味に困ることが多いので、表題のツールを作った。 $ kabu はてな 前株マッチ数:9 後株マッチ数:0 前株です! 株式会社はてな どうしようもない...。。 仕様 日頃の業務などで「この会社、前株だっけな、後株だっけな...。。」というとき、ありますよね。みなさんはどうしてるんでしょう。 ぼくはどうしてるかというと、「会社名 株式会社」といったワードでぐぐって、その結果をざっと眺めて「あぁ、前株/後株だったな...。。」というかんじでやってます。これをもう、100万回ぐらいやってる。さすがに嫌気が差したので、その作業をそのままやってくれるコマンドを書きました。その名も kabu 。 つかいかた リポジトリ の README にも書いてるのだけど、kabu は、Google Custom Search API を使用してるので、予め Go

    前株/後株判定コマンド・kabu を Go でつくった - えいのうにっき
  • GoでSingletonぽいことを実現する、とある方法 | おそらくはそれさえも平凡な日々

    ちなみに今回のコードはそれほど実用性はありません。ここまで頑張って、シングルトンぽいことを実現する必要性は感じられないからです。サンプルコードはこちら。 https://www.github.com/Songmu/go-sandbox/ Goでシングルトンを実現する方法として以下の様なコードが良く見られます。 package singleton import "sync" type singleton struct{ } var ( instance *singleton once sync.Once ) func GetInstance() *singleton{ once.Do(func() { instance = &singleton{} }) return instance } このコードのグッドポイントとしては、 sync.Once を使っていること。以下のように素朴に nil

    GoでSingletonぽいことを実現する、とある方法 | おそらくはそれさえも平凡な日々
  • GoでSpreadsheetを操作するパッケージを作った - Qiita

    皆様こんにちは、いわーくです。 Goは実行環境を選ばず、バイナリ1個で動作するので簡単なツールを作るのが非常に手軽ですよね。 さらに、ゴルーチンによって並行処理が簡単に実装できるので、同時に色々な処理をさせるのが得意です。 そんなGoを使ってスプレッドシートを読み書きすることができれば、とても便利ですよね! 執筆時点ではGo言語からスプレッドシートを読み書きできるパッケージは見つからなかったので、自分で作りました。 githubで公開しています => spreadsheet 【6/25追記】 どうやら公式のパッケージが公開されたみたいです。こちらのQuickStartに簡単な使い方が書かれています。 インストール 他のGoのパッケージと同様にgo get github.com/Iwark/spreadsheetでインストールできます。 ドキュメントはgodocで閲覧できます。 使い方 認証

    GoでSpreadsheetを操作するパッケージを作った - Qiita
  • golangを使って開発したWebAPIを1年半運用して改善してきたことー月間20億PVのマンガサービス開発の裏側 | Nagisaのすゝめ

    2017年10月2日 golangを使って開発したWebAPIを1年半運用して改善してきたことー月間20億PVのマンガサービス開発の裏側 はじめに 初めまして、サーバーサイドエンジニアの曽根田です。 0から立ち上げ3年で月間20億PV達成!マンガZEROの開発を牽引するエンジニアチーム での紹介にもあるように、弊社では複数のマンガアプリの開発が並行して進められています。 その中で今回はマンガZEROの成長過程でぶつかり、 乗り越えてきた問題をサーバーサイド視点で紹介していきたいと思います。 乗り越えてきた問題 最初はPHP5.6+Phalconというマイクロフレームワークでプロダクトを運用していました。 マンガZEROメジャーバージョンのアップデートの際に、golangを採用しました。 理由は以下の2点です。 バイナリ一つで動作する(外部依存しない) 軽量でハイパフォーマンス 弊社には積極

    golangを使って開発したWebAPIを1年半運用して改善してきたことー月間20億PVのマンガサービス開発の裏側 | Nagisaのすゝめ
  • ミリシタを支える GAE/Go

    This document summarizes a microservices meetup hosted by @mosa_siru. Key points include: 1. @mosa_siru is an engineer at DeNA and CTO of Gunosy. 2. The meetup covered Gunosy's architecture with over 45 GitHub repositories, 30 stacks, 10 Go APIs, and 10 Python batch processes using AWS services like Kinesis, Lambda, SQS and API Gateway. 3. Challenges discussed were managing 30 microservices, ensur

    ミリシタを支える GAE/Go
  • Goの実装パターン ~ Webサーバ編 ~

    From Spring Boot 2 to Spring Boot 3 with Java 22 and Jakarta EE

    Goの実装パターン ~ Webサーバ編 ~
  • Datastore/Go のデータ設計と struct の振る舞いについて

    パーソナルデータの入ったデータベースを匿名化して第3者に渡す場合の議論が巷では多いようです。しかし、ビッグデータが超ビッグになり、時間的に累積してくる時系列データのような場合、データベース全体を第3者に渡す方法はだんだん現実的でなくなります。 データベースへ利用者が質問する使い方だと、質問への回答から個人情報が漏れなければ、安全性が高いわけです。そのための技術として使えそうなのが、ここで述べる差分プライバシーです。 このスライドでは、(1)差分プライバシーの基礎入門と、(2)差分プライバシーを時系列データに適用する方法に関する最近の4の論文を紹介します。

    Datastore/Go のデータ設計と struct の振る舞いについて
  • Go + microservices = Go kit

    Microservices are hard, but Go and Go kit can make them easier.

    Go + microservices = Go kit
  • 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言語をほぼ毎日書いている話 (序) - ゆううきメモ
  • Go言語のリアルタイムGC 理論と実践 | POSTD

    (編注:誤訳、意味の分かりづらい訳を修正しました。リクエストありがとうございました。) 毎日、Pusherは数十億のメッセージをリアルタイム、つまり送り元から宛先まで100ms未満で送信しています。どのようにしてそれを可能にしているのでしょうか。重要となる要因はGoの低レイテンシのガベージコレクタです。 ガベージコレクタはプログラムを一時停止させるものであり、リアルタイムシステムの悩みの種です。そのため、新しいメッセージバスを設計する際には慎重に言語を選びました。Goは 低レイテンシを強調している ものの、私たちは懐疑的でした。「当にGoを使えば実現できるのか? もしできるならどうやって?」 このブログ記事ではGoのガベージコレクタを、どのように機能し(トリコロールアルゴリズム)、なぜ機能し(こんなに短いGCによる一時停止時間の実現)、そして何よりも、それが機能するのかどうか(GCによる

    Go言語のリアルタイムGC 理論と実践 | POSTD
  • net/httpで作るGo APIサーバー #1

    GoにはWebサービスを作るためのフレームワークがそれなりの数存在している。 Awesome Go - Web Frameworks ただ、そこまでデファクトというものがあるわけではなく、他の言語と比べると少々乱立気味なのではないかな、という感想を持っている。この記事ではnet/httpを主軸に据え、取替可能な部品となるライブラリを利用してAPIサーバーを作成する方法を紹介する。 長くなりそうなので記事を分けて紹介する予定だけど、今日はアプリケーショングローバルな値をどのように保持するのが良いのかについて書く。 アプリケーショングローバルな値 APIサーバーにはそのアプリケーションにおいてグローバルな値を保持しておきたいケースが多い。例えばAPIサーバーの設定情報だったり、外部APIにアクセスするクライアントだったり、DBへのコネクションだったり、loggerだったり。そういったものを初期

  • ターミナルを録画する(ttyrec+ttygif(Go言語版)) | たくのこ Web

    技術系ブログなどでコマンドラインの実行コマンドをキャプチャしてgifアニメーションにしてるような記事をよく見かける。 ↓こんな感じの あれ、カッコイイなーと思って調べてみたら、どうやらttyrecというものでできるそうなのでやってみた。 環境 MacOS X 10.10.5 Yosemiteターミナル バージョン2.5.3(343.7) iterm2じゃうまく動作しなかった… (これでむっちゃコケた… iterm2でもうまく動作してくれました!(2018.12.25) ttygif sugyan/ttygif を利用させていただきました. インストール # ttyrecは入力された文字を記録・再生するためのツール brew install ttyrec # 録画したttyファイルからgifアニメーションを生成するためのツール # go言語で作成されているため、goもインストールする。 br

    ターミナルを録画する(ttyrec+ttygif(Go言語版)) | たくのこ Web