Never recommend using reflect.SliceHeader, as it can not be used safely or portably.
diff --git a/cgo.md b/cgo.md
index 9373ae8..70571f0 100644
--- a/cgo.md
+++ b/cgo.md
@@ -245,28 +245,7 @@
Go provides the following function to make a new Go byte slice from a C array:
* ` func C.GoBytes(cArray unsafe.Pointer, length C.int) []byte `
-To create a Go slice backed by a C array (without copying the original data), one needs to acquire this length at runtime and use ` reflect.SliceHeader `.
-
-```go
-import "C"
-import "unsafe"
-...
- var theCArray *C.YourType = C.getTheArray()
- length := int(C.getTheArrayLength())
- hdr := reflect.SliceHeader{
- Data: uintptr(unsafe.Pointer(theCArray)),
- Len: length,
- Cap: length,
- }
- goSlice := *(*[]C.YourType)(unsafe.Pointer(&hdr))
- // now goSlice is a Go slice backed by the C array
-```
-
-It is important to keep in mind that the Go garbage collector will not interact with this data, and that if it is freed from the C side of things, the behavior of any Go code using the slice is nondeterministic.
-
-Another simpler solution is casting the pointer to a pointer to a very big array and then
-slice it to the length that you want (also remember to set the cap if you're using Go 1.2
-or later), for example (see http://play.golang.org/p/XuC0xqtAIC for a runnable example):
+To create a Go slice backed by a C array (without copying the original data), one needs to acquire this length at runtime and use a type conversion to a pointer to a very big array and then slice it to the length that you want (also remember to set the cap if you're using Go 1.2 or later), for example (see http://play.golang.org/p/XuC0xqtAIC for a runnable example):
```go
import "C"
@@ -277,6 +256,8 @@
slice := (*[1 << 30]C.YourType)(unsafe.Pointer(theCArray))[:length:length]
```
+It is important to keep in mind that the Go garbage collector will not interact with this data, and that if it is freed from the C side of things, the behavior of any Go code using the slice is nondeterministic.
+
## Common Pitfalls
### Struct Alignment Issues
As Go doesn't support packed struct (e.g., structs where maximum alignment is 1 byte), you can't