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) .