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.

-rob


On Mon, Feb 26, 2018 at 4:43 AM, Marvin Renich <m...@renich.org> wrote:

> * d...@veryhaha.com <d...@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+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.

Reply via email to