Go/標準ライブラリー
標準ライブラリー
[編集]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
[編集]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
[編集]脚註
[編集]- ^ Standard library - pkg.go.dev. The Go website. (Sep 9, 2021) .
- ^ tar package - archive/tar - pkg.go.dev. The Go website. (Sep 9, 2021) .
- ^ zip package - archive/zip - pkg.go.dev. The Go website. (Sep 9, 2021) .
- ^ C言語では %d の様な printf() 関数の第一引数で与えられた文字列のうち、第二引数以降の値を修飾する記号を「変換指定子(conversion specification)」と呼びますが、Goでは「動詞(verbs)」と呼びます。
- ^ fmt package - fmt - pkg.go.dev. The Go website. (Sep 9, 2021) .