タグ

goに関するMonMonMonのブックマーク (157)

  • オススメの標準・準標準パッケージ20選

    Takuya UedaSouzoh, Inc. (affiliated by Mercari, Inc.) - Go Engineer

    オススメの標準・準標準パッケージ20選
  • REST is not only (web) API interface

    RESTだけじゃなくて他にもインターフェイスは色々あるという話です。 「そうだGo、京都。」で発表。 参考リンクは https://gist.github.com/lufia/79a17579be449cf4e9aad790b58db284 に置きました。

    REST is not only (web) API interface
  • golangのファイルへの読み書きのまとめ

    golangである動作を実現しようとするとしても、 たくさんの書き方があってどれが一番合ってベストなのかわかりませんでした。 ドキュメントを見ても良い情報が得られず、情報を収集するのが苦しかったです。 まだ、比較的新しい言語であるので、ブログやQiitaなど、情報が少ないのが原因だと思います そこで、情報のまとめを発信することで、自分の情報整理と同時に、これからgolangを学ぶ人、 また、今まさに学ぼうとしている人にとっての助けとなるようにしようと考え、 ここにI/O関連の取り扱いや使い方についてまとめようと思います 目次読み込み書き込みする方法と手順ファイルへの書き込み読み込みos.Create, os.NewFile, os.Open, os.OpenFileの違い標準入力/標準出力/標準エラーへの書き込み読み込みメモリへデータへの書き込み読み込みbytes.Buffer / byt

  • Error handling patterns in Go

    One of the main strengths of the Go programming language is its error model. It’s not my favorite—that would be something like this—but it’s still one of the best on the market. Much has been already written about best practices for error handling in Go (Error handling and Go and Don’t just check errors, handle them gracefully are both good resources). In this post I will talk about some error han

  • 【登壇資料】Go並行処理パターン実践入門について話してきました #cm_osaka | DevelopersIO

    西田@大阪です。 クラスメソッドの開発を知る!大阪勉強会 第4回 Go&Elixirでつくる分散アプリケーションで スピーカーとして登壇しました。多くの方にご参加いただきありがとうございました! Go & Elixirに興味のある方が、関西にこれほどおられると思っておらず嬉しい誤算でした。 発表資料 発表内に収まり切らなかった部分もございます(申し訳ありません><)ので、参加された方も資料を読んでいただけると幸いです。 感想 冒頭でも触れましたが、Go & Elixirに興味を持っておられる方が多いのが印象的でした。 懇談会では実際にGoを業務で使われている方などのお話が聞けてよかったです。 少しづつGoが広がっていってるなと感じました。 今後も関西でGo & Elixirを少しでも盛り上げていければと思います。

    【登壇資料】Go並行処理パターン実践入門について話してきました #cm_osaka | DevelopersIO
    MonMonMon
    MonMonMon 2017/05/16
    goの実装パターン
  • cgoがGoのコンパイル速度に与える影響 - Qiita

    はじめに (タイトルはScala の機能がコンパイル速度に与える影響にインスパイアされました。) Goのコンパイル速度の速さはセールスポイントの一つです。しかし、そんなGocgoを使い始めるとコンパイルが途端に遅くなります。あんまりこのあたりについて言及しているエントリがないので書いてみることにしました。 このエントリではサンプルプログラムがいっぱい出てくるので以下のリポジトリにまとめました。 また、コンパイル速度の比較もmakeで行えるようになっています。

    cgoがGoのコンパイル速度に与える影響 - Qiita
  • Big Sky :: golang では変数の宣言位置が大事

    今日こんなツイートをした。 @mattn_jp よろしければベターな理由をm(_ _)m 名前空間を短くする作法なのはわかるのですがメモリやGCやコンパイラなど、どの辺に優しい感じですか? — Ryuji IWATA (@qt_luigi) April 5, 2017 qt_luigi さんからどうしてかを聞かれたので説明したいと思います。 golang では宣言した位置で初めて自動変数としてメモリが確保され、ゼロクリアされます。 for i := 0; i < b.N; i++ { var foo Foo bar, err := doSomething() if err != nil { continue } foo.v = bar fmt.Fprintln(ioutil.Discard, foo) } なので例えばこの様なコードで doSomething() が err を返した場合、

    Big Sky :: golang では変数の宣言位置が大事
  • net/httpで作るGo APIサーバー #1

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

  • Goでかんたんソースコードの静的解析

    Takuya UedaSouzoh, Inc. (affiliated by Mercari, Inc.) - Go Engineer

    Goでかんたんソースコードの静的解析
  • Big Sky :: golang オフィシャル謹製のパッケージ依存解決ツール「dep」

    « Re: Go でシングルバイナリな Web アプリを開発しているときに webpack --watch をうまいところやる | Main | Ruby の a = a + 1 はなぜ undefined method '+' for nil:NilClass なのか » golang にはパッケージマネージャが無数にあります。 PackageManagementTools · golang/go Wiki · GitHub Home Articles Blogs Books BoundingResourceUse cgo ChromeOS CodeReview CodeReviewComments CodeTools C... https://github.com/golang/go/wiki/PackageManagementTools 僕もその一つの gom というのを開発している

    Big Sky :: golang オフィシャル謹製のパッケージ依存解決ツール「dep」
  • mattnさんのリファクタリングを読み解く - 生涯未熟

    現在絶賛開発中のkirimoriですが、なんとGolang界隈で有名なmattnさんにリファクタリングをして頂くという、とても嬉しい事態がありました✨ kirimoriについてはこちら↓ syossan.hateblo.jp リファクタリング前提でかなり雑に書いていたのですが、めちゃくちゃ良い感じにコードを直して頂けたので自分の勉強のために読み解いてみます👏 リファクタリング前 kirimoriは以下の機能を有しています。 initコマンドでkirimoriの設定ファイル(toml形式)を作成します addコマンドでコマンドライン引数に指定したプラグインを追加します removeコマンドでコマンドライン引数に指定したプラグインを削除します listコマンドでプラグインの一覧を表示します で、構成的には kirimori.go に全てのコマンドの処理をベタ書きにしてある感じになっております

    mattnさんのリファクタリングを読み解く - 生涯未熟
  • golangではスタックとヒープを気にする必要が無い - Qiita

    調べようと思ったきっかけは、golangでは以下のように ローカル変数のアドレスを戻り値としても問題ないということ。 package main import ( "fmt" ) type Animal struct { Name string Age int } func main() { animal := allocAnimal() fmt.Printf("allocate animal structure %p", animal) } func allocAnimal() *Animal { return &Animal{} } ポインタを扱えるC/C++ではローカル変数のポインタを戻り値とした場合、スタック領域のポインタを関数外に渡すため、 コンパイル時点で警告が表示されます。(なぜエラーにしない) 実行時には最悪、セグメンテーションフォールトで落ちます。 そのため、mallocや

    golangではスタックとヒープを気にする必要が無い - Qiita
  • エディタの壁を越えるGoの開発ツールの文化と作成法

    Takuya UedaSouzoh, Inc. (affiliated by Mercari, Inc.) - Go Engineer

    エディタの壁を越えるGoの開発ツールの文化と作成法
  • WebSocket大合戦:Clojure、C++、Elixir、Go、NodeJS、Ruby | POSTD

    Webアプリにリアルタイムの双方向通信が必要な場合、WebSocketを選ぶのは自然なことだと思います。では、どのツールでWebSocketサーバを構築すべきでしょうか。パフォーマンスは重要ですが、開発のプロセスも見過ごしてはなりません。パフォーマンスを基準にするだけでなく、開発のしやすさも考慮に入れるべきでしょう。今回の大合戦では、Clojure、C++、Elixir、Go、NodeJS、Rubyのそれぞれの言語によって慣用的な手法で実装されたシンプルなWebSocketサーバを比較したいと思います。 テスト内容 サーバに実装するのは、 echo と broadcast の2つのメッセージのみを扱う非常に単純なプロトコルです。echoは送信クライアントに返され、ブロードキャストは全ての接続クライアントに送信されます。そしてブロードキャストが完了すると、結果メッセージが送信者に返されます。

    WebSocket大合戦:Clojure、C++、Elixir、Go、NodeJS、Ruby | POSTD
  • 僕のGolang開発環境(Emacs編) | SHINOFARAの日常

    2年ほどGo言語での開発に関わってきて、色々開発環境を変えては来たのですが、最近落ち着いてきたのでこのタイミングで書きまとめました。 OS Macです。 Versions Golang 1.6 Emacs version is 24.5.1 (デフォルトで入ってたバージョンかな) 事前準備 gofmt(コード整形) デフォルトインストール済み godef(関数定義など参照出来るようにする) $ go get github.com/rogpeppe/godef gocode(autocompleteやcompanyと連携して補完を可能にする) $ go get -u github.com/nsf/gocode golint / errcheck (flycheck で自動的にシンタックスエラーを検知) $ go get github.com/golang/lint/golint $ go g

  • Go 言語で wc を実装してみた - takatoshiono's blog

    Go 言語で wc を実装してみた GitHub - takatoshiono/go-wc: Go implementation of wc command for practice なぜか A Tour of Go をやり終えた時「全然うまく書けない」というのが感想だった。もっと Go 言語のコードを読み書きする必要がある。 そして読むだけだとやる気が続かないから何か書きたい。何を作ろうか? Go 言語なのでスタンドアローンで起動するバイナリ実行形式のファイルがよさそう。仕様が簡単で手頃なやつがいいな...と考えて wc にしたのだった。他にも以下が候補にあった。 ab smtp server beer コマンド(なんかうまそうなビールを表示する) wc コマンド find コマンド (コマンド系で攻めるなら GNU coreutils, findutils などを見るとよさそうか...

    Go 言語で wc を実装してみた - takatoshiono's blog
    MonMonMon
    MonMonMon 2016/09/24
  • golangで書いたアプリケーションのstatic link化 - okzkメモ

    goで書いたアプリケーションは実行ファイルひとつコピーするだけでいいのでインスコ超ラクチン」なんて思ってたんですが、 go1.4からnetパッケージを使っているアプリケーションは、フツーにビルドするとdynamic linkになるようになってました。 $ cd /path/to/your_app $ go build $ file your_app your_app: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), not stripped そんなわけで別環境にバイナリコピーしても動かないケースが発生して超絶アタマを悩ませることになるのですが、 そんなときは以下のようにbuildすればstatic linkになってくれるようです。 $ go build

    golangで書いたアプリケーションのstatic link化 - okzkメモ
  • context パッケージの紹介

    context パッケージの紹介 introduction to context package 8 August 2016 Yasuharu Goto Software Engineer Profile(1/2) Yasuharu Goto @ono_matope ポータルサイトの会社 バックエンド開発 とくいわざ: Go, Cassandra Go歴 2014/1- 2 Contribution Go 1.6 に Contribution net/httpにExpect: 100-continueのクライアントサイド実装を追加 3 contextパッケージの紹介 4 package context google社内で開発 2014年 golang.org/x/net/contextで公開 Go1.7で標準ライブラリに昇格 5 package context contextパッケージはデ

  • Goのアンチパターン

    Go書いててなんとなく見えてきた Goでやっちゃいけないパターン WAF導入してらくらくWebアプリ WAF自体が現在群雄割拠状態。 WAF毎にハンドラインターフェースが違うので既存コードつなぐにはラッパーが必要。 どのWAFもLL言語に比べるとまだまだフィーチャーの網羅範囲が狭い。 なのでもちろんLL言語ほど楽には書けないことが多い。 リフレクション使いまくりでトータル性能はLL言語並みに遅いのもある。 Go1.7のcontextパッケージの導入で標準のHTTPハンドラが復権する可能性があり更に荒れる予想。 追記: 楽できるのを期待してWAFを導入するの「やっちゃいけない」とまでは言い過ぎだったかもしれないけれど例のsqlでPrepareを正しく使えていないで性能出なかった件とか、当面WAFを使うなら自分で概ね中身を理解して使う覚悟が必要。 構造体メソッドにロジックを詰め込む Goの思想

    MonMonMon
    MonMonMon 2016/08/02
  • 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 を使ったテクニックあれこれ
    MonMonMon
    MonMonMon 2016/07/06