-
Notifications
You must be signed in to change notification settings - Fork 18.4k
Closed
Labels
FrozenDueToAgeNeedsDecisionFeedback is required from experts, contributors, and/or the community before a change can be made.Feedback is required from experts, contributors, and/or the community before a change can be made.
Milestone
Description
What version of Go are you using (go version
)?
go version go1.9.2 linux/amd64
Does this issue reproduce with the latest release?
yes
What did you do?
It looks the definitions for slice of bytes
are not consistent between spec and the builtin
docs.
In spec
A non-constant value x can be converted to type T in any of these cases:
...
* x is a string and T is a slice of bytes or runes.
In he builtin
docs
The copy built-in function ....
(As a special case, it also will copy bytes from a string to a slice of bytes.)
However:
package main
type T byte
func main() {
var x []T
str := "abc"
x = []T(str) // okay
copy(x, str) // arguments to copy have different element types: []T and string
_ = append(x, str...) // cannot use <node SPTR> (type *uint8) as type *T in argument to runtime.memmove
}
[edit] It looks []T
is treated as a slice of bytes in x = []T(str)
, but not in the copy and append calls.
What did you expect to see?
all fail to compile or all compile okay.
What did you see instead?
non-consistent behavior
Metadata
Metadata
Assignees
Labels
FrozenDueToAgeNeedsDecisionFeedback is required from experts, contributors, and/or the community before a change can be made.Feedback is required from experts, contributors, and/or the community before a change can be made.
Type
Projects
Status
Done