タグ

Goに関するdamehumanのブックマーク (150)

  • Goの開発環境でDockerを利用する - Qiita

    Go3 Advent Calendar 2018の9日目を担当するtheoden9014です。よろしくお願いします。 Makefileについて書こうと思ったのですが、内容が同じような記事が先に出てしまったようなので、少し趣向を変えたタイトルにしました。 この記事では、MakefileとDockerfileを上手く利用することによって、Docker内でのビルドやデバッグを簡単にする方法についてご紹介します。 この手法であれば、開発者は手元にはDockerをインストールするだけでGoを使った開発を行えるようになります。 今回は以下のリポジトリをベースとしてご紹介していきます。 https://github.com/theoden9014/go-startkit/tree/qiita 背景 Goで開発する際には$GOPATHの知識は必要不可欠です。 vgoの普及によって$GOPATHの重要性は下

    Goの開発環境でDockerを利用する - Qiita
  • 「Vue.js + Go言語 + Docker」で作る!画像アップロード機能実装ハンズオン - Qiita

    こんにちはpo3rinです。Vue.js Advent Calender 2018 9日目の記事です。 8日目の記事は vue.js(nuxt.js) の plugin はとても便利 でした。 11月にフリーの案件で Vue.js + Go言語で画像アップロード機能のあるCMSを作りました。Vue.jsでの実装の際には npmモジュールである vue2-dropzone を使うと、Vue.js にとって便利な機能が提供されており、すぐにアップロード機能が作れました。なので今回は Vue.js + Go言語 で画像アップロードを行う機能の実装をハンズオン形式で紹介していきます。 今回は Vue.js のアドベントカレンダーとしての投稿なので、Go言語の実装を飛ばしたい方向けに、Go言語のインストールが不要になるように、すでにDocker環境を用意してあります。せっかくなので今回は Docke

    「Vue.js + Go言語 + Docker」で作る!画像アップロード機能実装ハンズオン - Qiita
  • Goでproxy serverを作るときにハマるポイント | メルカリエンジニアリング

    Mercari Advent Calendar 2018 の5日目はSREチームの @catatsuy がお送りします。 メルカリではGoで書かれたproxy serverをサービスの各所で使っています。今回はGoでproxy serverを作るときにハマりそうな、標準ライブラリの挙動や特徴について紹介します。 エントリーは2018/12/04現在の最新であるGo 1.11.2を元にして書きます。 Hostヘッダーはreq.Header.Set(“Host”, “example.com”)しても上書きできない https://github.com/golang/go/blob/e8a95aeb75536496432bcace1fb2bbfa449bf0fa/src/net/http/request.go#L1023 https://github.com/golang/go/blob/e8

    Goでproxy serverを作るときにハマるポイント | メルカリエンジニアリング
  • 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で簡易なプロトコルの実装をしてみた - Qiita

    こちらは、Go3 Advent Calendar 2018 の 3 日目の記事です。 昨日は、@takochuu さんの 標準パッケージから見るパッケージ構成のパターンの解説でした。 (標準パッケージでも、様々な構成があって勉強になりました。) 概要 Go で非常に簡単なプロトコルを実装してみました。 (当に簡単なのでご容赦ください。) 対象 プロトコルってどうやって作るのか気になる方 なんとなく読んでみたい方 内容 簡単なプロトコルの Go 実装 アプリケーション層のプロトコルを実装 ネットワーク層は TCP 通信 詳細 プロトコル仕様 簡単なユーザー認証が入ったプロトコルで、下記の通りに通信します。 1. 初期リクエストパケット (Clinet -> Server) 対象リクエストか否かを判定するため、Clientから特定のbyte(ENQ)のリクエストを送ります。

    Goで簡易なプロトコルの実装をしてみた - Qiita
  • [Go言語] もしも童話「シンデレラ」が、Goで書かれていたら。 - Qiita

    シンデレラがGoで書かれていたら。 という妄想です。 少し長いですがお付き合いください。 TL;DR ソースはここにおいてます https://github.com/lboavde1121/cinderella あらすじ 以下あらすじ。 シンデレラは、継母とその連れ子である姉たちに日々いじめられていた。 あるとき、城で舞踏会が開かれ、姉たちは着飾って出ていくが、シンデレラにはドレスがなかった。 舞踏会に行きたがるシンデレラを、不可思議な力(魔法使い、仙女、ネズミ、母親の形見の木、白鳩など)が助け、準備を整えるが、魔法は午前零時に解けるので帰ってくるようにと警告される。 シンデレラは、城で王子に見初められる。 零時の鐘の音に焦ったシンデレラは階段にを落としてしまう。 王子は、を手がかりにシンデレラを捜す。 姉2人も含め、シンデレラの落としたは、シンデレラ以外の誰にも合わなかった。 シン

    [Go言語] もしも童話「シンデレラ」が、Goで書かれていたら。 - Qiita
  • Go Playgroundで外部パッケージを使えるようにした #golang | Wantedly Engineer Blog

    こんにちは、Wantedly Visitのサーバーサイドエンジニアの一條(Github: @rerost Twitter: @hazumirr)です。 みなさん、The Go Playgroundを使ってますか? 僕は元々Railsエンジニアだったのですが、ここ最近ずっとGoを書いています。元々Goを書いていていたわけではないので、Goの動作の確認などのために、Playgroundをよく使っています。 これは非常に良くて、Railsではrails c�でコードを試していたように、PlaygroundでGoのコードを試すことができます。 ただ、Playgroundでは外部パッケージが使えず、ちょっとした動作確認などができませんでした。他のGolangエンジニアにざっくり解決策を聞いてみたところ 試すためのレポジトリを作ってしまうそのパッケージ用のテストを書く(書いたテストはすぐ捨てられるよう

    Go Playgroundで外部パッケージを使えるようにした #golang | Wantedly Engineer Blog
  • Kubernetes上で動くマイクロサービスとして「毎時新聞」を作り直した - inajob's blog

    これは何? インターネットの世界が常に気になるけれども、ずっと見ているわけにはいけません。例えば私は仕事をしているときはTwitterをずっと眺めているわけには行きません。 そんな人に向けたサービスが「毎時新聞」です。 Twitterで盛り上がっている画像や、トレンドワードを1時間ごとに集約します。 寝る前に今日のページを見ると 大まかなインターネットの盛り上がり方を知ることができます。 実はこれ、以前も作ったことがあります。 inajob.hatenablog.jp 数年運用したのですが、最近Closeさせてしまいました。で、今回また作りました。 デモ こちらからアクセスすることができます。 page.inajob.tk こんな感じで、1時間ごとにTwitterで流行った画像を閲覧できるサービスです。 ちょうど10/20の8時で、シンカリオンの画像がはやっている様子がわかります。 もうひ

    Kubernetes上で動くマイクロサービスとして「毎時新聞」を作り直した - inajob's blog
  • CLI ツールを Go で書いて Docker イメージとしてリリースする

    最近ようやく開発ツールとして Docker が手に馴染んできたので、タイトルの件も含めていくつか雑多に書きます。 CLI ツールを Go で書いて Docker イメージとしてリリースする コマンドラインツールを Go で書く、というのは以前からやっていて、主な理由としては「クロスコンパイルができるのでバイナリリリースが簡単」というのがありました。便利なので、クロスコンパイルから GitHub へのリリースを一発でやってくれるラッパーツールを書いたこともありました (一応動くものの、開発は非常に中途半端なところで止まってますが) gox して ghr するツール ggallin 作った その後、2017 年に入って Docker で Multi-Stage Builds という機能が実装されてからは、Dockerfile 内の build ステージで go build したバイナリを最終的

    CLI ツールを Go で書いて Docker イメージとしてリリースする
  • Go言語の基礎〜Go 1.11 開発環境構築とパッケージバージョン管理〜 | RE:ENGINES

    はじめに こんにちは、雨の日が最近多く、気温の変化が激しくて、体調管理に気をつけなければと思うこの頃です。 さて、今回はGo言語についてです。Go言語をご存知の方は、最近ですと、2018年8月末に1.11がリリースされことや、Go2でのgenericsやエラーハンドリングに関する議論など耳にされている方も多いのではないでしょうか。 改めて話題になってたことで、私たちもGo言語を改めて学びなおそうと、勉強会合宿を開催しました。そこで発表・共有した内容を簡単にまとめ、数回にわたり連載を予定しております。 今回の記事では、改めてGo言語を勉強してみたいという方向けに、Go言語概要と環境構築から、Go 1.11でexperimentalでリリースされた Modules について紹介したいと思います。 Go言語(Golang)とは Go言語の連載最初の1回目の記事なので、簡単にGo言語についても説明

    Go言語の基礎〜Go 1.11 開発環境構築とパッケージバージョン管理〜 | RE:ENGINES
    damehuman
    damehuman 2018/10/09
  • Go × Clean Architectureのサンプル実装 - 爆速でGo!

    Click here for English version *追記:Student Goで発表しました。 speakerdeck.com クリーンアーキテクチャとは 以下を実現することで、関心の分離をするアーキテクチャパターンです。 ドメインロジックを独立させる フレームワークを独立させる UIを独立させる DB含む外部の全てを独立させる ドメインロジックをテストしやすくする 詳しくは様々な記事で説明されているので、今エントリでは割愛し実装パターンに絞って紹介します。 Clean Coder Blog 持続可能な開発を目指す ~ ドメイン・ユースケース駆動(クリーンアーキテクチャ) + 単方向に制限した処理 + FRP - Qiita サンプルアプリケーション ↓サンプルコード github.com 仕様は、/users にPOSTすることでユーザー登録するだけのapiです。 基はma

    Go × Clean Architectureのサンプル実装 - 爆速でGo!
  • Go言語のGCについて - LINE ENGINEERING

    なぜGo言語はコンパクションを採用していないのか GoogleのRick Hudson氏によるISMM 2018 Keynote “Getting To Go”を参照すると、以下のことがわかります。 2014年の時点では”Read barrier free concurrent copying GC”を計画していた しかし期間的な制約から断念し、CMSに舵を切った(この時期に彼らは、ランタイムをCからGoに書き換える作業も行う必要がありました。Changes to the runtime) TCMallocをベースとしたメモリアロケーターを採用することで、断片化およびアロケーションの速度の問題を解決した Go言語のメモリアロケーションについては、ランタイムのコードのコメントにも詳しく記載されています。 malloc.go This was originally based on tcmal

    Go言語のGCについて - LINE ENGINEERING
  • 技術も腕力もないけどコンパイラを自作してみた - Qiita

    概要 LispをCへ変換するコンパイラ(トランスパイラということもありますが以下コンパイラと呼びます)を Go で実装してみました。 成果物については PLC で公開しています。 この記事では特に整数のみを扱うLispコンパイラを実装して、フィボナッチ数を計算できるようになるまでの過程をまとめました。 免責 Goで作ってみたのですが編ではまったくGoが出てきません。 はじめに TCFM #10 52:10 コンパイラを自作するなんて難度高そうだけど、そんなに難しくないというならひょっとしたらできるんじゃないか。 とはいえ、C言語自体詳しくないのにそのコンパイラを作るというのはさすがに無謀すぎる。 もっと難易度の低そうな言語はないか。 そこでLisp。 カッコだらけだけど、パースするのは簡単にできる。 さらに、最低限必要な要素も atom eq car cdr cons if quote

    技術も腕力もないけどコンパイラを自作してみた - Qiita
  • Goで社内向け管理画面を楽に作る方法

    Vironとgoaを使って社内向け管理画面を楽に作る方法の紹介 https://golangtokyo.connpass.com/event/92225/ にてLTさせていただきました。

    Goで社内向け管理画面を楽に作る方法
  • Go言語による2年半の新規プロダクト開発とその総括

    "I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)

    Go言語による2年半の新規プロダクト開発とその総括
  • なぜGo言語は成功を収めることができたのか - Googleの人が語る(翻訳) - Qiita

    Goの特徴となぜGoがここまで成功したかをGoogleの方がまとめたスライドがとても「簡潔」で分かりやすかったので、翻訳(要約)してまとめてみました。 Go使いとして、Goの思想を捉えた上で開発を進めていきたいです。 Rob Pike, "Simplicity is Complicated", 2015 なぜGoは成功したか よく挙げられている理由には コンパイルのスピード 実行スピード デプロイ ツール ライブラリ があるが、これらは言語の特徴ではない。 めったに挙げられない理由としては、インターフェースや並行性といった真の言語の特徴がある。 これらは重要ではあるが当の答えではない。 私の答えは、Simplicity(簡潔さ)である。 Java, JavaScript (ECMAScript), Typescript, C#, C++, Hack (PHP)などの話を聞いていると、これ

    なぜGo言語は成功を収めることができたのか - Googleの人が語る(翻訳) - Qiita
    damehuman
    damehuman 2018/06/20
  • Big Sky :: Go 言語の非同期パターン

    Gogoroutine という非同期の仕組みを提供していますが、使い方次第では色々なパターンが実装できる為、初めて goroutine を見た人はどの様な物が正解なのか分からない事があります。以前、このブログでも紹介した事がありますが Go の非同期の仕組みは一見単純な様に見えて実はとても奥深いのです。 Big Sky :: golang の channel を使ったテクニックあれこれ golang の channel は他の言語に見ない独特のパラダイムを開発者に提供します。 単純にスレッド間でメッセージングをするだけでもC言語で書けばそこそこの量になったり、慣れていない人であればど... https://mattn.kaoriya.net/software/lang/go/20160706165757.htm 2012 年に Rob Pike 氏が Google I/O で「Go

    Big Sky :: Go 言語の非同期パターン
  • Go 言語で Websocket を使ったアプリケーションをつくる - Qiita

    はじめに Go 言語の Websocket フレームワーク github.com/trevex/golem を使って Websocket 通信をするアプリケーションをつくってみる Websocket と golem について Go 言語の Websocket ライブラリには golang.org/x/net/websocket や github.com/gorilla/websocket などがある github.com/trevex/golem は軽量な Websocket フレームワーク github.com/gorilla/websocket とかをそのまま使ってもいいけど golem には以下のような機能があって手軽に Websocket 通信するアプリケーションが作れる イベントと関数のルーティング JSON エンコード・デコード ルーム機能 接続型の拡張 エコーサーバーをつくる

    Go 言語で Websocket を使ったアプリケーションをつくる - Qiita
  • Go言語でTCPやソケット通信を多重化,高速化するsmux(ソケットマルチプレクサ)をつくった · THINKING MEGANE

    サーバ間で分散処理を行う際の相互通信におけるボトルネックを解消するため,smux(Socket multiplexer)を開発している. サーバ間の相互通信におけるボトルネックとその解決策 一対のサーバ間で多数のリクエストとレスポンスが送受信され,信頼性の高い通信としてTCPを利用する場合,コネクション確立のオーバーヘッドを排除するために接続の再利用が行われる.しかしながら,クライアントは送信に対する受信を待つ必要があるため,レスポンスまでに幾許かの処理時間を要する状況では送信のキューがたまってしまう.そこで複数の接続を利用することでこれを解消する方法が取られるが,追加の接続はリソース使用に関するオーバーヘッドを発生させてしまう.なにより各接続におけるレスポンス待ち時間は依然として解決しておらず,接続の利用面から見て非効率である.そこで,単一の接続において,仮想的に並行送受信を行う方法が提

    Go言語でTCPやソケット通信を多重化,高速化するsmux(ソケットマルチプレクサ)をつくった · THINKING MEGANE
  • Go専用対ISUCON兵器 「graqt」を書いた - ps aux | grep serinuntius

    はじめに この記事でも書いたけど、最近ISUCONの面白さに気づいた。 serinuntius.hatenablog.jp 社内ISUCONはRubyで書かれていたけど、家ISUCONでは使用言語が選択できる。 そうなったら、今なら迷わずにGoを選ぶ。 それは、何故かと言うとGoが速いとかそういう理由よりも、GolandというIDEのおかげである。 こいつの補完やらなんやらがとても良くできているので、ソースを読むのも書くのも爆速になるからである。 RubyにもJetbrains製の Rubymine というのがあるけれど、動的言語だからか完全にはコードジャンプできない。 同名のメソッドがあったときには、選択肢が出てユーザにどのメソッドですか?みたいな感じで問いかける感じ。 けど、Golandは型があるからか100%の精度でコードジャンプできる。 そのおかげで、爆速コードリーディングが可能

    Go専用対ISUCON兵器 「graqt」を書いた - ps aux | grep serinuntius