.gitignore added
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / honnef.co / go / tools@v0.1.1 / cmd / structlayout / README.md
diff --git a/.config/coc/extensions/coc-go-data/tools/pkg/mod/honnef.co/go/tools@v0.1.1/cmd/structlayout/README.md b/.config/coc/extensions/coc-go-data/tools/pkg/mod/honnef.co/go/tools@v0.1.1/cmd/structlayout/README.md
new file mode 100644 (file)
index 0000000..5667ed4
--- /dev/null
@@ -0,0 +1,125 @@
+# structlayout
+
+The _structlayout_ utility prints the layout of a struct – that is the
+byte offset and size of each field, respecting alignment/padding.
+
+The information is printed in human-readable form by default, but can
+be emitted as JSON with the `-json` flag. This makes it easy to
+consume this information in other tools.
+
+A utility called _structlayout-pretty_ takes this JSON and prints an
+ASCII graphic representing the memory layout.
+
+_structlayout-optimize_ is another tool. Inspired by
+[maligned](https://github.com/mdempsky/maligned), it reads
+_structlayout_ JSON on stdin and reorders fields to minimize the
+amount of padding. The tool can itself emit JSON and feed into e.g.
+_structlayout-pretty_.
+
+_structlayout-svg_ is a third-party tool that, similarly to
+_structlayout-pretty_, visualises struct layouts. It does so by
+generating a fancy-looking SVG graphic. You can install it via
+
+```
+go get github.com/ajstarks/svgo/structlayout-svg
+```
+
+## Installation
+
+See [the main README](https://github.com/dominikh/go-tools#installation) for installation instructions.
+
+## Examples
+
+```
+$ structlayout bufio Reader
+Reader.buf []byte: 0-24 (24 bytes)
+Reader.rd io.Reader: 24-40 (16 bytes)
+Reader.r int: 40-48 (8 bytes)
+Reader.w int: 48-56 (8 bytes)
+Reader.err error: 56-72 (16 bytes)
+Reader.lastByte int: 72-80 (8 bytes)
+Reader.lastRuneSize int: 80-88 (8 bytes)
+```
+
+```
+$ structlayout -json bufio Reader | jq .
+[
+  {
+    "name": "Reader.buf",
+    "type": "[]byte",
+    "start": 0,
+    "end": 24,
+    "size": 24,
+    "is_padding": false
+  },
+  {
+    "name": "Reader.rd",
+    "type": "io.Reader",
+    "start": 24,
+    "end": 40,
+    "size": 16,
+    "is_padding": false
+  },
+  {
+    "name": "Reader.r",
+    "type": "int",
+    "start": 40,
+    "end": 48,
+    "size": 8,
+    "is_padding": false
+  },
+...
+```
+
+```
+$ structlayout -json bufio Reader | structlayout-pretty 
+    +--------+
+  0 |        | <- Reader.buf []byte
+    +--------+
+    -........-
+    +--------+
+ 23 |        |
+    +--------+
+ 24 |        | <- Reader.rd io.Reader
+    +--------+
+    -........-
+    +--------+
+ 39 |        |
+    +--------+
+ 40 |        | <- Reader.r int
+    +--------+
+    -........-
+    +--------+
+ 47 |        |
+    +--------+
+ 48 |        | <- Reader.w int
+    +--------+
+    -........-
+    +--------+
+ 55 |        |
+    +--------+
+ 56 |        | <- Reader.err error
+    +--------+
+    -........-
+    +--------+
+ 71 |        |
+    +--------+
+ 72 |        | <- Reader.lastByte int
+    +--------+
+    -........-
+    +--------+
+ 79 |        |
+    +--------+
+ 80 |        | <- Reader.lastRuneSize int
+    +--------+
+    -........-
+    +--------+
+ 87 |        |
+    +--------+
+```
+
+```
+$ structlayout -json bytes Buffer | structlayout-svg -t "bytes.Buffer" > /tmp/struct.svg
+```
+
+![memory layout of bytes.Buffer](/images/screenshots/struct.png)