タグ

IOとgolangに関するclavierのブックマーク (7)

  • Go1.19のcrypto/randではunix環境のReadで内部バッファがなくなるので色々しらべた - ちりもつもればミルキーウェイ

    はじめに 先日なんとなしに go.1.19 release note よんでたら、crypto/randの項目で興味深い一文を見つけた Read no longer buffers random data obtained from the operating system between calls. 当時の僕も気になっていたよう ざっと見たけど crypto/rand.Read()で内部バッファ取らなくなったり net パッケージが context.DealineExceededとか context.Canceled を満たす形でエラー返すようになったりがほえ〜ポイントだった。あとは fmt.Append よさそうっすねhttps://t.co/8cfrZ7dBZR— convto (@convto) 2022年6月11日 もともと CVE-2021-3538 をちゃんと読む - ちり

    Go1.19のcrypto/randではunix環境のReadで内部バッファがなくなるので色々しらべた - ちりもつもればミルキーウェイ
  • io.Readerのファイルタイプを判定する - Qiita

    概要 Goでファイルを読み込んでいる時に、そのファイルのタイプを判別したいことがたまにあります。例えばGzipかどうか分からないけど、もしGzipならgzip.NewReader噛ませたい、みたいな場合です。雑にgzip.NewReader噛ませてerr返すかどうかで判定とかやってみたんですが、普通に10バイト読み進められちゃうのでerr返ったあとに別のファイルタイプとして処理しようとするとinvalidなヘッダーになって死にます。実は読み進められたバイトを戻す方法あるよ、という場合は教えて下さい。 そもそもGzip以外の判定をしたいときもあるので、NewReaderの方針も必ず使えるわけではありません。もしファイルがos.Fileとかbufio.Readerの形であればReadしてからSeekしたりPeekしたり出来るのですが、io.Readerの場合どうやるのか分からなかったので調べま

    io.Readerのファイルタイプを判定する - Qiita
  • Go言語のio.Pipeでファイルを効率よくアップロードする方法

    パイプ(土管)をGo言語でも楽しめるはじめに前回はGo言語のmime/multipartパッケージによるファイルのアップロードを見ましたが、パフォーマンスの特徴にはあまり触れませんでした。 大規模なETLジョブや、制限の厳しいサーバーレスの環境などでは、ファイルを扱うプログラムのリソースを慎重に考える必要があります。記事ではメモリ使用量を大幅に減らすio.Pipeの使い方を見ていきます。 全てのコードはサンプルレポジトリにあります。 同期処理にある問題前回のコードをもう一度見てパフォーマンスを考えてみましょう。 // ファイルを開く file, _ := os.Open(filename) // リクエストボディのデータを受け取るio.Writerを生成する。 body := &bytes.Buffer{} // データのmultipartエンコーディングを管理するmultipart.W

    Go言語のio.Pipeでファイルを効率よくアップロードする方法
  • GitHub - microsoft/go-winio: Win32 IO-related utilities for Go

    You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert

    GitHub - microsoft/go-winio: Win32 IO-related utilities for Go
  • チャットで学ぶ Go ネットワークプログラミング : DSAS開発者の部屋

    簡単なチャットプログラムは、ネットワークプログラミング用のフレームワークでは定番のサンプルプログラムです。 echo サーバーが Hello World とするなら、チャットは FizzBuzz といったところでしょう。 とりあえず動くだけのチャットならだれでもすぐに作れるようになりますが、まじめにチャットを作ることで、 ネットワークプログラミングで考えないといけない点やエラー処理の重要な基礎を学ぶことができます。 ということで、 Go でシンプルなチャットを実装してみました。 (ソースコード) 以降、何を考えてどういう設計を採用したのかを解説していきます。 考慮すべきポイント 特定のクライアントへの送信に長時間待たされた場合に、他のクライアントへの送信が遅れないようにする。 クライアントを切断するのは、 (1)ルーム側から kick する場合, (2)受信エラー, (3)送信エラー の3

    チャットで学ぶ Go ネットワークプログラミング : DSAS開発者の部屋
  • HerokuとGithubを使った統一的なツール配布

    HerokuGithubを使った統一的なツール配布 Go言語ではクロスコンパイルがとても簡単で,複数プラットフォーム向けのバイナリをつくってそれを配布するというのがさらっとできる. 単純にやるなら, クロスコンパイルした各バイナリをzip等に固める Github Releaseやbintray,Dorone.ioなどにホストする そして,ユーザには自分のプラットフォームに合ったものをダウンロード/展開してPATHの通ったところに置いてもらう. 開発者からすると,すごい簡単.ホストするまで完全に自動化できる.でも,ユーザからすると若干めんどくさい. もっとツールを使い初めてもらうまでの敷居を下げたい. TL;DR 全プラットフォーム共通で以下のようにツールをインストールできるようにする.若干長いが1コマンド! $ L=/usr/local/bin/ghr && curl -sL -A "`

  • Go言語のビルド生活を drone.ioで幸せに暮らす #golang (Go Advent Calendar 2013 Day 5) - Qiita [キータ]

    Go Advent Calendar 2013 5日目の投稿です。 Qiitaに投稿するのは初めてな @atotto です。よろしくお願いします。 Go言語のビルド生活をdrone.ioで幸せに暮らす はじめに Goはクロスコンパイルがとても簡単です。実行ファイル形式で配布する場合、他の環境用にサクっとコンパイルして渡すことができます。 ただ、githubなどにコードは公開してるけど各環境用にコンパイルしたものをさっと配布したいなーと思うとちょっと面倒です。みんながGoのコンパイル環境をもっているとも限りませんし。そこで、CI(継続的インテグレーション)環境でクロスコンパイルしてバイナリを配布できるようにするしくみがないか探してみました。 やりたいことをまとめると: リポジトリにあるコードをCI環境上でクロスコンパイルしておきたい 成果物をダウンロードできるようにしておきたい ということで

    Go言語のビルド生活を drone.ioで幸せに暮らす #golang (Go Advent Calendar 2013 Day 5) - Qiita [キータ]
  • 1