標準ライブラリー 編集

Goには、豊富な標準ライブラリーとサードパーティーの追加パッケージが用意されています。Goの豊富な標準ライブラリーには、文字列操作、暗号、アーカイブ、メール操作、Unicodeのエンコードとデコード、数学ルーチン、ネットワーク、エラー操作、オペレーティングシステムのインターフェイス、その他の一般的な機能など、使用頻度の高いプログラミングタスクが含まれています。

この項目では、このうち標準ライブラリーについて、公式の標準ライブラリーのドキュメント[1]にコメンタリーを追加する形で解説します。

archive 編集

tar 編集

tarパッケージは、tarアーカイブへのアクセスを実装しています[2]

テープアーカイブ (tar) は、ストリーミング方式で読み書き可能な一連のファイルを 保存するためのファイル形式です。本パッケージは、GNU や BSD の tar ツールで作成されたものを含め、このフォーマットのほとんどのバリエーションをカバーすることを目的としています。

定数 編集

変数 編集

Format型 編集

func (f Format) String() string 編集

Header型 編集

func FileInfoHeader(fi fs.FileInfo, link string) (*Header, error) 編集
func (h *Header) FileInfo() fs.FileInfo 編集

Reader型 編集

func NewReader(r io.Reader) *Reader 編集
func (tr *Reader) Next() (*Header, error) 編集
func (tr *Reader) Read(b []byte) (int, error) 編集

Writer型 編集

func NewWriter(w io.Writer) *Writer 編集
func (tw *Writer) Close() error 編集
func (tw *Writer) Flush() error 編集
func (tw *Writer) Write(b []byte) (int, error) 編集
func (tw *Writer) WriteHeader(hdr *Header) error 編集

zip 編集

パッケージzipは、ZIPアーカイブの読み書きのサポートを提供します[3]

zip パッケージは、ZIP アーカイブの読み書きのサポートを提供します。

参照: https://www.pkware.com/appnote

本パッケージはディスクスパニング(disk spanning)をサポートしていません。

ZIP64 についての注意点
後方互換性のため、FileHeader は 32 ビットと 64 ビットの Size フィールドを持っています。64 ビットのフィールドは常に正しい値を含んでおり、通常のアーカイブでは両方のフィールドが同じになります。ZIP64形式を必要とするファイルでは、32ビットのフィールドは0xffffffとなり、代わりに64ビットのフィールドを使用する必要があります。

定数 編集

変数 編集

func RegisterCompressor(method uint16, comp Compressor) 編集

func RegisterDecompressor(method uint16, dcomp Decompressor) 編集

Compressor型 編集

Decompressor型 編集

File型 編集

func (f *File) DataOffset() (offset int64, err error) 編集
func (f *File) Open() (io.ReadCloser, error) 編集
func (f *File) OpenRaw() (io.Reader, error) 編集

FileHeader型 編集

func FileInfoHeader(fi fs.FileInfo) (*FileHeader, error) 編集
func (h *FileHeader) FileInfo() fs.FileInfo 編集
func (h *FileHeader) ModTime() time.TimeDEPRECATED 編集
func (h *FileHeader) Mode() (mode fs.FileMode) 編集
func (h *FileHeader) SetModTime(t time.Time)DEPRECATED 編集
func (h *FileHeader) SetMode(mode fs.FileMode) 編集

ReadCloser型 編集

func OpenReader(name string) (*ReadCloser, error) 編集
func (rc *ReadCloser) Close() error 編集

Reader型 編集

func NewReader(r io.ReaderAt, size int64) (*Reader, error) 編集
func (r *Reader) Open(name string) (fs.File, error) 編集
func (z *Reader) RegisterDecompressor(method uint16, dcomp Decompressor) 編集

Writer型 編集

func NewWriter(w io.Writer) *Writer 編集
func (w *Writer) Close() error 編集
func (w *Writer) Copy(f *File) error 編集
func (w *Writer) Create(name string) (io.Writer, error) 編集
func (w *Writer) CreateHeader(fh *FileHeader) (io.Writer, error) 編集
func (w *Writer) CreateRaw(fh *FileHeader) (io.Writer, error) 編集
func (w *Writer) Flush() error 編集
func (w *Writer) RegisterCompressor(method uint16, comp Compressor) 編集
func (w *Writer) SetComment(comment string) error 編集
func (w *Writer) SetOffset(n int64) 編集

bufio 編集

