Go Package Management Go takes a semi-decentralized approach to package management, allowing any git repo to be used as a module package system. Modules can be downloaded directly from their source control servers or alternatively through a module proxy which performs a simple forwarding of requests to the appropriate source. The following diagram is a high-level take on what happens when go get a
近年、普段の作業をマウスでやりたくない気持ちが高まっている(デスク周りが散らかってきたせいだという説が有力です)。メールは結局ターミナルでメールを読むことにしたため問題なく過ごせているが、その他のタスクをキーボードだけでやるには、ターミナル動くアプリケーションを作れる必要がある。それもリッチなやつだ。見た目は派手な方がいい。 この記事は Kyoto.go remote #32 LT会 で発表した 入門 Bubble Tea の増補版です。 Bubble Tea とは GitHub - charmbracelet/bubbletea: A powerful little TUI framework 🏗 Bubble Tea とは、Go でリッチなターミナルアプリケーション(TUI)を作るためのフレームワーク。Charm というプロジェクトの一部のようで、ホームページを見てもらったら分かると
Three new books, Go Optimizations 101, Go Details & Tips 101 and Go Generics 101 are published now. It is most cost-effective to buy all of them through this book bundle in the Leanpub book store. Several days ago, I wrote an article which explains the channel rules in Go. That article got many votes on reddit and HN, but there are also some criticisms on Go channel design details. I collected som
Goでウェブアプリのクライアントを書いている。 ローカルでテストする場合は、サーバもローカルにたてるので、アクセスする先はlocalhostになる。 リリースするときは正しいウェブアプリのURLを指定しなければならない。 この際、切り替えはナイーブにコメントアウトで行ってきた。 const ( // APIServer = "http://www.mywebapp.com" APIServer = "http://localhost:8080" ) 当然、デバッグ用を有効にしたままリリースしてしまったり、その逆だったりと、混乱があった。 このような、デバッグ・リリースで機能を切り替えたい場合はBuild constrainsを使えば良いらしい。 Build Constrainsとは? 従来の機能が充実しているGoに抜かりはない。Build constrainsとは必要に応じてビルドするファ
Real Time Messaging Protocol (RTMP) とは、Adobe が開発している、Adobe Flash プレーヤーとサーバーの間で、音声・動画・データをやりとりするストリーミングのプロトコル。元々は Macromedia が開発していて、Adobe に買収された。プロトコルの仕様は公開されている[1]。 wikipediaより RTMPはライブ配信の為のプロトコルだが、RTMPで配信した動画を 再生するには、基本的にFlash Playerがひつようになる。Flash Playerを使うようなことは、いまからさすがにないだろう。 Flashの終了やHLSの登場に伴い、RTMPは徐々に廃れつつあるらしい。 が、それはあくまでPlayer側の話。 Youtube LiveやFacebook Live、Twitchなどのライブ配信サービスでは、依然として配信データをRT
株式会社AbemaTV 配信チームの芝田 (@c-bata) です。 AbemaTVの配信システムに関する技術資料は、AbemaTV Developer Conferenceなどを通して公開してきました。特にHLSやMPEG-DASHといったエンドユーザーへの映像配信に利用しているプロトコルは既に弊社エンジニアによる解説記事が存在するため、本記事では生放送現場とトランスコーダー(Wowza)間の映像伝送に利用しているRTMPと呼ばれるプロトコルについて解説していきます。 また今回はGo言語を用いて実際にRTMP 1.0プロトコルに準拠するサーバープログラムを実装してみました。ソースコードはGithubで公開しているので、本記事の解説と合わせてご覧ください。 Server implementation of RTMP 1.0 protocol in Go. https://github.co
Go1.7ではgolang.org/x/net/contextがcontextパッケージとして標準パッケージに仲間入りする.そしていくつかの標準パッケージではcontextパッケージを使ったメソッド/関数も新たに登場する.contextパッケージは今後さらに重要な,Gopherは普通に扱うべき,パッケージになると考えられる.本記事ではそもそもcontextパッケージとは何か?なぜ登場したのか?なぜ重要なのか?どのように使うべきか?についてまとめる. contextパッケージが初めて紹介されたのは2014年のThe Go Blogの記事 “Go Concurrency Patterns: Context”である.この記事ではなぜGoogleがcontextパッケージを開発したのか,どのように使うのか具体的な検索タスクを例に解説されている.まだ読んだことがない人はそちらを先に読むと良い. co
前回はGo言語が提供する io.Writer を紹介しました。 今回と次回は、それと対になる io.Reader を中心に、仲間のインタフェースをいくつか紹介していきます。 「Go言語ではスクリプト言語並にかんたんにファイル読み込みやネットワークアクセスができる」、という説明を見かけたことがある方も多いでしょう。 確かにGo言語には、ファイル読み込みやネットワークアクセスの結果が1行で得られる、次のような関数が用意されています。 ioutil.WriteFile() : これだけを使ってファイルに書き込める ioutil.ReadFile() : これだけを使ってファイルから読み込める http.Get() : これだけを使ってHTTPのGETメソッドでデータを受け取れる http.Post() : これだけを使ってHTTPのPOSTメソッドでデータを送れる 実はこれらのAPIは、今回の記
https://www.kbaba1001.com/entry/2021/09/17/073149 (該当記事が削除されました) RubyのサービスをGoで置き換えるのは3倍人手がかかる 何するにも機能不足 JSONの読み書きにわざわざ構造体書くの面倒 同僚がGoを選ぼうとしたら愚かな選択ですねと答える サーバーサイド開発にGoを使うのは危険 っぽい内容だったかと。 だいぶGoの特徴や既存の言語との考え方の違いが広まってきてるのかなぁと思っていた矢先だったので十年くらい前のような指摘をあえて今されていてびっくりした。 正直、ここに書かれたようなヘイト項目は既出すぎるので、もし影響の大きい項目を多くの人が同様に嫌っているならばGoはここまでの人気のある処理系になることはなかったと思う。(もしくは多くの人が嫌ってはいるが影響の小さい項目ということ) Goは出た当初、こういうヘイトが世界中のブロ
Time to share some strategies for creating testable Go services using interfaces and generated mocks. Table of Contents Defining the goal posts Planning for testability Defining the data model The repository layer The interface The default implementation Testing the default implementation External API clients The interface The default implementation Services The interface The default implementatio
Go database/sql defines interfaces for SQL databases. Actual driver must be implemented in own package. And dependency injection is done as a part of import and build system. Lets go deeper to see how it is actually implemented. This exercise will result in a simple driver backed up by csv files. Who do not want to SELECT from csv file? Disclaimer: I wrote it in order to learn database/sql and to
Golangでツールやアプリケーションを作ったりしてるが、 メモリ管理がどのようになっているのか気になったので眺めてみた。 メモリ領域ざっくり復習のためメモリ領域についてまとめる。 メモリ領域は メモリ領域 内容
Go 言語のいろいろなパッケージを使ってみるシリーズ(目次)。 今回は io パッケージに定義されている具象 io.Reader, io.Writer を見ていきます。 io パッケージに定義されているインターフェース型については「Go 言語の io パッケージに定義されているインターフェース型を一気見する」を参照。 【この記事の内容】 io パッケージに定義されている具象 io.Reader, io.Writer io.Reader を返すメソッド io.MultiReader 関数 io.TeeReader 関数 io.LimitReader 関数 io.SectionReader 関数 io.Writer を返すメソッド io.MultiWriter 関数 io.Pipe 関数 io パッケージに定義されている具象 io.Reader, io.Writerio パッケージには io.
パイプ(土管)をGo言語でも楽しめるはじめに前回はGo言語のmime/multipartパッケージによるファイルのアップロードを見ましたが、パフォーマンスの特徴にはあまり触れませんでした。 大規模なETLジョブや、制限の厳しいサーバーレスの環境などでは、ファイルを扱うプログラムのリソースを慎重に考える必要があります。本記事ではメモリ使用量を大幅に減らすio.Pipeの使い方を見ていきます。 全てのコードはサンプルレポジトリにあります。 同期処理にある問題前回のコードをもう一度見てパフォーマンスを考えてみましょう。 // ファイルを開く file, _ := os.Open(filename) // リクエストボディのデータを受け取るio.Writerを生成する。 body := &bytes.Buffer{} // データのmultipartエンコーディングを管理するmultipart.W
概要 結論から言うと、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、
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く