No. As I said, there are no guarantees. As it says in https://golang.org/doc/go1compat:
- Use of package unsafe. Packages that import unsafe <https://golang.org/pkg/unsafe/> may depend on internal properties of the Go implementation. We reserve the right to make changes to the implementation that may break such programs. On Mon, Feb 26, 2018 at 1:15 PM, <d...@veryhaha.com> wrote: > > > On Sunday, February 25, 2018 at 7:38:22 PM UTC-5, Rob 'Commander' Pike > wrote: >> >> The main rule about unsafe is that your program might work or might not. >> There are no guarantees either way. That's why it's called 'unsafe' and why >> you shouldn't use it. Your program that 'works' today could break tomorrow. >> > > ok, but, is there always an unsafe alternative/variant existing later? > > >> >> -rob >> >> >> On Mon, Feb 26, 2018 at 4:43 AM, Marvin Renich <mr...@renich.org> wrote: >> >>> * di...@veryhaha.com <di...@veryhaha.com> [180225 11:37]: >>> > I think I get it. >>> > Because the above program tries to modify the constant (or program) >>> zone, >>> > which is not allowed. >>> > The following program works: >>> >>> But, note that the language spec does not guarantee it to work. The >>> compiler is free to recognize what that first line is doing and optimize >>> the assignment into a string in a R/O memory segment. The optimization >>> is legal because the compiler does not have to recognize the use of >>> unsafe to determine the programmer's intent to subvert the type system. >>> >>> > package main >>> > >>> > import "fmt" >>> > import "unsafe" >>> > import "reflect" >>> > >>> > func main() { >>> > s := string([]byte{'k', 'e', 'e', 'p'}) >>> > hdr := (*reflect.StringHeader)(unsafe.Pointer(&s)) >>> > byteSequence := (*byte)(unsafe.Pointer(hdr.Data)) >>> > fmt.Println(string(*byteSequence)) // k >>> > *byteSequence = 'j' // crash here >>> > fmt.Println(s) // expect: jeep >>> > } >>> >>> ...Marvin >>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "golang-nuts" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to golang-nuts...@googlegroups.com. >>> For more options, visit https://groups.google.com/d/optout. >>> >> >> -- > You received this message because you are subscribed to the Google Groups > "golang-nuts" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to golang-nuts+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.