bufioパッケージはバッファードI/Oを実装します。これは io.Reader または io.Writer オブジェクトをラップして、同じくインターフェイスを実装する別のオブジェクト(Reader または Writer)を作成しますが、バッファリングとテキスト I/O のためのいくつかのヘルプを提供します。

builtin 編集

パッケージbuiltinは、Goの事前宣言された識別子のためのドキュメントを提供します。

bytes 編集

bytesパッケージは、バイトスライスを操作するための関数を実装しています。

compress 編集

bzip2 編集

bzip2パッケージは、bzip2の解凍を実装しています。

flate 編集

パッケージ flate は RFC 1951 で述べられている DEFLATE 圧縮データフォーマットを実装しています。

gzip 編集

gzipパッケージはRFC1952で規定されているgzip形式の圧縮ファイルの読み書きを実装しています。

lzw 編集

lzwパッケージは、T. A. Welch, "A Technique for High-Performance Data Compression", Computer, 17(6) (June 1984), pp 8-19に記載されているLempel-Ziv-Welch圧縮データフォーマットを実装しています。

zlib 編集

zlibパッケージは、RFC1950で規定されているzlib形式の圧縮データの読み書きを実装しています。

container 編集

heap 編集

heapパッケージはheap.Interfaceを実装している任意の型のためのheap操作を提供します。

list 編集

listパッケージはダブルリンクされたリストを実装します。

ring 編集

ringパッケージは循環リストに対する操作を実装しています。

context 編集

contextパッケージはContext型を定義します。Contextはデッドライン、キャンセル・シグナル、およびその他のリクエスト・スコープの値をAPIの境界やプロセス間で運びます。

crypto 編集

cryptoパッケージは、一般的な暗号定数を集めたものです。

aes 編集

aesパッケージは、米国連邦情報処理基準出版物197に定義されているAES暗号(旧Rijndael)を実装しています。

cipher 編集

cipherパッケージは、低レベルのブロック暗号の実装に巻き付けることができる、標準的なブロック暗号モードを実装しています。

des 編集

desパッケージは,米国連邦情報処理基準出版物46-3に定義されているDES(Data Encryption Standard)およびTDEA(Triple Data Encryption Algorithm)を実装しています。

dsa 編集

dsaパッケージは、FIPS 186-3 で定義されているデジタル署名アルゴリズムを実装しています。

ecdsa 編集

ecdsaパッケージは,FIPS 186-3で定義されている楕円曲線デジタル署名アルゴリズムを実装しています。

ed25519 編集

ed25519パッケージは、Ed25519署名アルゴリズムを実装しています。

elliptic 編集

ellipticパッケージは、素数体上のいくつかの標準的な楕円曲線を実装しています。

hmac 編集

hmacパッケージは,米国連邦情報処理基準出版物198に定義されているHMAC(Keyed-Hash Message Authentication Code)を実装しています。

md5 編集

md5パッケージは、RFC 1321で定義されているMD5ハッシュアルゴリズムを実装しています。

rand 編集

randパッケージは、暗号化された安全な乱数生成器を実装しています。

rc4 編集

rc4パッケージは、Bruce SchneierのApplied Cryptographyで定義されているRC4暗号を実装しています。

rsa 編集

rsaパッケージは、PKCS #1とRFC 8017で規定されているRSA暗号を実装しています。

sha1 編集

sha1パッケージは、RFC 3174 で定義されている SHA-1 ハッシュアルゴリズムを実装しています。

sha256 編集

sha256パッケージは、FIPS 180-4で定義されているSHA224およびSHA256ハッシュアルゴリズムを実装しています。

sha512 編集

sha512パッケージは、FIPS 180-4で定義されているSHA-384、SHA-512、SHA-512/224、およびSHA-512/256ハッシュアルゴリズムを実装しています。

subtle 編集

subtleパッケージは、暗号コードでよく使われるが、正しく使うには慎重な考えが必要な関数を実装しています(訳註:subtle には、「微妙な」「繊細な」「掴みどころのない」という意味があります)。

tls 編集

tlsパッケージは、RFC 5246で規定されているTLS 1.2と、RFC 8446で規定されているTLS 1.3を部分的に実装しています。

x509 編集

x509/pkix 編集

pkix パッケージには、X.509 証明書、CRL、および OCSP の ASN.1 解析およびシリアライズに使用される、共有された低レベルの構造が含まれています。

database 編集

sql 編集

sql/driver 編集

debug 編集

dwarf 編集

elf 編集

gosym 編集

macho 編集

pe 編集

