タグ

golangに関するWackyのブックマーク (20)

  • 技術選択編 - #golang で CLI 作るときにいつもつかうやつ - Qiita

    続編 ボイラプレート編 - #golang で CLI 作るときにいつもつかうやつ - Qiita grapi・gex・ery など,今年に CLI を作りまくって見えてきたベストプラクティス集(技術選択編). 基便利パッケージ Cobra - spf13/cobra フラグ処理やサブコマンド・ヘルプメッセージ・補完など,CLI ツールに必要なことはだいたいいい感じにやってくれるライブラリ.有名どころだと docker や kubectl, hugo の実装に利用されている. 使い方イメージ: // cmd/foobar/main.go //---------------------------------------------------------------- func main() { if err := run(); err != nil { fmt.Fprintln(os.

    技術選択編 - #golang で CLI 作るときにいつもつかうやつ - Qiita
  • pkg/errors はもう外すことができないライブラリ - 理系学生日記

    ここ 2 ヶ月くらいずっと golang でバックエンドを書いています。 その中で、絶対に外せないなと思っているものの1つが pkg/errors です。 ぼくがこのライブラリを知ったのは、以下の記事でした。 Golangのエラー処理とpkg/errors Don’t just check errors, handle them gracefully 当時は Golang とは無縁の生活を送っていたので、まさか自分が使うことになるとは思いませんでしたが…。 問題 Golang におけるエラーハンドリングの問題 コンテキスト情報 pkg/errors が解決するもの エラーを取り出す 問題 Golang におけるエラーハンドリングの問題 Golang においては、以下のようなイディオムが多数登場してきます。 if err != nil { return err } 処理でエラーが発生している

    pkg/errors はもう外すことができないライブラリ - 理系学生日記
    Wacky
    Wacky 2018/11/25
    “pkg/errors は、まずこのコンテキスト付けの方法を解決します。 その方法は Java にも良く似ていて、オリジナルの error を cause として、どんどん error を Wrap Up していくというものです。”
  • Big Sky :: Golang だけでやる機械学習と画像分類

    « Let's Encrypt を簡単操作できる CLI、Lego が MyDNS に対応した。 | Main | VimConf 2018 に行ってきた。 » gobrain という Golang だけで実装されたニューラルネットワークを見つけたので遊んでみました。 GitHub - goml/gobrain: Neural Networks written in go https://github.com/goml/gobrain 作りもシンプルですし、扱い方も簡単なのでちょっとしたサンプルを書くのには向いてると思います。例えば FizzBuzz であればこんな感じ。 package main import ( "math/rand" "github.com/goml/gobrain" ) type FizzBuzz []float64 func (fizzbuzz FizzBuzz)

    Big Sky :: Golang だけでやる機械学習と画像分類
    Wacky
    Wacky 2018/11/08
  • Golangの良いところ - Carpe Diem

    概要 Goの良いところってなんだろう?と思ってまとめます。 多分新しいことを知ったら追記していきます。 よく言われるところ コンパイルが速い JavaC++に比べてかなり高速です。 メモリ安全 GoはC言語に近いですが、C言語で問題になっていたメモリ周りは言語側でちゃんとカバーして使う側が意識する必要がなくなってます。 型安全性 LL言語に比べれば。 標準ライブラリの充実 外部ライブラリを使わずとも標準ライブラリでほぼ何でもできます。 学習コストが低く、可読性が高い 言語の仕様がシンプルなので、他の言語に比べてすぐに一通り理解できます。 gofmt 先程の可読性に関連しますが、フォーマッターがデフォルトで付いているので読みやすくなります。 タブかスペースかといった宗教論争をせずに済みます。 標準ツールの充実 pprofでプロファイリング race detectorでgoroutineによ

    Golangの良いところ - Carpe Diem
    Wacky
    Wacky 2018/10/28
  • 動け!Golang 〜圧倒的IoTツール開発へようこそ〜

    「――くやしくって死にそう。」 このままこの子達を公開できなかったら。 IoTベンチャーを起業して2年。製品だけがIoTじゃない! 裏でうごめくIoTツール達の開発をこの機会に一挙大放出\(^o^)/ ・[メイン]工場で動け!最強のIoTツール (net/http, gatt, go-bindata-assetfs...) ・基板の検査?それiOS(Swift, CoreBluetooth)でできるよ! ・工場でのID管理、シールプリンターを外部制御でIoT化(Windows10 ,IE11 ,JS) ・IoTの実験ツールで効率化!(Google Apps Script, Swift, CoreBluetooth) ・プロトタイプ開発ならRaspberry Pi(PaSoRi, Python, Node, RxJS) ・ゼロから始めるバイナリ生活(Ruby, Python, Perl) ・

    動け!Golang 〜圧倒的IoTツール開発へようこそ〜
  • GolangでSSHサーバを作ってみる

    ユーザが接続先を意識しないSSHプロキシサーバを作っている話

    GolangでSSHサーバを作ってみる
  • 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 言語の非同期パターン
    Wacky
    Wacky 2018/06/01
  • Go言語でTCPやソケット通信を多重化,高速化するsmux(ソケットマルチプレクサ)をつくった · THINKING MEGANE

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

    Go言語でTCPやソケット通信を多重化,高速化するsmux(ソケットマルチプレクサ)をつくった · THINKING MEGANE
    Wacky
    Wacky 2018/05/04
  • Linuxのユーザーランドをinitから全てまるごとgolangで書く

    Infinite Debian - Platform for mass-producing system every second

    Linuxのユーザーランドをinitから全てまるごとgolangで書く
  • 組み込みLinuxでのGolangのススメ

    コンテナを突き破れ!! ~コンテナセキュリティ入門基礎の基礎~(Kubernetes Novice Tokyo #11 発表資料)

    組み込みLinuxでのGolangのススメ
    Wacky
    Wacky 2018/04/05
  • GoバイナリのGitHubリリース: gobump + ghch + goxz + ghr - ゆううきメモ

    最近は、GoバイナリのGitHubリリースにgobump、ghch、goxz、ghrを利用している。これらのツールを組み合わせることで、repairableな形でリリース作業を自動化できる。 GoバイナリのGitHubリリースに一般的に必要な一連のプロセスを分解すると、下記のようになる。 バージョニング CHANGELOGの生成 クロスコンパイル: LinuxOSXWindows用バイナリの作成など パッケージング: tar.gzの作成など GitHub Releaseへのアーカイブアップロード 各ステップを担当するミニマムなツールを組み合わせ、一連のプロセスを実行できる。*1 gobump: https://github.com/motemen/gobump バージョニング ghch: https://github.com/Songmu/ghch CHANGELOGの生成 goxz:

    GoバイナリのGitHubリリース: gobump + ghch + goxz + ghr - ゆううきメモ
    Wacky
    Wacky 2018/03/31
  • Big Sky :: Golang と Vue.js で簡単なアプリケーションを作ってみた。

    GoVue.js を使ってどれくらいシームレスにウェブアプリを作れるかを確認したかったのでタスク管理アプリを作ってみた。サーバは Go なので vue-cli や webpack 等は使わない。全て CDN から。Vue.js でアプリのベースを、UI コンポーネントとして Element、Ajax ライブラリとして axios を使った。 以前、Riot.js を使って Todo アプリを作った時はサーバ作るのにも少し時間が掛かったので、今回は横着して echo-scaffold を使った。 GitHub - mattn/echo-scaffold README.md Echo Scaffold Echo Scaffold is CLI to generate scaffolds for the echo framework. https://github.com/mattn/ec

    Big Sky :: Golang と Vue.js で簡単なアプリケーションを作ってみた。
    Wacky
    Wacky 2018/03/30
    “サーバは Go なので vue-cli や webpack 等は使わない。全て CDN から。Vue.js でアプリのベースを、UI コンポーネントとして Element、Ajax ライブラリとして axios を使った。”
  • Linuxのユーザーランドをinitから全てまるごとgolangで書く - Qiita

    gokrazy を試してみました。 gokrazyとは https://gokrazy.org/ "gokrazy is a pure-Go userland for your Raspberry Pi 3 appliances" Linuxのユーザーランドをinitから全てまるごとgolangで書いてあるシステムで、しかもコマンド一発でRaspberry Pi 3用にビルドして、ブートするSDカードを作成してくれます。 Quick startの手順通りにSDカードを作って動作することを確認しました。 (ただし、host名gokrazyの解決ができなったので、別の方法でラズパイのIPアドレスを特定してIPアドレス直接指定で、そこで動くWebサーバに接続しました。) びっくりする小ささ SDカード上に作られたルートファイルシステムを見てみました。 $ df -h . Filesystem S

    Linuxのユーザーランドをinitから全てまるごとgolangで書く - Qiita
  • 組み込みLinuxでGolangのススメ - Qiita

    一年近く、組み込みLinuxでのユーザープロセスをgolangで書くことを試していたのですが、これはいける! という感触を持ちました。 仲間を増やしたいと思うので、ここにその情報を紹介します。 #何をしたか 既存の製品をベースにして、新機能の実装をGolangで書いてみました。 既存の部分はCで書いてあります。Golangで書いた新機能部分は別プロセスになっています。 既存部分とのやりとりは場面によって以下を使い分けました。 cgoによる関数呼び出し UNIXドメインソケットの通信 シグナル Golangで書いた部分には以下の要素を含みます。 UARTやi2cで接続されたセンサーからデータを受け取る インターネット上のWebサービスAPIを使用する 2Dグラフィックスの描画 (cairoを使用) 最大性能を目指すよりも、十分な性能を手早く形にすることを重視しました。 #Golangでよか

    組み込みLinuxでGolangのススメ - Qiita
    Wacky
    Wacky 2018/01/22
    “意味不明のクラッシュが発生することがなく、デバッガは不要だった。(例えば、sliceの範囲を超えたときにはpanicになってスタックトレースが出力される)”
  • goでWebサーバを書くためのシンプルなライブラリchiの紹介 - Qiita

    この記事は Go3 Advent Calendar 2017 の13日目の記事です。 はじめに goでwebサーバを書く際にはいろいろやり方がありますが、ざっくり分けて以下のような感じだと思います。 net/http で十分。必要に応じてルーティングに gorilla/mux 使ったりする 軽めのwebフレームワークを利用する。 gin, echo, gojiなどを使う 全部入りのrailsみたいなやつが欲しい。Revel などを使う パフォーマンスとか書きやすさとかそれぞれ違うので、各自好きなの使えばいいと思います。ちなみに自分は、一つ前のプロジェクトでは gojiを使っていて、今はechoを使っています。 個人的にはechoよかったんですが、 GoogleAppEngineで go1.8と echoのver.3以降で使おうと思うとcontextの扱いがいまいちきれいに書けない感じになり

    goでWebサーバを書くためのシンプルなライブラリchiの紹介 - Qiita
    Wacky
    Wacky 2017/12/13
  • 【翻訳】goroutine の仕組み - まるまるこふこふ

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

    【翻訳】goroutine の仕組み - まるまるこふこふ
    Wacky
    Wacky 2017/12/07
    “OSから見れば、Go のプログラムは、イベント駆動の Cプログラムのように振る舞います。”
  • 100万回のWebSocket接続とGo | POSTD

    こんにちは。私はSergey Kamardin(セルゲイ・カマルディン)です。Mail.Ru(ロシアの電子メールサービス会社)で開発者をしています。 この記事では、どのように私がGoを使って高負荷対応のWebSocketサーバを開発したかについて説明したいと思っています。 パフォーマンス最適化のアイデアやテクニックを通じて、WebSocketの知識はあるもののGoについてはほとんど知らないという方のお役に立てれば幸いです。 1. はじめに まずは開発に至った経緯について、どうして私たちがこのサーバを必要としたのかを説明しておきましょう。 Mail.Ruには多くのステートフルなシステムがあります。ユーザのeメール保存もその1つです。システム内、およびシステムイベントの状態変更を追跡する方法にはいくつかの種類がありますが、それらは主に状態変更に関するシステム通知、または周期的なシステムのポーリ

    100万回のWebSocket接続とGo | POSTD
  • Go言語の浮動小数点数のお話

    元ネタ: [JavaScriptの問題] var a = 0.3 - 0.2; var b = 0.2 - 0.1; var c = a==b; cの中身はどれ? — RAO(らお)@けもケP-31 (@RIORAO) 2017年10月24日 正確な実数計算をやらされるJavaScriptくん #擬竜戯画 pic.twitter.com/ipE56C2YbV — RAO(らお)@けもケP-31 (@RIORAO) 2017年10月26日 コンピューターで浮動小数点数を扱ったことのある人なら一度は経験する、 数学上の計算とコンピューター上の計算が合わない計算の一例ですね。 この件に関して、Go言語では正しく(=数学的な結果と同じように)計算できるとの情報が。 おそらくGoはコンパイラがa=0.1とb=0.1に変換していると思われます。 添付した画像のコードだとtrueになりますが、const

    Wacky
    Wacky 2017/10/29
    “有効桁数150桁程度という予想通りです。”
  • Go言語のリアルタイムGC 理論と実践 | POSTD

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

    Go言語のリアルタイムGC 理論と実践 | POSTD
    Wacky
    Wacky 2017/04/28
    “最近、Goチームによる「GCの一時停止時間を1ms以下にする改良」の発表に関していろいろな噂や情報が飛び交いました。”
  • GoConで発表してきたのでついでにruntime以下の知識をまとめていく #golang #goroutine - niconegoto Blog

    3/25に行われたGoConで"How Communicating Sequential Goroutines Work"という発表をしてきました。 当初僕はCommunicating Sequential Processesについての話しをする予定だったのですが、時間内にとても発表できそうな内容ではなかったため、Concurrency全般についての話をしました。 そのため、ここではその際触れられなかったgoroutineの実装の話しやCSPの話しなどを含めてGoのruntimeについて何回かに分けてまとめていきたいと思います。今回は主にgoroutineについてです。 GoのConcurrency goroutineの説明に入る前にざっくりGoのConcurrencyについて説明します。 以下、GoConでの発表スライドにざっくりと沿いながら書いていきます。 speakerdeck.co

    GoConで発表してきたのでついでにruntime以下の知識をまとめていく #golang #goroutine - niconegoto Blog
    Wacky
    Wacky 2017/04/12
    “goroutineを知るためにはsrc/runtime以下を読まなければいけません。”
  • 1