前書き
Go 1.15 のリリースノートをChatGPTで日本語に翻訳しました。
Go 1.15 Release Notes
次のバージョン:Go1.16のリリースノート(日本語訳)
前のバージョン:Go1.14のリリースノート(日本語訳)
リリースノート一覧:Goリリース情報
Go 1.15の紹介
最新のGoリリースであるバージョン1.15は、Go 1.14
から6か月後に登場しました。変更のほとんどは、ツールチェーン、ランタイム、およびライブラリの実装にあります。いつものように、このリリースはGo 1の互換性の約束
を維持しています。ほとんどのGoプログラムは、これまで通りコンパイルおよび実行されることを期待しています。Go 1.15には、リンカの大幅な改善
が含まれており、高コア数での小さなオブジェクトの割り当て
を改善し、X.509 CommonName
を非推奨としています。GOPROXY
はエラーを返すプロキシをスキップすることをサポートし、新しい埋め込みtzdataパッケージ
が追加されました。
言語の変更
言語に変更はありません。
ポート
Darwin
Go 1.14のリリースノートで発表された
ように、Go 1.15はmacOS 10.12 Sierra以降を必要とし、以前のバージョンのサポートは終了しました。Go 1.14のリリースノートで発表された
ように、Go 1.15はmacOS、iOS、iPadOS、watchOS、およびtvOSでの32ビットバイナリのサポートを終了しました(darwin/386
およびdarwin/arm
ポート)。Goは引き続き64ビットのdarwin/amd64
およびdarwin/arm64
ポートをサポートします。
Windows
Goは、-buildmode=pie
cmd/link
フラグが提供された場合にWindows ASLR実行ファイルを生成します。GoコマンドはWindowsでデフォルトで-buildmode=pie
を使用します。-race
および-msan
フラグは、unsafe.Pointer
の使用をチェックする-d=checkptr
を常に有効にします。これは以前はWindows以外のすべてのOSでのケースでした。GoでビルドされたDLLは、信号(例えば、ターミナルでのCtrl-C)を受け取ったときにプロセスを終了させなくなりました。
Android
Android用にバイナリをリンクする際、Go 1.15は最近のNDKバージョンで利用可能なlld
リンカを明示的に選択します。lld
リンカは一部のデバイスでのクラッシュを回避し、将来のNDKバージョンでデフォルトのNDKリンカになる予定です。
OpenBSD
Go 1.15は、GOARCH=arm
およびGOARCH=arm64
でのOpenBSD 6.7のサポートを追加しました。以前のGoバージョンはすでにGOARCH=386
およびGOARCH=amd64
でのOpenBSD 6.7をサポートしていました。
RISC-V
Linux(GOOS=linux
、GOARCH=riscv64
)での64ビットRISC-Vポートの安定性とパフォーマンスの向上が進展しています。また、非同期プリエンプションもサポートしています。
386
Go 1.15は、x87のみの浮動小数点ハードウェア(GO386=387
)をサポートする最後のリリースです。将来のリリースでは、386で少なくともSSE2のサポートが必要となり、Goの最小GOARCH=386
要件がIntel Pentium 4(2000年発売)またはAMD Opteron/Athlon 64(2003年発売)に引き上げられます。
ツール
Goコマンド
GOPROXY
環境変数は、エラーを返すプロキシをスキップすることをサポートするようになりました。プロキシURLは、カンマ(,)またはパイプ文字(|)で区切ることができます。プロキシURLの後にカンマが続く場合、go
コマンドは404または410 HTTPレスポンスの後にのみリスト内の次のプロキシを試みます。プロキシURLの後にパイプ文字が続く場合、go
コマンドはエラーの後にリスト内の次のプロキシを試みます。GOPROXY
のデフォルト値はhttps://proxy.golang.org,direct
のままであり、エラーの場合に直接にフォールバックしません。
go test
-timeout
フラグを変更すると、キャッシュされたテスト結果が無効になります。長いタイムアウトで実行されたテストのキャッシュされた結果は、短いタイムアウトでgo test
が再実行されたときに合格としてカウントされなくなります。
フラグ解析
go test
およびgo vet
のさまざまなフラグ解析の問題が修正されました。特に、GOFLAGS
で指定されたフラグはより一貫して処理され、-outputdir
フラグは相対パスをgo
コマンドの作業ディレクトリに対して解釈するようになりました(各個別のテストの作業ディレクトリではなく)。
モジュールキャッシュ
モジュールキャッシュの場所は、GOMODCACHE
環境変数で設定できるようになりました。GOMODCACHE
のデフォルト値はGOPATH[0]/pkg/mod
であり、これはこの変更前のモジュールキャッシュの場所です。ファイルシステムを同時にスキャンする外部プログラムによって引き起こされる、モジュールキャッシュにアクセスするgo
コマンドでのWindowsの「アクセスが拒否されました」エラーの回避策が利用可能になりました(issue #36568
を参照)。この回避策はデフォルトでは有効になっていません。なぜなら、Goのバージョンが1.14.2未満および1.13.10未満で同じモジュールキャッシュを同時に使用している場合には安全ではないからです。環境変数GODEBUG=modcacheunzipinplace=1
を明示的に設定することで有効にできます。
Vet
string(x)の新しい警告
vet
ツールは、string(x)
の形式の変換について警告するようになりました。ここでx
はrune
またはbyte
以外の整数型です。Goの経験から、この形式の多くの変換が誤ってstring(x)
が整数x
の文字列表現に評価されると仮定していることが示されています。実際には、x
の値のUTF-8エンコーディングを含む文字列に評価されます。例えば、string(9786)
は文字列"9786"には評価されず、文字列"\xe2\x98\xba"、つまり"☺"に評価されます。string(x)
を正しく使用しているコードは、string(rune(x))
に書き換えることができます。または、場合によっては、適切なバイトスライスbuf
を使用してutf8.EncodeRune(buf, x)
を呼び出すことが正しい解決策かもしれません。他のコードはおそらくstrconv.Itoa
またはfmt.Sprint
を使用するべきです。この新しいvet
チェックは、go test
を使用するとデフォルトで有効になります。将来のGoリリースでこの変換を禁止することを検討しています。つまり、言語はx
の型がrune
またはbyte
の場合にのみ整数x
に対してstring(x)
を許可するように変更されます。このような言語の変更は後方互換性がありません。この言語変更に向けた最初の試験的なステップとして、このvet
チェックを使用しています。
不可能なインターフェース変換の新しい警告
vet
ツールは、型アサーションが常に失敗する場合に、あるインターフェース型から別のインターフェース型への型アサーションについて警告するようになりました。これは、両方のインターフェース型が同じ名前のメソッドを異なる型シグネチャで実装している場合に発生します。常に失敗する型アサーションを書く理由はないため、このvet
チェックをトリガーするコードは書き換える必要があります。この新しいvet
チェックは、go test
を使用するとデフォルトで有効になります。将来のGoリリースで不可能なインターフェース型アサーションを禁止することを検討しています。このような言語の変更は後方互換性がありません。この言語変更に向けた最初の試験的なステップとして、このvet
チェックを使用しています。
ランタイム
panic
が以下のいずれかの型から派生した値で呼び出された場合:bool
、complex64
、complex128
、float32
、float64
、int
、int8
、int16
、int32
、int64
、string
、uint
、uint8
、uint16
、uint32
、uint64
、uintptr
、その値がアドレスだけでなく印刷されます。以前は、これらの型に正確に一致する値に対してのみこれが真でした。Unixシステムでは、kill
コマンドまたはkill
システムコールを使用してGoプログラムにSIGSEGV
、SIGBUS
、またはSIGFPE
信号を送信し、信号がos/signal.Notify
を介して処理されていない場合、Goプログラムはスタックトレースとともに確実にクラッシュします。以前のリリースでは、この動作は予測不可能でした。小さなオブジェクトの割り当ては、高コア数でのパフォーマンスが大幅に向上し、最悪のケースのレイテンシーが低下しました。小さな整数値をインターフェース値に変換しても、割り当てが発生しなくなりました。閉じたチャネルでの非ブロッキング受信は、開いたチャネルでの非ブロッキング受信と同様にパフォーマンスが向上しました。
コンパイラ
パッケージunsafe
の安全性ルール
は、特定の関数を呼び出す際にunsafe.Pointer
をuintptr
に変換することを許可しています。以前は、場合によっては、コンパイラは複数の連鎖変換(例えば、syscall.Syscall(…, uintptr(uintptr(ptr)), …)
)を許可していました。コンパイラは現在、正確に1回の変換を要求しています。複数の変換を使用していたコードは、安全性ルールを満たすように更新する必要があります。Go 1.15は、特定のタイプのGCメタデータを排除し、未使用のタイプメタデータをより積極的に排除することにより、Go 1.14と比較して典型的なバイナリサイズを約5%削減します。ツールチェーンは現在、GOARCH=amd64
でIntel CPUエラタSKX102
を緩和するために、関数を32バイト境界に整列させ、ジャンプ命令をパディングします。このパディングはバイナリサイズを増加させますが、上記のバイナリサイズの改善によって十分に補われます。Go 1.15は、コンパイラとアセンブラの両方に-spectre
フラグを追加し、Spectreの緩和を有効にすることができます。これらはほとんど必要とされることはなく、主に「深層防御」メカニズムとして提供されています。詳細については、Spectre wikiページ
を参照してください。コンパイラは、適用される宣言に意味のない//go:
コンパイラディレクティブを「誤ったコンパイラディレクティブ」エラーで拒否するようになりました。このような誤適用されたディレクティブは以前は壊れていましたが、コンパイラによって黙って無視されていました。コンパイラの-json
最適化ログは、128バイト以上の大きなコピーを報告し、エスケープ解析の決定の説明を含むようになりました。
リンカ
このリリースには、Goリンカの大幅な改善が含まれており、リンカのリソース使用量(時間とメモリの両方)を削減し、コードの堅牢性/保守性を向上させます。代表的な大規模Goプログラムのセットでは、リンクが20%速くなり、平均して30%少ないメモリを必要とします。これは、amd64
アーキテクチャで実行されるELFベースのOS(Linux、FreeBSD、NetBSD、OpenBSD、Dragonfly、およびSolaris)でのことです。他のアーキテクチャ/OSの組み合わせでは、より控えめな改善が見られます。リンカのパフォーマンス向上の主な要因は、新しく設計されたオブジェクトファイル形式と、並行性を高めるための内部フェーズの刷新(例えば、シンボルへの再配置を並行して適用すること)です。Go 1.15のオブジェクトファイルは、1.14の同等品よりもわずかに大きくなっています。これらの変更は、Goリンカを近代化する
ための複数リリースプロジェクトの一部であり、将来のリリースで追加のリンカ改善が期待されています。リンカは現在、linux/amd64
およびlinux/arm64
での-buildmode=pie
に対して内部リンクモードをデフォルトにしているため、これらの構成ではCリンカが不要になりました。外部リンクモード(Go 1.14では-buildmode=pie
のデフォルトでした)は、-ldflags=-linkmode=external
フラグで引き続き要求できます。
Objdump
objdump
ツールは、-gnu
フラグを使用してGNUアセンブラ構文での逆アセンブルをサポートするようになりました。
標準ライブラリ
新しい埋め込みtzdataパッケージ
Go 1.15には、新しいパッケージtime/tzdata
が含まれており、プログラムにタイムゾーンデータベースを埋め込むことができます。このパッケージをimport _ "time/tzdata"
としてインポートすると、ローカルシステムでタイムゾーンデータベースが利用できない場合でも、プログラムがタイムゾーン情報を見つけることができます。また、-tags timetzdata
を使用してビルドすることで、タイムゾーンデータベースを埋め込むこともできます。どちらの方法でも、プログラムのサイズが約800 KB増加します。
Cgo
Go 1.15は、CタイプEGLConfig
をGoタイプuintptr
に変換します。この変更は、Go 1.12以降がEGLDisplay
、DarwinのCoreFoundation、およびJavaのJNIタイプをどのように扱うかに似ています。詳細については、cgoドキュメント
を参照してください。Go 1.15.3以降、cgoはGoコードが未定義の構造体型(struct S;
または類似のC構造体)をスタックまたはヒープに割り当てることを許可しません。Goコードはこれらの型へのポインタのみを使用することが許可されます。このような構造体のインスタンスを割り当て、ポインタまたは完全な構造体値をCコードに渡すことは常に安全ではなく、正しく動作する可能性は低かったため、現在は禁止されています。修正方法は、Goコードをポインタのみを使用するように書き換えるか、適切なCヘッダーファイルを含めてGoコードが構造体の完全な定義を確認できるようにすることです。
X.509 CommonNameの非推奨
X.509証明書のCommonName
フィールドを、Subject Alternative Names
が存在しない場合にホスト名として扱うという非推奨のレガシー動作は、デフォルトで無効になりました。GODEBUG
環境変数にx509ignoreCN=0
の値を追加することで、一時的に再有効化できます。CommonName
が無効なホスト名である場合、それは常に無視されます。無効な名前には、文字、数字、ハイフン、アンダースコア以外の文字を含むもの、空のラベルを持つもの、または末尾にドットがあるものが含まれます。
ライブラリの小さな変更
いつものように、Go 1の互換性の約束 を念頭に置いて、ライブラリにさまざまな小さな変更と更新が行われています。
bufio
Scanner
が無効なio.Reader
とともに使用され、Read
から負の数を誤って返す場合、Scanner
はパニックを起こさず、新しいエラーErrBadReadCount
を返します。
context
nil
の親を使用して派生したContext
を作成することは、明示的に禁止されるようになりました。WithValue
、WithDeadline
、またはWithCancel
関数を使用してこれを試みると、パニックが発生します。
crypto
crypto/rsa
、crypto/ecdsa
、およびcrypto/ed25519
パッケージのPrivateKey
およびPublicKey
型には、キーを等価性で比較したり、公開キーの型安全なインターフェースを作成したりするためのEqual
メソッドが追加されました。メソッドシグネチャは、go-cmpの等価性の定義
と互換性があります。Hash
は、fmt.Stringer
を実装するようになりました。
crypto/ecdsa
新しいSignASN1 およびVerifyASN1 関数により、標準のASN.1 DERエンコーディングでECDSA署名を生成および検証できます。
crypto/elliptic
新しいMarshalCompressed およびUnmarshalCompressed 関数により、NIST楕円曲線ポイントを圧縮形式でエンコードおよびデコードできます。
crypto/rsa
VerifyPKCS1v15 は、RFC 8017に従って、先頭のゼロが欠落している無効な短い署名を拒否するようになりました。
crypto/tls
新しいDialer
型とそのDialContext
メソッドにより、TLSサーバーとの接続とハンドシェイクの両方にコンテキストを使用できます。新しいVerifyConnection
コールバックは、Config
型にあり、各接続に対してカスタム検証ロジックを許可します。これは、ピア証明書、SCT、およびステープルOCSPレスポンスを含むConnectionState
にアクセスできます。自動生成されたセッションチケットキーは、前方秘匿性への影響を制限するために、24時間ごとに自動的に回転され、寿命は7日間です。TLS 1.2およびそれ以前のセッションチケットの寿命は、再開された接続でセッションキーが再利用されるため、前方秘匿性への影響を制限するために7日間に制限されます。RFC 8446で指定されたクライアント側のダウングレード保護チェックが現在強制されています。これは、許可されていないダウングレード攻撃のように振る舞うミドルボックスに遭遇するクライアントに接続エラーを引き起こす可能性があります。SignatureScheme
、CurveID
、およびClientAuthType
は、fmt.Stringer
を実装するようになりました。ConnectionState
フィールドOCSPResponse
およびSignedCertificateTimestamps
は、クライアント側の再開された接続で再度設定されます。tls.Conn
は、恒久的に壊れた接続で不透明なエラーを返し、一時的なnet.Error
をラップします。元のnet.Error
にアクセスするには、型アサーションの代わりにerrors.As
(またはerrors.Unwrap
)を使用します。
crypto/x509
証明書の名前または検証される名前(VerifyOptions.DNSName
またはVerifyHostname
を使用)が無効な場合、それらはワイルドカードを尊重したり末尾のドットを削除したりせずに、ケースインセンシティブに比較されます。無効な名前には、文字、数字、ハイフン、アンダースコア以外の文字を含むもの、空のラベルを持つもの、および証明書上の末尾にドットがあるものが含まれます。新しいCreateRevocationList
関数とRevocationList
型により、RFC 5280準拠のX.509 v2証明書失効リストを作成できます。CreateCertificate
は、テンプレートがCAであり、明示的に指定されていない場合、SubjectKeyId
を自動的に生成します。CreateCertificate
は、テンプレートがMaxPathLen
を指定しているがCAではない場合、エラーを返すようになりました。macOS以外のUnixシステムでは、SSL_CERT_DIR
環境変数はコロンで区切られたリストにすることができます。macOSでは、cgo
が利用可能かどうかに関係なく、バイナリは常にSecurity.framework
にリンクされ、システムの信頼ルートを抽出します。結果として得られる動作は、OSの検証者とより一貫しているはずです。
crypto/x509/pkix
Name.String
は、ExtraNames
がnil
の場合、Names
からの非標準属性を印刷するようになりました。
database/sql
新しいDB.SetConnMaxIdleTime
メソッドにより、接続プールから接続を削除することができるようになりました。接続の総寿命に関係なく、一定期間アイドル状態であった後に削除されます。DBStats.MaxIdleTimeClosed
フィールドは、DB.SetConnMaxIdleTime
によって閉じられた接続の総数を示します。新しいRow.Err
ゲッターにより、Row.Scan
を呼び出さずにクエリエラーを確認できます。
database/sql/driver
新しいValidator
インターフェースは、接続が有効かどうか、または破棄されるべきかどうかをドライバーが通知できるようにするためにConn
によって実装される場合があります。
debug/pe
パッケージは現在、PEファイル形式で使用されるIMAGE_FILE
、IMAGE_SUBSYSTEM
、およびIMAGE_DLLCHARACTERISTICS
定数を定義しています。
encoding/asn1
Marshal
は、SET OF
のコンポーネントをX.690 DERに従ってソートするようになりました。Unmarshal
は、X.690 DERに従って最小限にエンコードされていないタグとオブジェクト識別子を拒否するようになりました。
encoding/json
パッケージには、デコード時の最大ネスト深度に内部制限が設けられました。これにより、深くネストされた入力が大量のスタックメモリを使用する可能性や、「goroutine stack exceeds limit」パニックを引き起こす可能性が減少します。
flag
flag
パッケージが-h
または-help
を検出し、それらのフラグが定義されていない場合、使用メッセージを印刷するようになりました。FlagSet
がExitOnError
で作成された場合、FlagSet.Parse
はステータス2で終了します。このリリースでは、-h
または-help
の終了ステータスが0に変更されました。特に、コマンドラインフラグのデフォルト処理に適用されます。
fmt
印刷動詞%#g
および%#G
は、浮動小数点値の末尾のゼロを保持するようになりました。
go/format
Source およびNode 関数は、Goソースコードをフォーマットする際に数値リテラルのプレフィックスと指数を正規化するようになりました。これは、Go 1.13以降 に実装されたgofmt コマンドの動作と一致します。
html/template
パッケージは現在、すべてのJavaScriptおよびJSONコンテキストでUnicodeエスケープ(\uNNNN
)を使用しています。これにより、application/ld+json
およびapplication/json
コンテキストでのエスケープエラーが修正されます。
io/ioutil
TempDir
およびTempFile
は、パスセパレータを含むパターンを拒否するようになりました。つまり、ioutil.TempFile("/tmp", "../base*")
のような呼び出しは成功しなくなります。これにより、意図しないディレクトリトラバーサルが防止されます。
math/big
新しいInt.FillBytes メソッドにより、固定サイズの事前割り当てされたバイトスライスにシリアル化できます。
math/cmplx
このパッケージの関数は、無限大、NaN、および符号付きゼロなどの特殊な引数の処理に関して、C99標準(IEC 60559互換の複素数演算)に準拠するように更新されました。
net
Conn.SetDeadline
、Conn.SetReadDeadline
、またはConn.SetWriteDeadline
メソッドで設定された期限を超えるI/O操作は、現在、os.ErrDeadlineExceeded
を返すエラーを返します。これにより、エラーが期限超過によるものであるかどうかを確実に検出できます。以前のリリースでは、エラーのTimeout
メソッドを呼び出すことが推奨されていましたが、I/O操作は、期限が超過していない場合でもTimeout
がtrue
を返すエラーを返す可能性があります。新しいResolver.LookupIP
メソッドは、ネットワーク固有のIPルックアップをサポートし、コンテキストを受け入れます。
net/http
解析は、リクエストスミアリング攻撃に対する強化措置として、より厳格になりました:非ASCIIホワイトスペースはSPおよびHTABのようにトリムされなくなり、「identity」転送エンコーディングのサポートが削除されました。
net/http/httputil
ReverseProxy
は、Request.Header
マップエントリがnil
の場合にX-Forwarded-For
ヘッダーを変更しないことをサポートするようになりました。ReverseProxy
によって処理されるプロトコル切り替え(WebSocketなど)のリクエストがキャンセルされた場合、バックエンド接続が正しく閉じられるようになりました。
net/http/pprof
すべてのプロファイルエンドポイントは、現在「秒」パラメータをサポートしています。指定された秒数のプロファイルを行い、差分を報告します。CPUプロファイルおよびトレースエンドポイントでの「秒」パラメータの意味は変更されていません。
net/url
新しいURL
フィールドRawFragment
およびメソッドEscapedFragment
は、特定のフラグメントの正確なエンコーディングに関する詳細を提供し、制御します。これらはRawPath
およびEscapedPath
に類似しています。新しいURL
メソッドRedacted
は、パスワードをxxxxx
に置き換えた文字列形式のURLを返します。
os
File.SetDeadline
、File.SetReadDeadline
、またはFile.SetWriteDeadline
メソッドで設定された期限を超えるI/O操作は、現在、os.ErrDeadlineExceeded
を返すエラーを返します。これにより、エラーが期限超過によるものであるかどうかを確実に検出できます。以前のリリースでは、エラーのTimeout
メソッドを呼び出すことが推奨されていましたが、I/O操作は、期限が超過していない場合でもTimeout
がtrue
を返すエラーを返す可能性があります。os
およびnet
パッケージは、EINTR
で失敗するシステムコールを自動的に再試行するようになりました。以前は、これは誤った失敗を引き起こし、Go 1.14で非同期プリエンプションが追加されたことでより一般的になりました。現在、これは透過的に処理されます。os.File
型は、ReadFrom
メソッドをサポートするようになりました。これにより、いくつかのシステムでio.Copy
を使用してデータを1つのos.File
から別のos.File
にコピーする際にcopy_file_range
システムコールを使用できるようになります。その結果、io.CopyBuffer
は、os.File
にコピーする際に常に提供されたバッファを使用するわけではありません。プログラムが提供されたバッファの使用を強制したい場合は、io.CopyBuffer(struct{ io.Writer }{dst}, src, buf)
と書くことで実現できます。
plugin
DWARF生成は、macOSで-buildmode=plugin
に対してサポートされ(デフォルトで有効)、FreeBSD/amd64での-buildmode=plugin
でのビルドがサポートされるようになりました。
reflect
パッケージreflect
は、すべての非エクスポートフィールドのメソッドへのアクセスを禁止するようになりました。以前は、非エクスポートの埋め込みフィールドのメソッドへのアクセスを許可していました。以前の動作に依存しているコードは、代わりに囲む変数の対応する昇格メソッドにアクセスするように更新する必要があります。
regexp
新しいRegexp.SubexpIndex メソッドは、正規表現内で指定された名前を持つ最初のサブ式のインデックスを返します。
runtime
ReadMemStats やGoroutineProfile などのいくつかの関数は、ガベージコレクションが進行中の場合にブロックしなくなりました。
runtime/pprof
ゴルーチンプロファイルには、プロファイリング時に各ゴルーチンに関連付けられたプロファイルラベルが含まれるようになりました。この機能は、debug=2
で報告されるプロファイルにはまだ実装されていません。
strconv
FormatComplex
およびParseComplex
が追加され、複素数を扱うことができます。FormatComplex
は、複素数を(a+bi)
の形式の文字列に変換します。ここで、a
とb
は実部と虚部です。ParseComplex
は、指定された精度の複素数を文字列から変換します。ParseComplex
は、N+Ni
形式の複素数を受け入れます。
sync
新しいメソッドMap.LoadAndDelete は、キーを削除し、以前の値が存在する場合はそれを返します。メソッドMap.Delete は、より効率的になりました。
syscall
Unixシステムでは、SysProcAttr
を使用する関数は、Setctty
とForeground
フィールドの両方を設定しようとする試みを拒否するようになりました。これらは両方ともCtty
フィールドを使用しますが、互換性のない方法で使用します。既存のプログラムが両方のフィールドを設定することはほとんどないと予想しています。Setctty
フィールドを設定するには、Ctty
フィールドが子プロセスのファイルディスクリプタ番号に設定されている必要があります。これは、ProcAttr.Files
フィールドによって決定されます。子ディスクリプタを使用することは常に機能しましたが、親ファイルディスクリプタを使用することも機能する場合がありました。Setctty
を設定するプログラムの一部は、Ctty
の値を子ディスクリプタ番号に変更する必要があります。windows/amd64
で浮動小数点値を返すシステムコールを呼び出すことが可能になりました
。
testing
testing.T
型には、テストバイナリがタイムアウトを超えた時間を報告するDeadline
メソッドが追加されました。TestMain
関数は、os.Exit
を呼び出す必要がなくなりました。TestMain
関数が戻ると、テストバイナリはm.Run
によって返された値でos.Exit
を呼び出します。新しいメソッドT.TempDir
およびB.TempDir
は、テストの終了時に自動的にクリーンアップされる一時ディレクトリを返します。go test -v
は、各行にテスト名を印刷するのではなく、テスト名で出力をグループ化するようになりました。
text/template
JSEscape
は、JSONと互換性のあるUnicodeエスケープ(\u00XX
)を一貫して使用するようになりました。
time
新しいメソッドTicker.Reset は、ティッカーの期間を変更することをサポートします。ParseDuration がエラーを返す場合、元の値を引用するようになりました。