plan9obj 編集

embed 編集

encoding 編集

ascii85 編集

asn1 編集

base32 編集

base64 編集

binary 編集

csv 編集

gob 編集

hex 編集

json 編集

pem 編集

xml 編集

errors 編集

expvar 編集

flag 編集

fmt 編集

fmtパッケージは、C言語のprintfやscanfに類似した関数でフォーマットされたI/Oを実装します。フォーマットの「動詞(verbs)」はC言語から派生したものですが[4]、より単純です[5]

印字 編集

動詞
一般
%v 構造体を印刷する際のデフォルトフォーマットでの値、プラスフラグ(%+v)はフィールド名を追加する
%#v 値のGo-syntax表現
%T 値の型の Go-syntax 表現
%% リテラルのパーセント記号;(仮引数リストから)値を消費しない
論理値
%t 単語 true または false
整数
%b 基数2
%c 対応するUnicodeコードポイントで表される文字
%d 基数10
%o 基数8
%O 基数8 に前置辞 0o を伴って
%q 一重引用符で囲まれた文字リテラルを、Go構文で安全にエスケープします。
%x 基数16、小文字のa-fを使用
%X 基数16、小文字のA-Fを使用
%U ユニコード形式。U+1234を "U+%04X" と表示
浮動小数点と複素数の構成要素。
%b 指数が 2 の累乗の 10 進数の科学的記数法。strconv.FormatFloatの要領で、'b'形式を使用します。例: -123456p-78
%e 科学的記数法、例えば -1.234456e+78
%E 科学的記数法、例えば -1.234456E+78
%F 小数点、指数なし、例:123.456;
%f %F の同義語です。
%g 大きな指数の場合は%e、そうでない場合は%fです。精度については後述します。
%G 大きな指数の場合は %E、そうでない場合は %F
%x 16進表記 (10進の2乗を指数とする)、例:-0x1.23abcp+20
%X 大文字の16進法、例:-0X1.23ABCP+20
文字列とバイトのスライス(これらの動詞と同等に扱われます)。
%s 文字列またはスライスの解釈されないバイトです
%q 二重引用符で囲まれた文字列を Go 構文で安全にエスケープします。
%x 基数16、小文字、1 バイトあたり 2 文字
%X 基数16、大文字、1 バイトあたり 2 文字
スライス
%p 基数16表記の0番目の要素のアドレス(先行する0xを含む)
ポインター
%p 基数16表記の0番目の要素のアドレス(先行する0xを含む)
%b,%d,%o,%x,%X -- ポインタでも動作します。値が整数であるかのように正確にフォーマットされます。
%vの既定のフォーマット
bool: %t
int, int8 etc.: %d
uint, uint8 etc.: %d, もし %#v なら %#x
float32, complex64, etc: %g
string: %s
chan: %p
pointer: %p

複合オブジェクトの場合は、これらのルールを再帰的に使用して、以下のようにレイアウトされた要素が印刷されます。

構造体: {field0 field1 ...}
配列、スライス: [elem0 elem1 ...]
マップ: map[key1:value1 key2:value2 ...]
上記へのポインタ: &{}, &[], &map[]

幅は、動詞の直前にあるオプションの10進数で指定されます。省略した場合は、値を表現するのに必要な幅となります。 精度は、(オプションの)幅の後にピリオドとそれに続く10進数で指定されます。ピリオドがない場合は、デフォルトの精度が使用されます。ピリオドとそれに続く数字がない場合、精度はゼロになります。例を示します。

%f 既定の文字数(幅; width)、既定の精度
%9f 文字数9、既定の精度
%.2f 既定の文字数、精度2
%9.2f 文字数9、精度2
%9.f 文字数9、精度0

幅と精度は、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)となります。

関数 編集

func Errorf(format string, a ...interface{}) error 編集

func Fprint(w io.Writer, a ...interface{}) (n int, err error) 編集

func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error) 編集

func Fprintln(w io.Writer, a ...interface{}) (n int, err error) 編集

func Fscan(r io.Reader, a ...interface{}) (n int, err error) 編集

func Fscanf(r io.Reader, format string, a ...interface{}) (n int, err error) 編集

func Fscanln(r io.Reader, a ...interface{}) (n int, err error) 編集

func Print(a ...interface{}) (n int, err error) 編集

func Printf(format string, a ...interface{}) (n int, err error) 編集

 func Printf(format string, a ...interface{}) (n int, err error)

