Go/標準ライブラリー

Goには、豊富な標準ライブラリーとサードパーティーの追加パッケージが用意されています。Goの豊富な標準ライブラリーには、文字列操作、暗号、アーカイブ、メール操作、Unicodeのエンコードとデコード、数学ルーチン、ネットワーク、エラー操作、オペレーティングシステムのインターフェイス、その他の一般的な機能など、使用頻度の高いプログラミングタスクが含まれています。
この項目では、このうち標準ライブラリーについて、公式の標準ライブラリーのドキュメントにコメンタリーを追加する形で解説します。
tarパッケージは、tarアーカイブへのアクセスを実装しています。
テープアーカイブ (tar) は、ストリーミング方式で読み書き可能な一連のファイルを 保存するためのファイル形式です。本パッケージは、GNU や BSD の tar ツールで作成されたものを含め、このフォーマットのほとんどのバリエーションをカバーすることを目的としています。
パッケージzipは、ZIPアーカイブの読み書きのサポートを提供します。
zip パッケージは、ZIP アーカイブの読み書きのサポートを提供します。
参照: https://www.pkware.com/appnote
本パッケージはディスクスパニング(disk spanning)をサポートしていません。
bufioパッケージはバッファードI/Oを実装します。これは io.Reader または io.Writer オブジェクトをラップして、同じくインターフェイスを実装する別のオブジェクト(Reader または Writer)を作成しますが、バッファリングとテキスト I/O のためのいくつかのヘルプを提供します。
パッケージbuiltinは、Goの事前宣言された識別子のためのドキュメントを提供します。
bytesパッケージは、バイトスライスを操作するための関数を実装しています。
bzip2パッケージは、bzip2の解凍を実装しています。
パッケージ flate は RFC 1951 で述べられている DEFLATE 圧縮データフォーマットを実装しています。
gzipパッケージはRFC1952で規定されているgzip形式の圧縮ファイルの読み書きを実装しています。
lzwパッケージは、T. A. Welch, "A Technique for High-Performance Data Compression", Computer, 17(6) (June 1984), pp 8-19に記載されているLempel-Ziv-Welch圧縮データフォーマットを実装しています。
zlibパッケージは、RFC1950で規定されているzlib形式の圧縮データの読み書きを実装しています。
heapパッケージはheap.Interfaceを実装している任意の型のためのheap操作を提供します。
listパッケージはダブルリンクされたリストを実装します。
ringパッケージは循環リストに対する操作を実装しています。
contextパッケージはContext型を定義します。Contextはデッドライン、キャンセル・シグナル、およびその他のリクエスト・スコープの値をAPIの境界やプロセス間で運びます。
cryptoパッケージは、一般的な暗号定数を集めたものです。
aesパッケージは、米国連邦情報処理基準出版物197に定義されているAES暗号(旧Rijndael)を実装しています。
cipherパッケージは、低レベルのブロック暗号の実装に巻き付けることができる、標準的なブロック暗号モードを実装しています。
desパッケージは,米国連邦情報処理基準出版物46-3に定義されているDES(Data Encryption Standard)およびTDEA(Triple Data Encryption Algorithm)を実装しています。
dsaパッケージは、FIPS 186-3 で定義されているデジタル署名アルゴリズムを実装しています。
ecdsaパッケージは,FIPS 186-3で定義されている楕円曲線デジタル署名アルゴリズムを実装しています。
ed25519パッケージは、Ed25519署名アルゴリズムを実装しています。
ellipticパッケージは、素数体上のいくつかの標準的な楕円曲線を実装しています。
hmacパッケージは,米国連邦情報処理基準出版物198に定義されているHMAC(Keyed-Hash Message Authentication Code)を実装しています。
md5パッケージは、RFC 1321で定義されているMD5ハッシュアルゴリズムを実装しています。
randパッケージは、暗号化された安全な乱数生成器を実装しています。
rc4パッケージは、Bruce SchneierのApplied Cryptographyで定義されているRC4暗号を実装しています。
rsaパッケージは、PKCS #1とRFC 8017で規定されているRSA暗号を実装しています。
sha1パッケージは、RFC 3174 で定義されている SHA-1 ハッシュアルゴリズムを実装しています。
sha256パッケージは、FIPS 180-4で定義されているSHA224およびSHA256ハッシュアルゴリズムを実装しています。
sha512パッケージは、FIPS 180-4で定義されているSHA-384、SHA-512、SHA-512/224、およびSHA-512/256ハッシュアルゴリズムを実装しています。
subtleパッケージは、暗号コードでよく使われるが、正しく使うには慎重な考えが必要な関数を実装しています(訳註:subtle には、「微妙な」「繊細な」「掴みどころのない」という意味があります)。
tlsパッケージは、RFC 5246で規定されているTLS 1.2と、RFC 8446で規定されているTLS 1.3を部分的に実装しています。
pkix パッケージには、X.509 証明書、CRL、および OCSP の ASN.1 解析およびシリアライズに使用される、共有された低レベルの構造が含まれています。
fmtパッケージは、C言語のprintfやscanfに類似した関数でフォーマットされたI/Oを実装します。フォーマットの「動詞(verbs)」はC言語から派生したものですが、より単純です。
複合オブジェクトの場合は、これらのルールを再帰的に使用して、以下のようにレイアウトされた要素が印刷されます。
幅は、動詞の直前にあるオプションの10進数で指定されます。省略した場合は、値を表現するのに必要な幅となります。 精度は、(オプションの)幅の後にピリオドとそれに続く10進数で指定されます。ピリオドがない場合は、デフォルトの精度が使用されます。ピリオドとそれに続く数字がない場合、精度はゼロになります。例を示します。
幅と精度は、Unicodeのコードポイント、つまりルーンの単位で測定されます。(フラグのいずれかまたは両方を文字'*'で置き換えることができ、その場合、その値は次のオペランド(フォーマットするオペランドの前)から取得されます。
ほとんどの値の場合、幅は出力するルーン数の最小値であり、必要に応じてフォーマットされた形式にスペースを詰めます。
しかし、文字列、バイトスライス、バイト配列については、精度はフォーマットされる入力の長さを制限し(出力のサイズではありません)、必要に応じて切り詰めます。通常、それはルーンで測定されるが、これらのタイプでは、%xまたは%Xフォーマットでフォーマットされた場合、それはバイトで測定される。
浮動小数点値の場合、幅はフィールドの最小幅を設定し、精度は必要に応じて小数点以下の桁数を設定しますが、%g/%Gの場合、精度は最大有効桁数を設定します(末尾のゼロは削除されます)。例えば、12.345の場合、フォーマット%6.3fは12.345を表示し、%.3gは12.3を表示します。%e、%f、%#gのデフォルトの精度は6で、%gの場合は値を一意に識別するのに必要な最小桁数です。
複素数の場合、幅と精度は2つの構成要素に独立して適用され、結果は括弧で囲まれますので、%fを1.2+3.4iに適用すると(1.200000+3.400000i)となります。
Printfは、フォーマット指定子に従ってフォーマットし、標準出力に書き込みます。書き込んだバイト数と、書き込んだ際に発生したエラーを返します。
Printlnは、オペランドにデフォルトのフォーマットを使用してフォーマットし、標準出力に書き込みます。 オペランド間には常にスペースが追加され、改行が追加されます。 書き込んだバイト数と、書き込んだ際に発生したエラーを返します。