]> Cypherpunks repositories - gostls13.git/commitdiff
unsafe: document the behavior of Sizeof on an interface
authorNayef Ghattas <nayef.ghattas@datadoghq.com>
Thu, 16 May 2024 21:04:29 +0000 (23:04 +0200)
committerGopher Robot <gobot@golang.org>
Tue, 21 May 2024 19:45:20 +0000 (19:45 +0000)
unsafe.Sizeof() can return a different value than
reflect.TypeOf(x).Size() for a variable of an interface static type.
This change points out the difference in behavior, by emphasizing that
unsafe.Sizeof() only returns the size of the interface value itself,
rather than the size of the value stored in the interface.

Fixes #67465.

Change-Id: Ia6a809debb7970be171b0fc186209e5d161784e7
Reviewed-on: https://go-review.googlesource.com/c/go/+/586275
Auto-Submit: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Ian Lance Taylor <iant@google.com>
Reviewed-by: Carlos Amedee <carlos@golang.org>
Reviewed-by: Felix Geisendörfer <felix.geisendoerfer@datadoghq.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Commit-Queue: Ian Lance Taylor <iant@golang.org>

src/unsafe/unsafe.go

index 884ef6a85590d6f607bca0eed17ec144ff712c62..8d6cacb8b559b97f8fd76b6f9b1450a4b86d63a7 100644 (file)
@@ -187,7 +187,9 @@ type Pointer *ArbitraryType
 // of a hypothetical variable v as if v was declared via var v = x.
 // The size does not include any memory possibly referenced by x.
 // For instance, if x is a slice, Sizeof returns the size of the slice
-// descriptor, not the size of the memory referenced by the slice.
+// descriptor, not the size of the memory referenced by the slice;
+// if x is an interface, Sizeof returns the size of the interface value itself,
+// not the size of the value stored in the interface.
 // For a struct, the size includes any padding introduced by field alignment.
 // The return value of Sizeof is a Go constant if the type of the argument x
 // does not have variable size.