Printfは、フォーマット指定子に従ってフォーマットし、標準出力に書き込みます。書き込んだバイト数と、書き込んだ際に発生したエラーを返します。

func Println(a ...interface{}) (n int, err error) 編集

 func Println(a ...interface{}) (n int, err error)

Printlnは、オペランドにデフォルトのフォーマットを使用してフォーマットし、標準出力に書き込みます。 オペランド間には常にスペースが追加され、改行が追加されます。 書き込んだバイト数と、書き込んだ際に発生したエラーを返します。

func Scan(a ...interface{}) (n int, err error) 編集

func Scanf(format string, a ...interface{}) (n int, err error) 編集

func Scanln(a ...interface{}) (n int, err error) 編集

func Sprint(a ...interface{}) string 編集

func Sprintf(format string, a ...interface{}) string 編集

func Sprintln(a ...interface{}) string 編集

func Sscan(str string, a ...interface{}) (n int, err error) 編集

func Sscanf(str string, format string, a ...interface{}) (n int, err error) 編集

func Sscanln(str string, a ...interface{}) (n int, err error) 編集

Formatter型 編集

GoStringer型 編集

ScanState型 編集

Scanner型 編集

State型 編集

Stringer型 編集

引数の明示的なインデックス 編集

フォーマットエラー 編集

スキャン 編集

go 編集

ast 編集

build 編集

build/constraint 編集

constant 編集

doc 編集

format 編集

importer 編集

parser 編集

printer 編集

scanner 編集

token 編集

types 編集

hash 編集

adler32 編集

crc32 編集

crc64 編集

fnv 編集

maphash 編集

html 編集

template 編集

image 編集

color 編集

color/palette 編集

draw 編集

gif 編集

jpeg 編集

png 編集

index 編集

suffixarray 編集

io 編集

fs 編集

ioutil 編集

log 編集

syslog 編集

math 編集

big 編集

bits 編集

cmplx 編集

rand 編集

mime 編集

multipart 編集

quotedprintable 編集

net 編集

http 編集

http/cgi 編集

http/cookiejar 編集

http/fcgi 編集

http/httptest 編集

http/httptrace 編集

http/httputil 編集

http/pprof 編集

mail 編集

rpc 編集

rpc/jsonrpc 編集

smtp 編集

textproto 編集

url 編集

os 編集

exec 編集

signal 編集

user 編集

path 編集

filepath 編集

plugin 編集

reflect 編集

regexp 編集

syntax 編集

runtime 編集

cgo 編集

debug 編集

metrics 編集

pprof 編集

race 編集

trace 編集

sort 編集

strconv 編集

strings 編集

sync 編集

atomic 編集

syscall 編集

js 編集

testing 編集

fstest 編集

iotest 編集

quick 編集

text 編集

scanner 編集

tabwriter 編集

template 編集

template/parse 編集

time 編集

tzdata 編集

unicode 編集

utf16 編集

utf8 編集

unsafe 編集

internal 編集

abi 編集

buildcfg 編集

bytealg 編集

cfg 編集

cpu 編集

execabs 編集

fmtsort 編集

goexperiment 編集

goroot 編集

goversion 編集

itoa 編集

lazyregexp 編集

lazytemplate 編集

nettrace 編集

obscuretestdata 編集

oserror 編集

poll 編集

profile 編集

race 編集

reflectlite 編集

singleflight 編集

syscall/execenv 編集

syscall/unix 編集

syscall/windows 編集

syscall/windows/registry 編集

syscall/windows/sysdll 編集

sysinfo 編集

testenv 編集

testlog 編集

trace 編集

unsafeheader 編集

xcoff 編集

脚註 編集

  1. ^ Standard library - pkg.go.dev. The Go website. (Sep 9, 2021). https://pkg.go.dev/std. 
  2. ^ tar package - archive/tar - pkg.go.dev. The Go website. (Sep 9, 2021). https://pkg.go.dev/archive/tar@go1.17.1. 
  3. ^ zip package - archive/zip - pkg.go.dev. The Go website. (Sep 9, 2021). https://pkg.go.dev/archive/zip@go1.17.1. 
  4. ^ C言語では %d の様な printf() 関数の第一引数で与えられた文字列のうち、第二引数以降の値を修飾する記号を「変換指定子(conversion specification)」と呼びますが、Goでは「動詞(verbs)」と呼びます。
  5. ^ fmt package - fmt - pkg.go.dev. The Go website. (Sep 9, 2021). https://pkg.go.dev/fmt@go1.17.1.