タグ

golangとシステムに関するbaboocon19820419のブックマーク (8)

  • Go言語とコンテナ

    長かった連載も今回が最終回です。 この連載では、プログラムがコンピュータ上で動くときに何が起きているのかを、Go言語のコードを通して覗いてきました。 今回は、その締めくくりとして、コンテナについて紹介します。 現在広く利用されているコンテナ技術であるDockerのコアは、Go言語製のlibcontainerというライブラリです。 このライブラリを使って自作のコンテナを仕立ててみます。 今回の原稿にあたっては、仮想化周りでsyohexさんに細かく指摘をいただきました。ありがとうございました。 仮想化 コンテナの話に入る前に、コンテナと目的がよく似た技術である仮想化について説明します。 仮想化は、コンテナよりも先に広く使われるようになった技術ですが、 歴史的にさまざまなソリューションがあり、どのような仕組みか、どのようなメリットがあるか、どのような制約があるか、どこにフォーカスするかで分類の

    Go言語とコンテナ
  • ファイルシステムと、その上のGo言語の関数たち(1)

    コンピュータにはさまざまなストレージが接続されています。 ハードディスクやSSD、取り外し可能なSDカード、読み込み専用のDVD-ROMやBlu-Ray、書き込み可能なDVD-RWなど、種類を網羅するのが困難なほどです。 種類はいろいろありますが、どのストレージも、基的にはビットの羅列を保存できるだけです。 そこで、そのストレージスペースを、特定の決まったルールで管理するための仕組みが必要になります。 たとえば、自分のローカルフォルダにあるテキストファイルをエディタで開き、編集して書き込みたいとします。 ストレージのどこかにテキストファイルの内容を表すビット列があるはずですが、その実体のある場所を、ファイル名から探し出せる必要があります。 また、そこから内容を読み込んだり、新しい内容を上書きすることが、アプリケーションから不自由なく実現できなければなりません。 そのためにOSに備わってい

    ファイルシステムと、その上のGo言語の関数たち(1)
  • 低レベルアクセスへの入り口(2):io.Reader前編

    前回はGo言語が提供する io.Writer を紹介しました。 今回と次回は、それと対になる io.Reader を中心に、仲間のインタフェースをいくつか紹介していきます。 「Go言語ではスクリプト言語並にかんたんにファイル読み込みやネットワークアクセスができる」、という説明を見かけたことがある方も多いでしょう。 確かにGo言語には、ファイル読み込みやネットワークアクセスの結果が1行で得られる、次のような関数が用意されています。 ioutil.WriteFile() : これだけを使ってファイルに書き込める ioutil.ReadFile() : これだけを使ってファイルから読み込める http.Get() : これだけを使ってHTTPのGETメソッドでデータを受け取れる http.Post() : これだけを使ってHTTPのPOSTメソッドでデータを送れる 実はこれらのAPIは、今回の記

    低レベルアクセスへの入り口(2):io.Reader前編
  • 「みんなのGo言語」を読んだ - massa142's blog

    みんなのGo言語【現場で使える実践テクニック】 作者: 松木雅幸,mattn,藤原俊一郎,中島大一,牧大輔,鈴木健太,稲葉貴洋出版社/メーカー: 技術評論社発売日: 2016/09/09メディア: 大型この商品を含むブログ (3件) を見る 業務でGoを書くことになったのがきっかけで、「みんなのGo言語」を読んだ。 Goの経験は、1年ちょっと前に A Tour of Go やって、CLIツールとか書いたことある程度だった。 github.com 結果として、このから Goらしいプラクティス 仕事で使えるテクニック を知ることができたおかげで仕事が捗った。 タイトルにもある通り、「現場で使える実践的なテクニック」という趣旨が各章で意識されていた。薄いだけどカバー範囲が広く内容が詰まっていて、とても読み応えがある。 特に「第1章 Goによるチーム開発のはじめ方とコードを書く上での心得」と

    「みんなのGo言語」を読んだ - massa142's blog
  • 低レベルアクセスへの入り口(1):io.Writer

    今回は、Go言語がOS直上の低レイヤーを扱いやすくするために提供している io.Writer インタフェースの紹介をします。Go言語がシステムプログラミングを簡単に行える言語でありつつも、それなりに少ない記述量で比較的高速で、それでいて多くのことが達成できるのは、これから説明するようなインタフェースにより、低レイヤーが扱いやすい構造になっているからです。インタフェースと、インタフェースに対して提供されるさまざまなサービス関数が、Go言語の安い、早い、うまいの秘密です。 io.WriterはOSが持つファイルのシステムコールの相似形 前回の記事では "Hello World!" プログラムの関数呼び出しをデバッガーでたどり、最後にシステムコール syscall.Write() が呼び出されているようすを見ました。OSでは、このシステムコールを、ファイルディスクリプタと呼ばれるものに対して呼び

    低レベルアクセスへの入り口(1):io.Writer
  • 「Goならわかるシステムプログラミング」を読んだ - massa142's blog

    Goならわかるシステムプログラミング」を読んだ。 ascii.jp 連載が終わって少したったけど、渋川さんの「Goならわかるシステムプログラミング」全20回を読み終えた。 ここでの「システムプログラミング」という言葉は以下のように定義されている。*1 そうしたウェブ関係のプログラミングとは対照的な場面でよく使われているのが、システムプログラミングという用語です。 実際、システムプログラミングとは何でしょうか? 人によって定義がいろいろ異なりますが、よく見かけるのは次のような内容を指して「システムプログラミング」という場合です。 C言語によるプログラミング アセンブリ言語を意識したC言語によるプログラミング 言語処理系(インタプリタを含む)、特にネイティブコードを生成するコンパイラの開発 OS自身のプログラミング +OSの提供する機能を使ったプログラミング 連載では、一番最後の「OSの提

    「Goならわかるシステムプログラミング」を読んだ - massa142's blog
  • Goならわかるシステムプログラミング

    Goで始める、すこし低レイヤのプログラミング入門。入出力、ネットワーク、メモリなど、現実の世界でプログラムが動くために必要な機能をプログラム言語Goを通して覗いてみよう。OSの機能とは何か、それをプログラミングでどう利用するのか、システムプログラミングの世界をプログラマの視点から眺めていく連載企画。 2017年06月21日 17時00分 プログラミング+ Go言語によるプログラマー視点のシステムプログラミング 第20回 Go言語とコンテナ 連載の最終回。この連載ではプログラムがコンピュータ上で動くときに何が起きているのかをGo言語のコードを通して覗いてきました。今回はその締めくくりとしてコンテナについて紹介します。 2017年06月07日 21時30分 プログラミング+ Go言語によるプログラマー視点のシステムプログラミング 第19回 Go言語のメモリ管理 ソフトウェアにとってメモリは不

    Goならわかるシステムプログラミング
  • Goで覗くシステムプログラミングの世界

    プログラミングの勉強にあたってよく言われるのは、「流行に左右されるような技術の尻を追いかけるよりも、土台となる技術を身につけることが大切」ということです。 例えば、ウェブブラウザで動くJavaScriptを書くときは、流行しているライブラリの書き方を暗記するよりも、 ブラウザがどのようにCSSHTMLを解釈してスクリーンに文字や絵を描き出していく(レンダリングしていく)のかを理解することが大切です。 さもないと、ライブラリの流行が変わるだけで勉強したスキルが失われてしまいかねません。 データベースでも同じことがいえます。SQLの文法を学ぶことよりも、データベースがどのようにスケジューリングを行い、 どのようにデータを探索していくのかを学ぶほうが、パフォーマンス・チューニングのコツなどもひらめきやすくなるでしょう 1 。 「土台となる技術を身につける」を、もう少しちゃんと言い換えれば、「今

    Goで覗くシステムプログラミングの世界
  • 1