<!-- HTML header for doxygen 1.8.6-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.9.1"/>
<title>FlatBuffers: Flatbuffers_go_api</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="https://fonts.googleapis.com/css?family=Roboto:300,400,400italic,500,500italic,700,700italic|Roboto+Mono:400,700" rel="stylesheet">
<link href="style.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea" style="height: 110px;">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="commonprojectlogo">
    <img alt="Logo" src="fpl_logo_small.png"/>
  </td>
  <td style="padding-left: 0.5em;">
   <div id="projectname">FlatBuffers
   </div>
   <div style="font-size:12px;">
    An open source project by <a href="https://developers.google.com/games/#Tools">FPL</a>.
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.1 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search','.html');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(document).ready(function(){initNavTree('group__flatbuffers__go__api.html',''); initResizable(); });
/* @license-end */
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="headertitle">
<div class="title">Flatbuffers_go_api</div>  </div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line">PACKAGE DOCUMENTATION</div>
<div class="line"> </div>
<div class="line"><span class="keyword">package </span>flatbuffers</div>
<div class="line">    Package flatbuffers provides facilities to read and write flatbuffers</div>
<div class="line">    objects.</div>
<div class="line"> </div>
<div class="line">TYPES</div>
<div class="line"> </div>
<div class="line">type Builder struct {</div>
<div class="line">    <span class="comment">// `Bytes` gives raw access to the buffer. Most users will want to use</span></div>
<div class="line">    <span class="comment">// FinishedBytes() instead.</span></div>
<div class="line">    Bytes []byte</div>
<div class="line">}</div>
<div class="line">    Builder is a state machine for creating FlatBuffer objects. Use a</div>
<div class="line">    Builder to construct object(s) starting from leaf nodes.</div>
<div class="line"> </div>
<div class="line">    A Builder constructs byte buffers in a last-first manner for simplicity</div>
<div class="line">    and performance.</div>
<div class="line"> </div>
<div class="line">FUNCTIONS</div>
<div class="line"> </div>
<div class="line">func NewBuilder(initialSize int) *Builder</div>
<div class="line">    NewBuilder initializes a Builder of size `initial_size`. The internal</div>
<div class="line">    buffer is grown as needed.</div>
<div class="line"> </div>
<div class="line">func (b *Builder) CreateByteString(s []byte) UOffsetT</div>
<div class="line">    CreateByteString writes a byte slice as a string (null-terminated).</div>
<div class="line"> </div>
<div class="line">func (b *Builder) CreateByteVector(v []byte) UOffsetT</div>
<div class="line">    CreateByteVector writes a ubyte vector</div>
<div class="line"> </div>
<div class="line">func (b *Builder) CreateString(s string) UOffsetT</div>
<div class="line">    CreateString writes a null-terminated string as a vector.</div>
<div class="line"> </div>
<div class="line">func (b *Builder) EndVector(vectorNumElems int) UOffsetT</div>
<div class="line">    EndVector writes data necessary to finish vector construction.</div>
<div class="line"> </div>
<div class="line">func (b *Builder) Finish(rootTable UOffsetT)</div>
<div class="line">    Finish finalizes a buffer, pointing to the given `rootTable`.</div>
<div class="line"> </div>
<div class="line">func (b *Builder) FinishedBytes() []byte</div>
<div class="line">    FinishedBytes returns a pointer to the written data in the byte buffer.</div>
<div class="line">    Panics if the builder is not in a finished state (which is caused by</div>
<div class="line">    calling `Finish()`).</div>
<div class="line"> </div>
<div class="line">func (b *Builder) Head() UOffsetT</div>
<div class="line">    Head gives the start of useful data in the underlying byte buffer. Note:</div>
<div class="line">    unlike other functions, this value is interpreted as from the left.</div>
<div class="line"> </div>
<div class="line">func (b *Builder) PrependBool(x bool)</div>
<div class="line">    PrependBool prepends a bool to the Builder buffer. Aligns and checks for</div>
<div class="line">    space.</div>
<div class="line"> </div>
<div class="line">func (b *Builder) PrependByte(x byte)</div>
<div class="line">    PrependByte prepends a byte to the Builder buffer. Aligns and checks for</div>
<div class="line">    space.</div>
<div class="line"> </div>
<div class="line">func (b *Builder) PrependFloat32(x float32)</div>
<div class="line">    PrependFloat32 prepends a float32 to the Builder buffer. Aligns and</div>
<div class="line">    checks for space.</div>
<div class="line"> </div>
<div class="line">func (b *Builder) PrependFloat64(x float64)</div>
<div class="line">    PrependFloat64 prepends a float64 to the Builder buffer. Aligns and</div>
<div class="line">    checks for space.</div>
<div class="line"> </div>
<div class="line">func (b *Builder) PrependInt16(x int16)</div>
<div class="line">    PrependInt16 prepends a int16 to the Builder buffer. Aligns and checks</div>
<div class="line">    for space.</div>
<div class="line"> </div>
<div class="line">func (b *Builder) PrependInt32(x int32)</div>
<div class="line">    PrependInt32 prepends a int32 to the Builder buffer. Aligns and checks</div>
<div class="line">    for space.</div>
<div class="line"> </div>
<div class="line">func (b *Builder) PrependInt64(x int64)</div>
<div class="line">    PrependInt64 prepends a int64 to the Builder buffer. Aligns and checks</div>
<div class="line">    for space.</div>
<div class="line"> </div>
<div class="line">func (b *Builder) PrependInt8(x int8)</div>
<div class="line">    PrependInt8 prepends a int8 to the Builder buffer. Aligns and checks for</div>
<div class="line">    space.</div>
<div class="line"> </div>
<div class="line">func (b *Builder) PrependUOffsetT(off UOffsetT)</div>
<div class="line">    PrependUOffsetT prepends an UOffsetT, relative to where it will be</div>
<div class="line">    written.</div>
<div class="line"> </div>
<div class="line">func (b *Builder) PrependUint16(x uint16)</div>
<div class="line">    PrependUint16 prepends a uint16 to the Builder buffer. Aligns and checks</div>
<div class="line">    for space.</div>
<div class="line"> </div>
<div class="line">func (b *Builder) PrependUint32(x uint32)</div>
<div class="line">    PrependUint32 prepends a uint32 to the Builder buffer. Aligns and checks</div>
<div class="line">    for space.</div>
<div class="line"> </div>
<div class="line">func (b *Builder) PrependUint64(x uint64)</div>
<div class="line">    PrependUint64 prepends a uint64 to the Builder buffer. Aligns and checks</div>
<div class="line">    for space.</div>
<div class="line"> </div>
<div class="line">func (b *Builder) PrependUint8(x uint8)</div>
<div class="line">    PrependUint8 prepends a uint8 to the Builder buffer. Aligns and checks</div>
<div class="line">    for space.</div>
<div class="line"> </div>
<div class="line">func (b *Builder) Reset()</div>
<div class="line">    Reset truncates the underlying Builder buffer, facilitating alloc-free</div>
<div class="line">    reuse of a Builder. It also resets bookkeeping data.</div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- Google Analytics -->
<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
  ga('create', 'UA-49880327-7', 'auto');
  ga('send', 'pageview');
</script>
</body>
</html>
