0
私はこのコード行がioutil
パッケージから何をするのか疑問に思います。同じ値を2回比較するように見えますが、片側を2回キャストします。どんな洞察も大いに評価されるだろう!ioutilパッケージの同じ値を比較していますか?
int64(int(capacity)) == capacity
func readAll(r io.Reader, capacity int64) (b []byte, err error) {
var buf bytes.Buffer
// If the buffer overflows, we will get bytes.ErrTooLarge.
// Return that as an error. Any other panic remains.
defer func() {
e := recover()
if e == nil {
return
}
if panicErr, ok := e.(error); ok && panicErr == bytes.ErrTooLarge {
err = panicErr
} else {
panic(e)
}
}()
if int64(int(capacity)) == capacity {
buf.Grow(int(capacity))
}
_, err = buf.ReadFrom(r)
return buf.Bytes(), err
}
整数のオーバーフローをチェックしています。 –
ああ、ありがとう、 –
小さな技術的な詳細: 'しかし、それを2回キャストする ' - Goはタイプキャストを実行せず、タイプ変換のみを行います。 – Flimzy