1 // Copyright 2020 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4 5 // Package unsafeheader contains header declarations for the Go runtime's slice
6 // and string implementations.
7 //
8 // This package allows packages that cannot import "reflect" to use types that
9 // are tested to be equivalent to reflect.SliceHeader and reflect.StringHeader.
10 package unsafeheader
11 12 import (
13 "unsafe"
14 )
15 16 // Slice is the runtime representation of a slice.
17 // It cannot be used safely or portably and its representation may
18 // change in a later release.
19 //
20 // Unlike reflect.SliceHeader, its Data field is sufficient to guarantee the
21 // data it references will not be garbage collected.
22 type Slice struct {
23 Data unsafe.Pointer
24 Len int
25 Cap int
26 }
27 28 // String is the runtime representation of a string.
29 // It cannot be used safely or portably and its representation may
30 // change in a later release.
31 //
32 // Unlike reflect.StringHeader, its Data field is sufficient to guarantee the
33 // data it references will not be garbage collected.
34 type String struct {
35 Data unsafe.Pointer
36 Len int
37 Cap int
38 }
39