タグ

Golangに関するhohoho_ho2005のブックマーク (1,266)

  • Go製マイグレーションツールまとめ - Qiita

    2017/01時点 今回比較しなかったもの https://github.com/tanel/dbmigrate https://github.com/BurntSushi/migration https://github.com/Boostport/migration https://github.com/github/gh-ost https://github.com/wawandco/transporter https://github.com/GuiaBolso/darwin https://github.com/DavidHuie/gomigrate https://github.com/go-gormigrate/gormigrate https://github.com/pravasan/pravasan https://github.com/eure/kamimai lia

    Go製マイグレーションツールまとめ - Qiita
  • Big Sky :: golang の http.Client を速くする

    « Windows からも ssh でリモートコマンド実行したい、それ golang で出来るよ | Main | Re: Go でシングルバイナリな Web アプリを開発しているときに webpack --watch をうまいところやる » この記事には幾らか正しくない部分がありました。後で訂正していきますが、ひとまず shogo82148 さんの解説記事も確認下さい。 http.Client はリクエスト毎に名前を引くので連続したアクセスはあまり速くない。 Goのhttp.Clientで名前解決結果cacheする楽な方法ないかな — fujiwara (@fujiwara) December 7, 2016 Go 1.8 からは Resolver が提供されるので、自前で簡単に名前引きのキャッシュを実装出来る。 Go 1.9 だった様です。 Go 1.8 Release Notes -

    Big Sky :: golang の http.Client を速くする
  • Unixドメインソケット (1/2)

    今回はソケット通信の最終回ということで、Unixドメインソケットについて紹介します。 UnixドメインソケットはPOSIX系OSで提供されている機能です。 コンピュータ内部でしか使えない代わりに、高速に通信が行えます。 TCP型(ストリーム型)と、UDP型(データグラム型)の両方の使い方ができます。 WindowsではこのUnixドメインソケットをそのまま使うことはできません。 似た概念の機能として、「名前付きパイプ」というものが存在します。 以降の説明では、まずUnixドメインソケットについて説明したあとで、 Windowsの名前付きパイプについても説明します。 (Windowsメインの方は、前半のUnixドメインソケット固有の説明については軽く流して読んでください。) Unixドメインソケットの基 TCPとUDPによるソケット通信は、外部のネットワークに繋がるインタフェースに接続しま

    Unixドメインソケット (1/2)
  • GolangのhttptestでHTTP2を使う - Qiita

    GolangGo1.6でHTTP2をサポートした. また2017年2月にリリース予定のGo1.8ではServer Pushを行うためのメソッドも新たに追加される(使い方は HTTP/2 Server Push · Go, the unwritten parts が詳しい). 今後GolangでのHTTP2の利用はさらに増えると考えられる. HTTP2を使うアプリが増える分そのテストも重要になる. Go1.6におけるHTTP2サポートは素晴らしくAPIの変更なしにサポートが行なわれた. Server側でh2を有効にするにはListenAndServeTLSで起動すればよいしClientもDefaultClientを使えばよい. Golangでサーバーのテストをするときはhttptestパッケージが主に利用されるが,これほど簡単に使える訳ではない. 以下のように軽く設定を入れる必要がある.

    GolangのhttptestでHTTP2を使う - Qiita
  • GoのnetパッケージにおけるIPアドレスの内部表現 - Qiita

    // IP address manipulations // // IPv4 addresses are 4 bytes; IPv6 addresses are 16 bytes. // An IPv4 address can be converted to an IPv6 address by // adding a canonical prefix (10 zeros, 2 0xFFs). // This library accepts either size of byte slice but always // returns 16-byte addresses. package net // IP address lengths (bytes). const ( IPv4len = 4 IPv6len = 16 ) // An IP is a single IP address,

    GoのnetパッケージにおけるIPアドレスの内部表現 - Qiita
  • Writing An Interpreter In Goを読んだ

    Thorsten Ballによる“Writing An Interpreter In Go”を読んだ. 技術界隈のブログを見ているとたまにSteve Yeggeの「If you don’t know how compilers work, then you don’t know how computers work」という言葉に出会う.その度に学生のときにコンパイラの授業を受けなかったこと後悔し,社会人になって挑戦しようとして挫折したことを思い出して悲しい気持ちになる.@rui314さんのCコンパイラをスクラッチから開発してみたを読んではかっこいいなと思いつつ僕には無理だなあと心が折れていた. どの言語を書いていてもコンパイラ(もしくはInterpreter)は切っても離せないものであり内部の動きがどうなっているかを知っておきたいという欲求はプログラマーなら誰しもあると思う(少なくとも僕に

  • Go Meta Linter がサポートするツールまとめ - SideCI TechBlog

    こんにちは、id:Pocke です。 この記事では、Go Meta Linter がサポートするツールについて記そうと思います。 Go Meta Linter とは Go Meta Linter とは、Go言語で使用できるLinterをまとめて実行することが出来るツールです。 そのため、Go Meta Linterは多くのGoのツールに依存しています。 この記事では、その依存している各ツールがどのような機能を持つのかを述べようと思います。 なお、既に Go の CI で lint と カバレッジ回して非人間的なレビューは自動化しよう in 2016年 - haya14busa という素晴らしい記事があるため、そちらで説明されているツールに関しては適宜この記事へのリンクを貼っています。 上記の記事で言及されていないツールを重点的に説明させていただきます。 Check 三兄弟 レポジトリ: o

    Go Meta Linter がサポートするツールまとめ - SideCI TechBlog
  • ピーマンとハトと数学を Go 言語で試す - Qiita

    はじめに 先日 NHK ETV で放送された "大人のピタゴラスイッチ" で "ピーマンとハトと数学" と題して "ピーマンの袋がどれもほぼ同じ重さになる仕組み" について解説があり面白かった。 ピーマンの袋がどれもほぼ同じ重さになる仕組み 12個のピーマンを "組み合わせ計量装置" の上に置くと 150g になる組み合わせを計算して排出する仕組みになっている。 "組み合わせがない場合もあるのでは?" という問に対しては "98% の確率で組み合わせがあることが数学が保証している" ということ。 "98%" の根拠が知りたかったが確率の計算がわからなかったので、実際に Go 言語で試して検証してみることにした。 解法 とりあえずすぐ思いついたのは愚直に全組み合わせを試すパターン。 togetter みてたら "subset sum" というキーワードが出てきたので検索。 部分和問題 という

    ピーマンとハトと数学を Go 言語で試す - Qiita
  • GCPのAEでGoの環境設定のメモ - Qiita

    $ gcloud components install gae-go # だめだった You have specified individual components to update. If you are trying to install new components, use: $ gcloud components install gae-go Do you want to run install instead (y/N)? y WARNING: Component [gae-go] no longer exists. WARNING: The standalone App Engine SDKs are no longer distributed through the Cloud SDK (however, the appcfg and dev_appserver com

    GCPのAEでGoの環境設定のメモ - Qiita
  • Goでのstreamの扱い方を学ぶ - Carpe Diem

    概要 結論から言うと、Streamで扱っているものはStreamのまま扱うです。 具体的にはio.Readerを毎回ioutil.ReadAllで[]byteに変換せずにそのまま使いましょうです。 なぜStreamを使うべきか Node.jsの例ですが、こちらで非常に分かりやすく説明されています。 yosuke-furukawa.hatenablog.com それを踏まえて考えてみると、Goの場合以下の2つが大きいと思います。 1. メモリの効率化 ioutil.ReadAllなどで一旦全て[]byteに変換すると、その分メモリを消費しますし、アロケーションやGCに依る速度低下が起きます。 一方io.Readerやio.Writerは各chunkの処理に同じバイトを使いまわすので、メモリの効率が良いです。 2. 標準パッケージの多くがio.Readerをサポートしてる io.Reader、

    Goでのstreamの扱い方を学ぶ - Carpe Diem
  • ザ!鉄腕エンジニア! 「GO言語でWEBサーバを作れるか!?」「どのレベルで作るの?」

    2017/01/04に株式会社ビズリーチで開かれた勉強会で使用された資料です。

    ザ!鉄腕エンジニア! 「GO言語でWEBサーバを作れるか!?」「どのレベルで作るの?」
  • Goの抽象構文木(AST)を手入力してHello, Worldを作る #golang - Qiita

    はじめに タイトルを見て、「はて?何を言ってるんだろう」と思った方もいるでしょう。 その通りです。通常、抽象構文木(AST)を取得するには、「ASTを取得する方法を調べる」で解説したように、go/parserパッケージの関数を使ってソースコードをパースする必要があります。 しかし、この記事では温かみのある手入力をすることで、日頃なんとなく取得しているASTがどういうノードで構築されているのか、最低限必要なフィールドは何なのかということを改めて知ることを目的としています。 なお、この記事を書いた時のGoの最新バージョンは1.7.4です。 今回作るコード 今回はかのプログラム言語Cやプログラミング言語Goで有名なHello, Worldを出力するプログラムを作りたいと思います。 具体的には、以下のようなコードです。 なお、せっかくなので、ここではGoっぽく、Hello, 世界としています。 p

    Goの抽象構文木(AST)を手入力してHello, Worldを作る #golang - Qiita
  • Go言語でTodoistのCLIクライアントを作ってみた - Qiita

    ブログのコピペです。 Go言語でTodoistのCLIクライアントを作ってみた Todoist というWebアプリケーションのタスク管理ツールが大好きで一年くらい使っている。 以前はddksr/cliistを使用してCLIで操作できていたのだが、Todoist APIのバージョンアップに伴い、使用できなくなってしまった。 アップデートをするようなのだが、いつになるか待つのも面倒だし、Go言語触ってみたかったので練習がてら新しくTodoistのCLIクライアントを作ってみたので紹介。 作成メモみたいなのはまた今度書く。 レポジトリ sachaos/todoist: Todoist CLI Client. I ❤️ Todoist and CLI. 使い方 タスク一覧 $ todoist l 64302291 p1 #Movie A CLOCKWORK ORANGE 64302368 p1 #

    Go言語でTodoistのCLIクライアントを作ってみた - Qiita
  • Goのスコープについて考えてみよう #golang - Qiita

    はじめに Twitterで以下のような投稿をしてみました。 https://twitter.com/tenntenn/status/815807925222412292 この問題は、以下のコード中に存在するスコープの数を聞いている問題です。 package main import "fmt" func main() { const message = "hello, world" fmt.Println(message) }

    Goのスコープについて考えてみよう #golang - Qiita
  • Arukasを使って無料でGo製のslackbotを運用する - きょこみのーと

    はじめに SlackbotをHerokuで一日中動かすと課金が発生するので色々ハックが必要となったりするので、なんとかしたくArukasに出会いました。 今回は、自分が作ったgo製のslackbotを元につくったbotをgithubにpushしてWercker経由でdockerImageを作ってArukasへのDeployを行う方法を紹介します。 github.com 今回のコードとか設定をexampleとして公開してますので、よろしければ参考にしていただければと。 Arukasとは? いまのところ無料でDockerをホスティングできるサービスです。 arukas.io 一応CLIツールも公開されていて、結構便利です。 github.com ※注意点としては、CMDで起動したプロセス監視とかは無いので自分でとかgo-server-starterとかを入れてプロセス死んだときに再起動する仕組

    Arukasを使って無料でGo製のslackbotを運用する - きょこみのーと
  • Go に恋した Vimmer の2016年の振り返り - haya14busa

    この記事では2016年 @haya14busa がやってきた活動,特にVimとかGo 活動をざっくり振り返ります. 個人的な備忘録です.あとポエム. 過去の振り返り記事 1年間『Vim駆動学習』してきて最高に楽しかったのでオススメしたい - haya14busa 2014年の振り返り. またはプログラミング2年目をVimに捧げるとこうなるという話 - haya14busa はてなGoogleインターン行ってイカやりすぎたイカVimmerの2015年の振り返り - haya14busa 今年はざっくりプログラミング & Vimmer 歴 4年目でした. そろそろプログラミングの基礎的なところわかってなくても,まだはじめてそんな経ってなくてまだ勉強できてないんです〜,また今度やっておきますっ! みたいな言い訳が完全に通用しない年になってきた気がします (そもそも実際に言ったことは無い). ま

    Go に恋した Vimmer の2016年の振り返り - haya14busa
  • UDPソケットをGoで叩く

    前回と前々回の記事では、Go言語によるTCPソケットの通信例を紹介してきました。 今回は、ネットワークの解説でTCPと一緒に紹介されることが多いUDPのソケットをGo言語で触ってみます。 今回の記事の概要部分は佐藤貴彦氏、若山史郎氏、小泉守義氏にアドバイスをいろいろもらいました。 ありがとうございます。 UDPが使われる場面は昔と今で変わってきている UDPはTCPと同じトランスポート層プロトコルですが、TCPと違ってコネクションレスであり、誰とつながっているかは管理しません。 プロトコルとしてデータロスの検知をすることも、通信速度の制限をすることもなく、一方的にデータを送りつけるのに使われます。 その際にはパケットの到着順序も管理しません。 TCPとくらべて機能が少なくシンプルですが、そのかわりに複数のコンピュータに同時にメッセージを送ることが可能なマルチキャストとブロードキャストをサポ

    UDPソケットをGoで叩く
  • Google Sites: Sign-in

    Not your computer? Use a private browsing window to sign in. Learn more

  • 再帰呼び出しと関数テーブル

    今回は再帰呼び出しの話。 再帰呼び出しのサンプルとして典型的なのはフィボナッチ数かな。 フィボナッチ数の定義を愚直にコードにするとこんな感じになる。 package main import "fmt" func fibonacciNumber(n int) int { switch n { case 0: return 0 case 1: return 1 default: return fibonacciNumber(n-2) + fibonacciNumber(n-1) } } func main() { fmt.Println(fibonacciNumber(40)) } 一般に手続き型言語は再帰呼び出しに弱いと言われている(関数型のほうが有利)。 特に Go 言語の場合は goroutine に最適化を割り振っている関係で,関数呼び出しやその戻り1 のパフォーマンスが冷遇されている

    再帰呼び出しと関数テーブル
  • Goについて思うこと 2016

    あんまりこういう内容のポエム的なものは広まってほしくないなあ・・と思うのでこっちにひっそり書くことにする。 今年は僕にとってはGoの存在がとても大きい年だった。 5年前、僕が書くのはWebアプリケーションが中心で、PHPをメインで触っていた。それが気がつけばエンジニアリングのレイヤが広がったなあという所感があって、ここ最近Goがそれを加速してくれた。第二の言語としてのGoはとても良くできていて、小回りが聴くし、ミドルウェアをちょろっと書くにも心地よい。やっぱり最近の言語ならではの良さがある。たとえば、 * テストが標準ライブラリに組み込まれている * net/httpがとても良くできている。フレームワークを必要としない場面も多い。 * concurrencyを堅牢に扱える(うまい言葉が見当たらない) * そしてそれなりに速い というのがあげられる。特にgo toolの充実はすごい。Race