タグ

golangに関するwushiのブックマーク (37)

  • Goを学びはじめるのに参考になるサイト - Qiita

    少し高度な自動化/テストツールの開発や、簡単にRESTサーバの開発に利用できないか、と思って、Goを少し学び始めました。 Goを学び始めるときに、自分なりに役に立ったサイトをまとめておきます。 公式サイト/日語訳サイト The Go Programming Language Go家サイト。Go自体のダウンロードなどはこちらから。 golang-jp 公式サイトの日語訳のサイト。 プログラミング言語 Go ドキュメント 公式サイトのドキュメント(https://golang.org/doc/) の日語訳。golang-jp では翻訳されていないものを参照するときに便利。 リファレンス Effective Go GoらしいプログラミングをするためのTips集。 日語訳は、こちらを参照すると良い。 Go Code Review Comments Goで書かれたコードをレビューする際の

    Goを学びはじめるのに参考になるサイト - Qiita
  • 【Go】structにデフォルトの値を設定したい - /dev/null

    Golangでstructを生成するときにこのフィールドは特定の値で初期化してほしい、みたいな場合があります。 例えば検索に使うパラメーターオブジェクトのような。 package main import "fmt" // sturct type UrlParam struct { Keyword string Format string } func main() { param := UrlParam{} param.Keyword = "golang" param.Format = "json" fmt.Println(param) } Keywordは都度設定したいですが、formatに関してはデフォルトがjsonになっていてほしい。 変えたければxmlとか指定したい。 intなどは0で初期化されますが、stringの場合は空文字列です。 こういう場合は普通にコンストラクタっぽいもの

    【Go】structにデフォルトの値を設定したい - /dev/null
    wushi
    wushi 2017/08/18
  • AWSで秘密定数を外部に公開せず環境変数として定義するためのGo製ツール、「ssm2env」作った

    ssm2env - Environments injection tool for AWS EC2, with SSM (EC2 Parameter Store). 詳細環境ごとに異なる秘密情報をAPIに渡す際、その管理方法は、twelve-factor appにもある通りデプロイ対象のサーバー内部の環境変数として定義するべき。 ただ、自動化されたデプロイフローでは、どういった手順で秘密情報を渡せばいいか悩むことが多い。 自分が考えた範囲では、 1. AWSのSSMにTerraform経由*1でシークレットな変数を設定 2. APIのデプロイ時にSSMから特定prefixのついたパラメーターを取得 3. パラメーターを全て環境変数として読み込ませる 4. APIが起動する際に秘密情報を定数として環境変数から読み込む*1) 正確にはCircleCIの環境変数設定に事前に入れた状態で、Circ

    AWSで秘密定数を外部に公開せず環境変数として定義するためのGo製ツール、「ssm2env」作った
  • A Tour of Goを終えたあなたにおすすめのGoを勉強するためのリソース - すずけんメモ

    今年も夏のインターンで学生にGoの講義をします。多く寄せられる質問が「A Tour of Goを終えたのですが、その後に何をやるのがおすすめですか?」というものです。学生に限らず、言語を学ぶ方はプログラミングそのものに対する慣れやバックグラウンドも違います。そこでなるべくいろんな方の参考になるように、おすすめななりページなり方法なりをまとめてみます。 わりと多くの人におすすめ 「プログラミング言語Go」(Alan A.A. Donovan, Brian W. Kernighan著)です。通称GOPL。 http://www.gopl.io/ 柴田さんによる日語翻訳もあります。 https://www.amazon.co.jp/dp/4621300253 Go言語のイントロダクションから始まり、型・インタフェース・並列性の説明などが丁寧にかかれています。私がGOPLを良いと思う点は、例示

    A Tour of Goを終えたあなたにおすすめのGoを勉強するためのリソース - すずけんメモ
    wushi
    wushi 2017/07/21
  • Google、プログラミング言語「Go 2」開発計画発表

    Goプロジェクトチームは7月13日(米国時間)、「Toward Go 2 - The Go Blog」において、次期メジャーアップグレードバージョンとなる「Go 2」へ向けた基計画を発表した。どのような問題を解決することを目指してGo 2へ向かっていくのか、実際にどのような工程でGo 2のリリースへと進めるのかを説明している。 Goは登場直後は大きな話題を集めたが、その後あまり注目されなくなってしまった。しかし、Goは確実に開発を重ね、Googleをはじめいくつものプロジェクトで採用されていった。現在では、企業システムの開発においても重要なプログラミング言語になりつつあり、特に2016年後半辺りから露出を増やしている。今後も利用の増加が見込めるプログラミング言語とみられてる。 Goプロジェクトチームはこれまでの開発経験や運用経験から問題点を洗い出し、Go 2で解決したい項目として挙げてい

    Google、プログラミング言語「Go 2」開発計画発表
    wushi
    wushi 2017/07/16
  • なぜCLIツールはGoで書くべきなのか? Go beyond Python

    Goは興味あるけど、会社は(Python|Ruby|PHP|Perl|Java|C#)だからなぁ」というあなた。 個人的なCLIツールを、Goで書き直してみたらいかがでしょう? GoはLL並に書きやすいだけでなく、LLには無い優れた特徴を兼ね備えた言語なのです。

    なぜCLIツールはGoで書くべきなのか? Go beyond Python
  • Raspberry PiとGo言語でミニトマトの栽培環境を監視してLINE Botで通知する - ぐるなびをちょっと良くするエンジニアブログ

    こんにちは。ビジネスソリューション開発グループ チャネルソリューションチームの長谷川と申します。 家庭菜園としてミニトマトの栽培を始めました。 せっかくの機会なので、温度、湿度と土の水分量をRaspberry Piで監視し、LINE Botを通じてLINEのタイムラインに通知する仕組みを作りました。 使ったもの Raspberry Pi2 Model B GW-USNANO2A Soil Moisture Sensor MCP3008 BME280 Raspberry Pi2 Model B Amazonで¥4,000前後です。 GW-USNANO2A プラネックス製の無線LAN子機。Raspbery Pi2は無線LANが搭載されていないため、USBタイプの子機が必要となります。Amazonで¥990くらいです。 Soil Moisture Sensor アナログの土壌の湿度センサーです。

    Raspberry PiとGo言語でミニトマトの栽培環境を監視してLINE Botで通知する - ぐるなびをちょっと良くするエンジニアブログ
  • Go言語のリアルタイムGC 理論と実践 | POSTD

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

    Go言語のリアルタイムGC 理論と実践 | POSTD
  • Go が他の多くの言語での非同期プログラミングよりも優れている理由 - Qiita

    はじめに 非同期プログラミングと呼んでいるのは、ノンブロッキングIOと select, poll, epoll, kqueue のようなIO多重化を利用したネットワークアプリケーションを書くことです。 node.js で websocket 使ったチャットを書くとかそういうのです。 「他の多くの言語」とは、 Python (asyncio), node.js, C# などを想定しています。 Erlang や GHC なんかは Go に近いかも知れません。 async / await がない言語では、「コールバック地獄」や「deferred地獄」のような問題もありますがこの記事では扱っていません。 async / await のメリットを解説した他の記事を参照してください。 あとこの記事は主にランタイムに関する部分を扱っているので、「それは言語じゃなくて処理系の問題だ!」等の頓珍漢な揚げ足取

    Go が他の多くの言語での非同期プログラミングよりも優れている理由 - Qiita
  • Go言語のFunctional Option Pattern - Qiita

    オプション パッケージを作る際、柔軟性を持たせるためにオプションを持たせたい時がしばしばあります。 しかしオプションは知っての通り設定しないことが少なくありません。 単にコンストラクタに並べるようでは無用な複雑さをはらむことになります。 JavaなどではOptional Parameterなどのように、デフォルト値が指定できる機能があります。 機能の厳選されたgo言語ではそのような機能はありませんが、 "Self Referential Functions Design"というテクニックがあり、 それについての記事がRob Pike氏の記事を筆頭にいくつか説明されています。 オプションと相性が非常に良いため、合わせて"Functional Option Pattern"とも呼ばれています。 Dave Cheney氏の記事を参考におおまかに説明したいと思います。 様々な解決策 あるServe

    Go言語のFunctional Option Pattern - Qiita
    wushi
    wushi 2017/04/02
  • Go でつくる汎用言語処理系 実装戦略

    General-purpose Programming Language implemented with Go and LLVM. Presentation at Go Con Spring 2017

    Go でつくる汎用言語処理系 実装戦略
  • golang プロセスのモニタリングってみんなどうしてるんですかね、という話 - tokuhirom's blog

    [9:43 AM] tokuhirom plack のアプリだと Plack::Middleware::ServerStatus::Lite とかで監視したりしますけど、go だとそういうのってどうやるのが一般的なんでしょうか? [9:47 AM] macopy https://github.com/fukata/golang-stats-api-handler github.com GitHub - fukata/golang-stats-api-handler: Golang cpu, memory, gc, etc information api handler. golang-stats-api-handler - Golang cpu, memory, gc, etc information api handler. [9:47 AM] https://golang.org/pk

  • Goではじめてみたブラウザの自動操作 - Qiita

    はじめに 面倒なWEBブラウザの定型作業を自動化したくて。 WEBブラウザの自動操作には定番のSeleniumを利用する。 Seleniumは主にウェブブラウザのテストに利用されているが、テスト用途以外でも利用はできる。 なおウェブスクレイピングが目的であれば、scrapeとかgoqueryなどを利用するほうが簡単。 それでもSeleniumを利用するのは、 実際のブラウザが利用できるという点であり、以下のような利点があると思っている。 IEなど特定のブラウザのみをサポートしているサイトの自動操作 ごりごりのJavascriptやFlashを利用されているサイトの自動操作 証跡として画面のスクリーンショットを取得できる 前提知識 WebDriverを介することで、スクリプトとしてJava,C#,Pythonなど多くの言語から利用できる ブラウザごとにWebDriverが用意されており、1つ

    Goではじめてみたブラウザの自動操作 - Qiita
  • golang で正規表現クロスワードを解く - Qiita

    この記事は Go Advent Calendar 2016 最終日の記事になります。参加頂いた皆さんお疲れさまでした。 今年も昨年に引き続き、25人以上の方が「何か書きたい」と名乗り出て頂き、gogo2、go3 の3(2年連続)、計75エントリが揃う事になりそうです。Go 言語の人気が高まってきているのが良くわかるアドベントカレンダーでした。 あらすじ 普段あまり表だった所には姿を現さないのですが、今年は builderscon 2016 に登壇させて頂きました。 とても新鮮な体験で、味わった事のない緊張の中、いろいろな反響を貰いました。いい体験が出来たと思います。ありがとうございました。登壇し終えて数時間はなんだか緊張のほぐれた変な感じを味わっていました。懇親会の時あたりでようやく皆さんとお話する事ができて Vimmer の皆さんと Vim 談義をしてきました。 その懇親会で香り屋さ

    golang で正規表現クロスワードを解く - Qiita
  • Go でロックする - Qiita

    はじめに この記事はGo Advent Calendar 2016 の17日目の記事です。 並行処理をする時にはロックが重要になります。 GoではchannelとMutexという仕組みを提供しています。 この記事では色々なロックを作りたいと思います。 tl;dr channelでロックを作ることは有意義です。 ただ、Mutexのほうが良いこともあります。 良い方法を選びましょう ロック無し ロックの意味を確かめるためにも、まずはロック無しのコードから始めます。 func main() { counter := 0 for i := 0; i < 1000; i++ { go func() { counter++ fmt.Print("*") }() } time.Sleep(3 * time.Second) fmt.Printf("\n%d\n", counter) } この関数を実行する

    Go でロックする - Qiita
    wushi
    wushi 2016/12/17
  • GoでたたくTCPソケット(後編)

    ソケットの使い方そのものはシンプルです。 繋いでしまったら、書き出し、読み込み、クローズしかありません。 APIリファレンスを読めれば、とりあえず使うことはできるでしょう。 ですが、ソケットまわりのパフォーマンスはユーザの体感に直結します。通信が切れる、タイムアウトなどのエラーが発生する可能性も多々あります。 最大の効率を得るには、ボトルネックを中心に最適化を行うしかありません(これは『ザ・ゴール』というビジネス書で「制約理論」として示されている問題でもあります)。 今回は、前回に引き続き、HTTPの機能を再現しながらソケットの使い方について学んでいきます。 HTTPの歴史を通して、ソケットの実行効率を向上させる方法を具体的に見ていきましょう。 圧縮 HTTPの速度アップ手法としてよく使われているのが圧縮です。 昔よりもインターネットやWifiの性能は向上しましたが、それでもCPUを使って

    GoでたたくTCPソケット(後編)
  • ssig33.com - Docker で Go で作ったバイナリを実行するなるべく小さいコンテナを作る

    Go でアプリケーションを作ると、そのまま他になにもなくとも実行できるバイナリが出来あがります。この特性によりデプロイが大変楽です。 このような特性があるので、 Go を使う場合 Docker のようなオーケストレーションツールを使わなくても多くのサーバーにアプリをデプロイしていくことも可能かと思われますが、そこはまあ Docker という巨人に乗っておくと楽なことが多いです。具体的には swarm と docker-compose が便利なので Docker 上で実行したい。 ここで問題となってくるのが何も考えずに Docker イメージを作るとイメージサイズが膨れあがってしまってシングルバイナリによる手軽さなどが損なわれてしまうという点です。 たとえば golang:alpine のような比較的小さいイメージを使ってもファイルサイズはバイナリサイズ + 300MB ほどにもなってしまい

  • Big Sky :: golang の channel を使ったテクニックあれこれ

    golang の channel は他の言語に見ない独特のパラダイムを開発者に提供します。 単純にスレッド間でメッセージングをするだけでもC言語で書けばそこそこの量になったり、慣れていない人であればどう実装すればいいか分からないなんて事もあったと思います。しかし golanggoroutine/channel は、やっている内容の割にとても容易にスレッド間通信やキューイング、処理の受け待ち等を実装できる様になっています。尚、channel をどの様に適用したら良いかについては以下を参照下さい。 Big Sky :: Golang の channel の使い所 golang の特徴と言えば goroutine と channel ですが、その使いどころに悩む人もおられる様です。 goroutine は非同期に実行される処理、channel はその grout... http://mat

    Big Sky :: golang の channel を使ったテクニックあれこれ
    wushi
    wushi 2016/07/07
  • DockerとSwarmで既存アプリをサーバーレス化してみよう! - Qiita

    以下でポイントごとにソースを見る/比較を行ってみます。 ポイント リクエスト処理部分 voting appとresult appという2つのサービスで処理していたのを、 entrypointというサービスで受け、それぞれ担当するDockerコンテナを起動するという形になります。 リクエスト処理部の違い voting appとresult appはそれぞれ何の変哲もないWebアプリです。 (voting appがPython/Flask、result appがNote.js/expressで作られている) 対して、entrypointもWebアプリ(Go言語)なのですが、net/httpでリクエストを受け、 go-dcgiというライブラリでDockerコンテナを起動するようになっています。 この部分のソースを見てみましょう。 非常に短いですので全文掲載しています。(コメントは私が追記したもの

    DockerとSwarmで既存アプリをサーバーレス化してみよう! - Qiita
  • golang は ゆるふわに JSON を扱えまぁす! — KaoriYa

    以下のツイートにもある通り、一見 golang は struct を定義しないと JSON を扱えないように見えます。他にも似たようなツイートをチラホラと見かけましたが、それらは全部誤解です。そこでこの記事では、golang でゆるふわ (structを定義せず) に JSON を扱う方法を紹介します。 golangrubyのようにゆるふわにJSONは扱えない? https://t.co/olsryDHc5G — bamchoh (@bamchoh) 2016年6月24日 この記事では入力の json.Unmarshal() を取り扱いますが、出力の json.Marshal() にも応用できます。 TL;DR json.Unmarshal() には *interface{} を渡せます interface{} は dproxy を使うと、値のアクセスで楽ができます json.Unmar