.gitignore added
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / honnef.co / go / tools@v0.1.1 / cmd / structlayout / README.md
1 # structlayout
2
3 The _structlayout_ utility prints the layout of a struct – that is the
4 byte offset and size of each field, respecting alignment/padding.
5
6 The information is printed in human-readable form by default, but can
7 be emitted as JSON with the `-json` flag. This makes it easy to
8 consume this information in other tools.
9
10 A utility called _structlayout-pretty_ takes this JSON and prints an
11 ASCII graphic representing the memory layout.
12
13 _structlayout-optimize_ is another tool. Inspired by
14 [maligned](https://github.com/mdempsky/maligned), it reads
15 _structlayout_ JSON on stdin and reorders fields to minimize the
16 amount of padding. The tool can itself emit JSON and feed into e.g.
17 _structlayout-pretty_.
18
19 _structlayout-svg_ is a third-party tool that, similarly to
20 _structlayout-pretty_, visualises struct layouts. It does so by
21 generating a fancy-looking SVG graphic. You can install it via
22
23 ```
24 go get github.com/ajstarks/svgo/structlayout-svg
25 ```
26
27 ## Installation
28
29 See [the main README](https://github.com/dominikh/go-tools#installation) for installation instructions.
30
31 ## Examples
32
33 ```
34 $ structlayout bufio Reader
35 Reader.buf []byte: 0-24 (24 bytes)
36 Reader.rd io.Reader: 24-40 (16 bytes)
37 Reader.r int: 40-48 (8 bytes)
38 Reader.w int: 48-56 (8 bytes)
39 Reader.err error: 56-72 (16 bytes)
40 Reader.lastByte int: 72-80 (8 bytes)
41 Reader.lastRuneSize int: 80-88 (8 bytes)
42 ```
43
44 ```
45 $ structlayout -json bufio Reader | jq .
46 [
47   {
48     "name": "Reader.buf",
49     "type": "[]byte",
50     "start": 0,
51     "end": 24,
52     "size": 24,
53     "is_padding": false
54   },
55   {
56     "name": "Reader.rd",
57     "type": "io.Reader",
58     "start": 24,
59     "end": 40,
60     "size": 16,
61     "is_padding": false
62   },
63   {
64     "name": "Reader.r",
65     "type": "int",
66     "start": 40,
67     "end": 48,
68     "size": 8,
69     "is_padding": false
70   },
71 ...
72 ```
73
74 ```
75 $ structlayout -json bufio Reader | structlayout-pretty 
76     +--------+
77   0 |        | <- Reader.buf []byte
78     +--------+
79     -........-
80     +--------+
81  23 |        |
82     +--------+
83  24 |        | <- Reader.rd io.Reader
84     +--------+
85     -........-
86     +--------+
87  39 |        |
88     +--------+
89  40 |        | <- Reader.r int
90     +--------+
91     -........-
92     +--------+
93  47 |        |
94     +--------+
95  48 |        | <- Reader.w int
96     +--------+
97     -........-
98     +--------+
99  55 |        |
100     +--------+
101  56 |        | <- Reader.err error
102     +--------+
103     -........-
104     +--------+
105  71 |        |
106     +--------+
107  72 |        | <- Reader.lastByte int
108     +--------+
109     -........-
110     +--------+
111  79 |        |
112     +--------+
113  80 |        | <- Reader.lastRuneSize int
114     +--------+
115     -........-
116     +--------+
117  87 |        |
118     +--------+
119 ```
120
121 ```
122 $ structlayout -json bytes Buffer | structlayout-svg -t "bytes.Buffer" > /tmp/struct.svg
123 ```
124
125 ![memory layout of bytes.Buffer](/images/screenshots/struct.png)