github.com/mattn/go@v0.0.0-20171011075504-07f7db3ea99f/doc/go_spec.html (about)

     1  <!--{
     2  	"Title": "The Go Programming Language Specification",
     3  	"Subtitle": "Version of September 19, 2017",
     4  	"Path": "/ref/spec"
     5  }-->
     6  
     7  <h2 id="Introduction">Introduction</h2>
     8  
     9  <p>
    10  This is a reference manual for the Go programming language. For
    11  more information and other documents, see <a href="/">golang.org</a>.
    12  </p>
    13  
    14  <p>
    15  Go is a general-purpose language designed with systems programming
    16  in mind. It is strongly typed and garbage-collected and has explicit
    17  support for concurrent programming.  Programs are constructed from
    18  <i>packages</i>, whose properties allow efficient management of
    19  dependencies. The existing implementations use a traditional
    20  compile/link model to generate executable binaries.
    21  </p>
    22  
    23  <p>
    24  The grammar is compact and regular, allowing for easy analysis by
    25  automatic tools such as integrated development environments.
    26  </p>
    27  
    28  <h2 id="Notation">Notation</h2>
    29  <p>
    30  The syntax is specified using Extended Backus-Naur Form (EBNF):
    31  </p>
    32  
    33  <pre class="grammar">
    34  Production  = production_name "=" [ Expression ] "." .
    35  Expression  = Alternative { "|" Alternative } .
    36  Alternative = Term { Term } .
    37  Term        = production_name | token [ "…" token ] | Group | Option | Repetition .
    38  Group       = "(" Expression ")" .
    39  Option      = "[" Expression "]" .
    40  Repetition  = "{" Expression "}" .
    41  </pre>
    42  
    43  <p>
    44  Productions are expressions constructed from terms and the following
    45  operators, in increasing precedence:
    46  </p>
    47  <pre class="grammar">
    48  |   alternation
    49  ()  grouping
    50  []  option (0 or 1 times)
    51  {}  repetition (0 to n times)
    52  </pre>
    53  
    54  <p>
    55  Lower-case production names are used to identify lexical tokens.
    56  Non-terminals are in CamelCase. Lexical tokens are enclosed in
    57  double quotes <code>""</code> or back quotes <code>``</code>.
    58  </p>
    59  
    60  <p>
    61  The form <code>a … b</code> represents the set of characters from
    62  <code>a</code> through <code>b</code> as alternatives. The horizontal
    63  ellipsis <code>…</code> is also used elsewhere in the spec to informally denote various
    64  enumerations or code snippets that are not further specified. The character <code>…</code>
    65  (as opposed to the three characters <code>...</code>) is not a token of the Go
    66  language.
    67  </p>
    68  
    69  <h2 id="Source_code_representation">Source code representation</h2>
    70  
    71  <p>
    72  Source code is Unicode text encoded in
    73  <a href="http://en.wikipedia.org/wiki/UTF-8">UTF-8</a>. The text is not
    74  canonicalized, so a single accented code point is distinct from the
    75  same character constructed from combining an accent and a letter;
    76  those are treated as two code points.  For simplicity, this document
    77  will use the unqualified term <i>character</i> to refer to a Unicode code point
    78  in the source text.
    79  </p>
    80  <p>
    81  Each code point is distinct; for instance, upper and lower case letters
    82  are different characters.
    83  </p>
    84  <p>
    85  Implementation restriction: For compatibility with other tools, a
    86  compiler may disallow the NUL character (U+0000) in the source text.
    87  </p>
    88  <p>
    89  Implementation restriction: For compatibility with other tools, a
    90  compiler may ignore a UTF-8-encoded byte order mark
    91  (U+FEFF) if it is the first Unicode code point in the source text.
    92  A byte order mark may be disallowed anywhere else in the source.
    93  </p>
    94  
    95  <h3 id="Characters">Characters</h3>
    96  
    97  <p>
    98  The following terms are used to denote specific Unicode character classes:
    99  </p>
   100  <pre class="ebnf">
   101  newline        = /* the Unicode code point U+000A */ .
   102  unicode_char   = /* an arbitrary Unicode code point except newline */ .
   103  unicode_letter = /* a Unicode code point classified as "Letter" */ .
   104  unicode_digit  = /* a Unicode code point classified as "Number, decimal digit" */ .
   105  </pre>
   106  
   107  <p>
   108  In <a href="http://www.unicode.org/versions/Unicode8.0.0/">The Unicode Standard 8.0</a>,
   109  Section 4.5 "General Category" defines a set of character categories.
   110  Go treats all characters in any of the Letter categories Lu, Ll, Lt, Lm, or Lo
   111  as Unicode letters, and those in the Number category Nd as Unicode digits.
   112  </p>
   113  
   114  <h3 id="Letters_and_digits">Letters and digits</h3>
   115  
   116  <p>
   117  The underscore character <code>_</code> (U+005F) is considered a letter.
   118  </p>
   119  <pre class="ebnf">
   120  letter        = unicode_letter | "_" .
   121  decimal_digit = "0" … "9" .
   122  octal_digit   = "0" … "7" .
   123  hex_digit     = "0" … "9" | "A" … "F" | "a" … "f" .
   124  </pre>
   125  
   126  <h2 id="Lexical_elements">Lexical elements</h2>
   127  
   128  <h3 id="Comments">Comments</h3>
   129  
   130  <p>
   131  Comments serve as program documentation. There are two forms:
   132  </p>
   133  
   134  <ol>
   135  <li>
   136  <i>Line comments</i> start with the character sequence <code>//</code>
   137  and stop at the end of the line.
   138  </li>
   139  <li>
   140  <i>General comments</i> start with the character sequence <code>/*</code>
   141  and stop with the first subsequent character sequence <code>*/</code>.
   142  </li>
   143  </ol>
   144  
   145  <p>
   146  A comment cannot start inside a <a href="#Rune_literals">rune</a> or
   147  <a href="#String_literals">string literal</a>, or inside a comment.
   148  A general comment containing no newlines acts like a space.
   149  Any other comment acts like a newline.
   150  </p>
   151  
   152  <h3 id="Tokens">Tokens</h3>
   153  
   154  <p>
   155  Tokens form the vocabulary of the Go language.
   156  There are four classes: <i>identifiers</i>, <i>keywords</i>, <i>operators
   157  and punctuation</i>, and <i>literals</i>.  <i>White space</i>, formed from
   158  spaces (U+0020), horizontal tabs (U+0009),
   159  carriage returns (U+000D), and newlines (U+000A),
   160  is ignored except as it separates tokens
   161  that would otherwise combine into a single token. Also, a newline or end of file
   162  may trigger the insertion of a <a href="#Semicolons">semicolon</a>.
   163  While breaking the input into tokens,
   164  the next token is the longest sequence of characters that form a
   165  valid token.
   166  </p>
   167  
   168  <h3 id="Semicolons">Semicolons</h3>
   169  
   170  <p>
   171  The formal grammar uses semicolons <code>";"</code> as terminators in
   172  a number of productions. Go programs may omit most of these semicolons
   173  using the following two rules:
   174  </p>
   175  
   176  <ol>
   177  <li>
   178  When the input is broken into tokens, a semicolon is automatically inserted
   179  into the token stream immediately after a line's final token if that token is
   180  <ul>
   181  	<li>an
   182  	    <a href="#Identifiers">identifier</a>
   183  	</li>
   184  
   185  	<li>an
   186  	    <a href="#Integer_literals">integer</a>,
   187  	    <a href="#Floating-point_literals">floating-point</a>,
   188  	    <a href="#Imaginary_literals">imaginary</a>,
   189  	    <a href="#Rune_literals">rune</a>, or
   190  	    <a href="#String_literals">string</a> literal
   191  	</li>
   192  
   193  	<li>one of the <a href="#Keywords">keywords</a>
   194  	    <code>break</code>,
   195  	    <code>continue</code>,
   196  	    <code>fallthrough</code>, or
   197  	    <code>return</code>
   198  	</li>
   199  
   200  	<li>one of the <a href="#Operators_and_punctuation">operators and punctuation</a>
   201  	    <code>++</code>,
   202  	    <code>--</code>,
   203  	    <code>)</code>,
   204  	    <code>]</code>, or
   205  	    <code>}</code>
   206  	</li>
   207  </ul>
   208  </li>
   209  
   210  <li>
   211  To allow complex statements to occupy a single line, a semicolon
   212  may be omitted before a closing <code>")"</code> or <code>"}"</code>.
   213  </li>
   214  </ol>
   215  
   216  <p>
   217  To reflect idiomatic use, code examples in this document elide semicolons
   218  using these rules.
   219  </p>
   220  
   221  
   222  <h3 id="Identifiers">Identifiers</h3>
   223  
   224  <p>
   225  Identifiers name program entities such as variables and types.
   226  An identifier is a sequence of one or more letters and digits.
   227  The first character in an identifier must be a letter.
   228  </p>
   229  <pre class="ebnf">
   230  identifier = letter { letter | unicode_digit } .
   231  </pre>
   232  <pre>
   233  a
   234  _x9
   235  ThisVariableIsExported
   236  αβ
   237  </pre>
   238  
   239  <p>
   240  Some identifiers are <a href="#Predeclared_identifiers">predeclared</a>.
   241  </p>
   242  
   243  
   244  <h3 id="Keywords">Keywords</h3>
   245  
   246  <p>
   247  The following keywords are reserved and may not be used as identifiers.
   248  </p>
   249  <pre class="grammar">
   250  break        default      func         interface    select
   251  case         defer        go           map          struct
   252  chan         else         goto         package      switch
   253  const        fallthrough  if           range        type
   254  continue     for          import       return       var
   255  </pre>
   256  
   257  <h3 id="Operators_and_punctuation">Operators and punctuation</h3>
   258  
   259  <p>
   260  The following character sequences represent <a href="#Operators">operators</a>
   261  (including <a href="#assign_op">assignment operators</a>) and punctuation:
   262  </p>
   263  <pre class="grammar">
   264  +    &amp;     +=    &amp;=     &amp;&amp;    ==    !=    (    )
   265  -    |     -=    |=     ||    &lt;     &lt;=    [    ]
   266  *    ^     *=    ^=     &lt;-    &gt;     &gt;=    {    }
   267  /    &lt;&lt;    /=    &lt;&lt;=    ++    =     :=    ,    ;
   268  %    &gt;&gt;    %=    &gt;&gt;=    --    !     ...   .    :
   269       &amp;^          &amp;^=
   270  </pre>
   271  
   272  <h3 id="Integer_literals">Integer literals</h3>
   273  
   274  <p>
   275  An integer literal is a sequence of digits representing an
   276  <a href="#Constants">integer constant</a>.
   277  An optional prefix sets a non-decimal base: <code>0</code> for octal, <code>0x</code> or
   278  <code>0X</code> for hexadecimal.  In hexadecimal literals, letters
   279  <code>a-f</code> and <code>A-F</code> represent values 10 through 15.
   280  </p>
   281  <pre class="ebnf">
   282  int_lit     = decimal_lit | octal_lit | hex_lit .
   283  decimal_lit = ( "1" … "9" ) { decimal_digit } .
   284  octal_lit   = "0" { octal_digit } .
   285  hex_lit     = "0" ( "x" | "X" ) hex_digit { hex_digit } .
   286  </pre>
   287  
   288  <pre>
   289  42
   290  0600
   291  0xBadFace
   292  170141183460469231731687303715884105727
   293  </pre>
   294  
   295  <h3 id="Floating-point_literals">Floating-point literals</h3>
   296  <p>
   297  A floating-point literal is a decimal representation of a
   298  <a href="#Constants">floating-point constant</a>.
   299  It has an integer part, a decimal point, a fractional part,
   300  and an exponent part.  The integer and fractional part comprise
   301  decimal digits; the exponent part is an <code>e</code> or <code>E</code>
   302  followed by an optionally signed decimal exponent.  One of the
   303  integer part or the fractional part may be elided; one of the decimal
   304  point or the exponent may be elided.
   305  </p>
   306  <pre class="ebnf">
   307  float_lit = decimals "." [ decimals ] [ exponent ] |
   308              decimals exponent |
   309              "." decimals [ exponent ] .
   310  decimals  = decimal_digit { decimal_digit } .
   311  exponent  = ( "e" | "E" ) [ "+" | "-" ] decimals .
   312  </pre>
   313  
   314  <pre>
   315  0.
   316  72.40
   317  072.40  // == 72.40
   318  2.71828
   319  1.e+0
   320  6.67428e-11
   321  1E6
   322  .25
   323  .12345E+5
   324  </pre>
   325  
   326  <h3 id="Imaginary_literals">Imaginary literals</h3>
   327  <p>
   328  An imaginary literal is a decimal representation of the imaginary part of a
   329  <a href="#Constants">complex constant</a>.
   330  It consists of a
   331  <a href="#Floating-point_literals">floating-point literal</a>
   332  or decimal integer followed
   333  by the lower-case letter <code>i</code>.
   334  </p>
   335  <pre class="ebnf">
   336  imaginary_lit = (decimals | float_lit) "i" .
   337  </pre>
   338  
   339  <pre>
   340  0i
   341  011i  // == 11i
   342  0.i
   343  2.71828i
   344  1.e+0i
   345  6.67428e-11i
   346  1E6i
   347  .25i
   348  .12345E+5i
   349  </pre>
   350  
   351  
   352  <h3 id="Rune_literals">Rune literals</h3>
   353  
   354  <p>
   355  A rune literal represents a <a href="#Constants">rune constant</a>,
   356  an integer value identifying a Unicode code point.
   357  A rune literal is expressed as one or more characters enclosed in single quotes,
   358  as in <code>'x'</code> or <code>'\n'</code>.
   359  Within the quotes, any character may appear except newline and unescaped single
   360  quote. A single quoted character represents the Unicode value
   361  of the character itself,
   362  while multi-character sequences beginning with a backslash encode
   363  values in various formats.
   364  </p>
   365  <p>
   366  The simplest form represents the single character within the quotes;
   367  since Go source text is Unicode characters encoded in UTF-8, multiple
   368  UTF-8-encoded bytes may represent a single integer value.  For
   369  instance, the literal <code>'a'</code> holds a single byte representing
   370  a literal <code>a</code>, Unicode U+0061, value <code>0x61</code>, while
   371  <code>'ä'</code> holds two bytes (<code>0xc3</code> <code>0xa4</code>) representing
   372  a literal <code>a</code>-dieresis, U+00E4, value <code>0xe4</code>.
   373  </p>
   374  <p>
   375  Several backslash escapes allow arbitrary values to be encoded as
   376  ASCII text.  There are four ways to represent the integer value
   377  as a numeric constant: <code>\x</code> followed by exactly two hexadecimal
   378  digits; <code>\u</code> followed by exactly four hexadecimal digits;
   379  <code>\U</code> followed by exactly eight hexadecimal digits, and a
   380  plain backslash <code>\</code> followed by exactly three octal digits.
   381  In each case the value of the literal is the value represented by
   382  the digits in the corresponding base.
   383  </p>
   384  <p>
   385  Although these representations all result in an integer, they have
   386  different valid ranges.  Octal escapes must represent a value between
   387  0 and 255 inclusive.  Hexadecimal escapes satisfy this condition
   388  by construction. The escapes <code>\u</code> and <code>\U</code>
   389  represent Unicode code points so within them some values are illegal,
   390  in particular those above <code>0x10FFFF</code> and surrogate halves.
   391  </p>
   392  <p>
   393  After a backslash, certain single-character escapes represent special values:
   394  </p>
   395  <pre class="grammar">
   396  \a   U+0007 alert or bell
   397  \b   U+0008 backspace
   398  \f   U+000C form feed
   399  \n   U+000A line feed or newline
   400  \r   U+000D carriage return
   401  \t   U+0009 horizontal tab
   402  \v   U+000b vertical tab
   403  \\   U+005c backslash
   404  \'   U+0027 single quote  (valid escape only within rune literals)
   405  \"   U+0022 double quote  (valid escape only within string literals)
   406  </pre>
   407  <p>
   408  All other sequences starting with a backslash are illegal inside rune literals.
   409  </p>
   410  <pre class="ebnf">
   411  rune_lit         = "'" ( unicode_value | byte_value ) "'" .
   412  unicode_value    = unicode_char | little_u_value | big_u_value | escaped_char .
   413  byte_value       = octal_byte_value | hex_byte_value .
   414  octal_byte_value = `\` octal_digit octal_digit octal_digit .
   415  hex_byte_value   = `\` "x" hex_digit hex_digit .
   416  little_u_value   = `\` "u" hex_digit hex_digit hex_digit hex_digit .
   417  big_u_value      = `\` "U" hex_digit hex_digit hex_digit hex_digit
   418                             hex_digit hex_digit hex_digit hex_digit .
   419  escaped_char     = `\` ( "a" | "b" | "f" | "n" | "r" | "t" | "v" | `\` | "'" | `"` ) .
   420  </pre>
   421  
   422  <pre>
   423  'a'
   424  'ä'
   425  '本'
   426  '\t'
   427  '\000'
   428  '\007'
   429  '\377'
   430  '\x07'
   431  '\xff'
   432  '\u12e4'
   433  '\U00101234'
   434  '\''         // rune literal containing single quote character
   435  'aa'         // illegal: too many characters
   436  '\xa'        // illegal: too few hexadecimal digits
   437  '\0'         // illegal: too few octal digits
   438  '\uDFFF'     // illegal: surrogate half
   439  '\U00110000' // illegal: invalid Unicode code point
   440  </pre>
   441  
   442  
   443  <h3 id="String_literals">String literals</h3>
   444  
   445  <p>
   446  A string literal represents a <a href="#Constants">string constant</a>
   447  obtained from concatenating a sequence of characters. There are two forms:
   448  raw string literals and interpreted string literals.
   449  </p>
   450  <p>
   451  Raw string literals are character sequences between back quotes, as in
   452  <code>`foo`</code>.  Within the quotes, any character may appear except
   453  back quote. The value of a raw string literal is the
   454  string composed of the uninterpreted (implicitly UTF-8-encoded) characters
   455  between the quotes;
   456  in particular, backslashes have no special meaning and the string may
   457  contain newlines.
   458  Carriage return characters ('\r') inside raw string literals
   459  are discarded from the raw string value.
   460  </p>
   461  <p>
   462  Interpreted string literals are character sequences between double
   463  quotes, as in <code>&quot;bar&quot;</code>.
   464  Within the quotes, any character may appear except newline and unescaped double quote.
   465  The text between the quotes forms the
   466  value of the literal, with backslash escapes interpreted as they
   467  are in <a href="#Rune_literals">rune literals</a> (except that <code>\'</code> is illegal and
   468  <code>\"</code> is legal), with the same restrictions.
   469  The three-digit octal (<code>\</code><i>nnn</i>)
   470  and two-digit hexadecimal (<code>\x</code><i>nn</i>) escapes represent individual
   471  <i>bytes</i> of the resulting string; all other escapes represent
   472  the (possibly multi-byte) UTF-8 encoding of individual <i>characters</i>.
   473  Thus inside a string literal <code>\377</code> and <code>\xFF</code> represent
   474  a single byte of value <code>0xFF</code>=255, while <code>ÿ</code>,
   475  <code>\u00FF</code>, <code>\U000000FF</code> and <code>\xc3\xbf</code> represent
   476  the two bytes <code>0xc3</code> <code>0xbf</code> of the UTF-8 encoding of character
   477  U+00FF.
   478  </p>
   479  
   480  <pre class="ebnf">
   481  string_lit             = raw_string_lit | interpreted_string_lit .
   482  raw_string_lit         = "`" { unicode_char | newline } "`" .
   483  interpreted_string_lit = `"` { unicode_value | byte_value } `"` .
   484  </pre>
   485  
   486  <pre>
   487  `abc`                // same as "abc"
   488  `\n
   489  \n`                  // same as "\\n\n\\n"
   490  "\n"
   491  "\""                 // same as `"`
   492  "Hello, world!\n"
   493  "日本語"
   494  "\u65e5本\U00008a9e"
   495  "\xff\u00FF"
   496  "\uD800"             // illegal: surrogate half
   497  "\U00110000"         // illegal: invalid Unicode code point
   498  </pre>
   499  
   500  <p>
   501  These examples all represent the same string:
   502  </p>
   503  
   504  <pre>
   505  "日本語"                                 // UTF-8 input text
   506  `日本語`                                 // UTF-8 input text as a raw literal
   507  "\u65e5\u672c\u8a9e"                    // the explicit Unicode code points
   508  "\U000065e5\U0000672c\U00008a9e"        // the explicit Unicode code points
   509  "\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e"  // the explicit UTF-8 bytes
   510  </pre>
   511  
   512  <p>
   513  If the source code represents a character as two code points, such as
   514  a combining form involving an accent and a letter, the result will be
   515  an error if placed in a rune literal (it is not a single code
   516  point), and will appear as two code points if placed in a string
   517  literal.
   518  </p>
   519  
   520  
   521  <h2 id="Constants">Constants</h2>
   522  
   523  <p>There are <i>boolean constants</i>,
   524  <i>rune constants</i>,
   525  <i>integer constants</i>,
   526  <i>floating-point constants</i>, <i>complex constants</i>,
   527  and <i>string constants</i>. Rune, integer, floating-point,
   528  and complex constants are
   529  collectively called <i>numeric constants</i>.
   530  </p>
   531  
   532  <p>
   533  A constant value is represented by a
   534  <a href="#Rune_literals">rune</a>,
   535  <a href="#Integer_literals">integer</a>,
   536  <a href="#Floating-point_literals">floating-point</a>,
   537  <a href="#Imaginary_literals">imaginary</a>,
   538  or
   539  <a href="#String_literals">string</a> literal,
   540  an identifier denoting a constant,
   541  a <a href="#Constant_expressions">constant expression</a>,
   542  a <a href="#Conversions">conversion</a> with a result that is a constant, or
   543  the result value of some built-in functions such as
   544  <code>unsafe.Sizeof</code> applied to any value,
   545  <code>cap</code> or <code>len</code> applied to
   546  <a href="#Length_and_capacity">some expressions</a>,
   547  <code>real</code> and <code>imag</code> applied to a complex constant
   548  and <code>complex</code> applied to numeric constants.
   549  The boolean truth values are represented by the predeclared constants
   550  <code>true</code> and <code>false</code>. The predeclared identifier
   551  <a href="#Iota">iota</a> denotes an integer constant.
   552  </p>
   553  
   554  <p>
   555  In general, complex constants are a form of
   556  <a href="#Constant_expressions">constant expression</a>
   557  and are discussed in that section.
   558  </p>
   559  
   560  <p>
   561  Numeric constants represent exact values of arbitrary precision and do not overflow.
   562  Consequently, there are no constants denoting the IEEE-754 negative zero, infinity,
   563  and not-a-number values.
   564  </p>
   565  
   566  <p>
   567  Constants may be <a href="#Types">typed</a> or <i>untyped</i>.
   568  Literal constants, <code>true</code>, <code>false</code>, <code>iota</code>,
   569  and certain <a href="#Constant_expressions">constant expressions</a>
   570  containing only untyped constant operands are untyped.
   571  </p>
   572  
   573  <p>
   574  A constant may be given a type explicitly by a <a href="#Constant_declarations">constant declaration</a>
   575  or <a href="#Conversions">conversion</a>, or implicitly when used in a
   576  <a href="#Variable_declarations">variable declaration</a> or an
   577  <a href="#Assignments">assignment</a> or as an
   578  operand in an <a href="#Expressions">expression</a>.
   579  It is an error if the constant value
   580  cannot be <a href="#Representability">represented</a> as a value of the respective type.
   581  </p>
   582  
   583  <p>
   584  An untyped constant has a <i>default type</i> which is the type to which the
   585  constant is implicitly converted in contexts where a typed value is required,
   586  for instance, in a <a href="#Short_variable_declarations">short variable declaration</a>
   587  such as <code>i := 0</code> where there is no explicit type.
   588  The default type of an untyped constant is <code>bool</code>, <code>rune</code>,
   589  <code>int</code>, <code>float64</code>, <code>complex128</code> or <code>string</code>
   590  respectively, depending on whether it is a boolean, rune, integer, floating-point,
   591  complex, or string constant.
   592  </p>
   593  
   594  <p>
   595  Implementation restriction: Although numeric constants have arbitrary
   596  precision in the language, a compiler may implement them using an
   597  internal representation with limited precision.  That said, every
   598  implementation must:
   599  </p>
   600  <ul>
   601  	<li>Represent integer constants with at least 256 bits.</li>
   602  
   603  	<li>Represent floating-point constants, including the parts of
   604  	    a complex constant, with a mantissa of at least 256 bits
   605  	    and a signed binary exponent of at least 16 bits.</li>
   606  
   607  	<li>Give an error if unable to represent an integer constant
   608  	    precisely.</li>
   609  
   610  	<li>Give an error if unable to represent a floating-point or
   611  	    complex constant due to overflow.</li>
   612  
   613  	<li>Round to the nearest representable constant if unable to
   614  	    represent a floating-point or complex constant due to limits
   615  	    on precision.</li>
   616  </ul>
   617  <p>
   618  These requirements apply both to literal constants and to the result
   619  of evaluating <a href="#Constant_expressions">constant
   620  expressions</a>.
   621  </p>
   622  
   623  <h2 id="Variables">Variables</h2>
   624  
   625  <p>
   626  A variable is a storage location for holding a <i>value</i>.
   627  The set of permissible values is determined by the
   628  variable's <i><a href="#Types">type</a></i>.
   629  </p>
   630  
   631  <p>
   632  A <a href="#Variable_declarations">variable declaration</a>
   633  or, for function parameters and results, the signature
   634  of a <a href="#Function_declarations">function declaration</a>
   635  or <a href="#Function_literals">function literal</a> reserves
   636  storage for a named variable.
   637  
   638  Calling the built-in function <a href="#Allocation"><code>new</code></a>
   639  or taking the address of a <a href="#Composite_literals">composite literal</a>
   640  allocates storage for a variable at run time.
   641  Such an anonymous variable is referred to via a (possibly implicit)
   642  <a href="#Address_operators">pointer indirection</a>.
   643  </p>
   644  
   645  <p>
   646  <i>Structured</i> variables of <a href="#Array_types">array</a>, <a href="#Slice_types">slice</a>,
   647  and <a href="#Struct_types">struct</a> types have elements and fields that may
   648  be <a href="#Address_operators">addressed</a> individually. Each such element
   649  acts like a variable.
   650  </p>
   651  
   652  <p>
   653  The <i>static type</i> (or just <i>type</i>) of a variable is the
   654  type given in its declaration, the type provided in the
   655  <code>new</code> call or composite literal, or the type of
   656  an element of a structured variable.
   657  Variables of interface type also have a distinct <i>dynamic type</i>,
   658  which is the concrete type of the value assigned to the variable at run time
   659  (unless the value is the predeclared identifier <code>nil</code>,
   660  which has no type).
   661  The dynamic type may vary during execution but values stored in interface
   662  variables are always <a href="#Assignability">assignable</a>
   663  to the static type of the variable.
   664  </p>
   665  
   666  <pre>
   667  var x interface{}  // x is nil and has static type interface{}
   668  var v *T           // v has value nil, static type *T
   669  x = 42             // x has value 42 and dynamic type int
   670  x = v              // x has value (*T)(nil) and dynamic type *T
   671  </pre>
   672  
   673  <p>
   674  A variable's value is retrieved by referring to the variable in an
   675  <a href="#Expressions">expression</a>; it is the most recent value
   676  <a href="#Assignments">assigned</a> to the variable.
   677  If a variable has not yet been assigned a value, its value is the
   678  <a href="#The_zero_value">zero value</a> for its type.
   679  </p>
   680  
   681  
   682  <h2 id="Types">Types</h2>
   683  
   684  <p>
   685  A type determines a set of values together with operations and methods specific
   686  to those values. A type may be denoted by a <i>type name</i>, if it has one,
   687  or specified using a <i>type literal</i>, which composes a type from existing types.
   688  </p>
   689  
   690  <pre class="ebnf">
   691  Type      = TypeName | TypeLit | "(" Type ")" .
   692  TypeName  = identifier | QualifiedIdent .
   693  TypeLit   = ArrayType | StructType | PointerType | FunctionType | InterfaceType |
   694  	    SliceType | MapType | ChannelType .
   695  </pre>
   696  
   697  <p>
   698  Named instances of the boolean, numeric, and string types are
   699  <a href="#Predeclared_identifiers">predeclared</a>.
   700  Other named types are introduced with <a href="#Type_declarations">type declarations</a>.
   701  <i>Composite types</i>&mdash;array, struct, pointer, function,
   702  interface, slice, map, and channel types&mdash;may be constructed using
   703  type literals.
   704  </p>
   705  
   706  <p>
   707  Each type <code>T</code> has an <i>underlying type</i>: If <code>T</code>
   708  is one of the predeclared boolean, numeric, or string types, or a type literal,
   709  the corresponding underlying
   710  type is <code>T</code> itself. Otherwise, <code>T</code>'s underlying type
   711  is the underlying type of the type to which <code>T</code> refers in its
   712  <a href="#Type_declarations">type declaration</a>.
   713  </p>
   714  
   715  <pre>
   716  type (
   717  	A1 = string
   718  	A2 = A1
   719  )
   720  
   721  type (
   722  	B1 string
   723  	B2 B1
   724  	B3 []B1
   725  	B4 B3
   726  )
   727  </pre>
   728  
   729  <p>
   730  The underlying type of <code>string</code>, <code>A1</code>, <code>A2</code>, <code>B1</code>,
   731  and <code>B2</code> is <code>string</code>.
   732  The underlying type of <code>[]B1</code>, <code>B3</code>, and <code>B4</code> is <code>[]B1</code>.
   733  </p>
   734  
   735  <h3 id="Method_sets">Method sets</h3>
   736  <p>
   737  A type may have a <i>method set</i> associated with it.
   738  The method set of an <a href="#Interface_types">interface type</a> is its interface.
   739  The method set of any other type <code>T</code> consists of all
   740  <a href="#Method_declarations">methods</a> declared with receiver type <code>T</code>.
   741  The method set of the corresponding <a href="#Pointer_types">pointer type</a> <code>*T</code>
   742  is the set of all methods declared with receiver <code>*T</code> or <code>T</code>
   743  (that is, it also contains the method set of <code>T</code>).
   744  Further rules apply to structs containing embedded fields, as described
   745  in the section on <a href="#Struct_types">struct types</a>.
   746  Any other type has an empty method set.
   747  In a method set, each method must have a
   748  <a href="#Uniqueness_of_identifiers">unique</a>
   749  non-<a href="#Blank_identifier">blank</a> <a href="#MethodName">method name</a>.
   750  </p>
   751  
   752  <p>
   753  The method set of a type determines the interfaces that the
   754  type <a href="#Interface_types">implements</a>
   755  and the methods that can be <a href="#Calls">called</a>
   756  using a receiver of that type.
   757  </p>
   758  
   759  <h3 id="Boolean_types">Boolean types</h3>
   760  
   761  <p>
   762  A <i>boolean type</i> represents the set of Boolean truth values
   763  denoted by the predeclared constants <code>true</code>
   764  and <code>false</code>. The predeclared boolean type is <code>bool</code>;
   765  it is a <a href="#Type_definitions">defined type</a>.
   766  </p>
   767  
   768  <h3 id="Numeric_types">Numeric types</h3>
   769  
   770  <p>
   771  A <i>numeric type</i> represents sets of integer or floating-point values.
   772  The predeclared architecture-independent numeric types are:
   773  </p>
   774  
   775  <pre class="grammar">
   776  uint8       the set of all unsigned  8-bit integers (0 to 255)
   777  uint16      the set of all unsigned 16-bit integers (0 to 65535)
   778  uint32      the set of all unsigned 32-bit integers (0 to 4294967295)
   779  uint64      the set of all unsigned 64-bit integers (0 to 18446744073709551615)
   780  
   781  int8        the set of all signed  8-bit integers (-128 to 127)
   782  int16       the set of all signed 16-bit integers (-32768 to 32767)
   783  int32       the set of all signed 32-bit integers (-2147483648 to 2147483647)
   784  int64       the set of all signed 64-bit integers (-9223372036854775808 to 9223372036854775807)
   785  
   786  float32     the set of all IEEE-754 32-bit floating-point numbers
   787  float64     the set of all IEEE-754 64-bit floating-point numbers
   788  
   789  complex64   the set of all complex numbers with float32 real and imaginary parts
   790  complex128  the set of all complex numbers with float64 real and imaginary parts
   791  
   792  byte        alias for uint8
   793  rune        alias for int32
   794  </pre>
   795  
   796  <p>
   797  The value of an <i>n</i>-bit integer is <i>n</i> bits wide and represented using
   798  <a href="http://en.wikipedia.org/wiki/Two's_complement">two's complement arithmetic</a>.
   799  </p>
   800  
   801  <p>
   802  There is also a set of predeclared numeric types with implementation-specific sizes:
   803  </p>
   804  
   805  <pre class="grammar">
   806  uint     either 32 or 64 bits
   807  int      same size as uint
   808  uintptr  an unsigned integer large enough to store the uninterpreted bits of a pointer value
   809  </pre>
   810  
   811  <p>
   812  To avoid portability issues all numeric types are <a href="#Type_definitions">defined
   813  types</a> and thus distinct except
   814  <code>byte</code>, which is an <a href="#Alias_declarations">alias</a> for <code>uint8</code>, and
   815  <code>rune</code>, which is an alias for <code>int32</code>.
   816  Conversions
   817  are required when different numeric types are mixed in an expression
   818  or assignment. For instance, <code>int32</code> and <code>int</code>
   819  are not the same type even though they may have the same size on a
   820  particular architecture.
   821  
   822  
   823  <h3 id="String_types">String types</h3>
   824  
   825  <p>
   826  A <i>string type</i> represents the set of string values.
   827  A string value is a (possibly empty) sequence of bytes.
   828  Strings are immutable: once created,
   829  it is impossible to change the contents of a string.
   830  The predeclared string type is <code>string</code>;
   831  it is a <a href="#Type_definitions">defined type</a>.
   832  </p>
   833  
   834  <p>
   835  The length of a string <code>s</code> (its size in bytes) can be discovered using
   836  the built-in function <a href="#Length_and_capacity"><code>len</code></a>.
   837  The length is a compile-time constant if the string is a constant.
   838  A string's bytes can be accessed by integer <a href="#Index_expressions">indices</a>
   839  0 through <code>len(s)-1</code>.
   840  It is illegal to take the address of such an element; if
   841  <code>s[i]</code> is the <code>i</code>'th byte of a
   842  string, <code>&amp;s[i]</code> is invalid.
   843  </p>
   844  
   845  
   846  <h3 id="Array_types">Array types</h3>
   847  
   848  <p>
   849  An array is a numbered sequence of elements of a single
   850  type, called the element type.
   851  The number of elements is called the length and is never
   852  negative.
   853  </p>
   854  
   855  <pre class="ebnf">
   856  ArrayType   = "[" ArrayLength "]" ElementType .
   857  ArrayLength = Expression .
   858  ElementType = Type .
   859  </pre>
   860  
   861  <p>
   862  The length is part of the array's type; it must evaluate to a
   863  non-negative <a href="#Constants">constant</a>
   864  <a href="#Representability">representable</a> by a value
   865  of type <code>int</code>.
   866  The length of array <code>a</code> can be discovered
   867  using the built-in function <a href="#Length_and_capacity"><code>len</code></a>.
   868  The elements can be addressed by integer <a href="#Index_expressions">indices</a>
   869  0 through <code>len(a)-1</code>.
   870  Array types are always one-dimensional but may be composed to form
   871  multi-dimensional types.
   872  </p>
   873  
   874  <pre>
   875  [32]byte
   876  [2*N] struct { x, y int32 }
   877  [1000]*float64
   878  [3][5]int
   879  [2][2][2]float64  // same as [2]([2]([2]float64))
   880  </pre>
   881  
   882  <h3 id="Slice_types">Slice types</h3>
   883  
   884  <p>
   885  A slice is a descriptor for a contiguous segment of an <i>underlying array</i> and
   886  provides access to a numbered sequence of elements from that array.
   887  A slice type denotes the set of all slices of arrays of its element type.
   888  The value of an uninitialized slice is <code>nil</code>.
   889  </p>
   890  
   891  <pre class="ebnf">
   892  SliceType = "[" "]" ElementType .
   893  </pre>
   894  
   895  <p>
   896  Like arrays, slices are indexable and have a length.  The length of a
   897  slice <code>s</code> can be discovered by the built-in function
   898  <a href="#Length_and_capacity"><code>len</code></a>; unlike with arrays it may change during
   899  execution.  The elements can be addressed by integer <a href="#Index_expressions">indices</a>
   900  0 through <code>len(s)-1</code>.  The slice index of a
   901  given element may be less than the index of the same element in the
   902  underlying array.
   903  </p>
   904  <p>
   905  A slice, once initialized, is always associated with an underlying
   906  array that holds its elements.  A slice therefore shares storage
   907  with its array and with other slices of the same array; by contrast,
   908  distinct arrays always represent distinct storage.
   909  </p>
   910  <p>
   911  The array underlying a slice may extend past the end of the slice.
   912  The <i>capacity</i> is a measure of that extent: it is the sum of
   913  the length of the slice and the length of the array beyond the slice;
   914  a slice of length up to that capacity can be created by
   915  <a href="#Slice_expressions"><i>slicing</i></a> a new one from the original slice.
   916  The capacity of a slice <code>a</code> can be discovered using the
   917  built-in function <a href="#Length_and_capacity"><code>cap(a)</code></a>.
   918  </p>
   919  
   920  <p>
   921  A new, initialized slice value for a given element type <code>T</code> is
   922  made using the built-in function
   923  <a href="#Making_slices_maps_and_channels"><code>make</code></a>,
   924  which takes a slice type
   925  and parameters specifying the length and optionally the capacity.
   926  A slice created with <code>make</code> always allocates a new, hidden array
   927  to which the returned slice value refers. That is, executing
   928  </p>
   929  
   930  <pre>
   931  make([]T, length, capacity)
   932  </pre>
   933  
   934  <p>
   935  produces the same slice as allocating an array and <a href="#Slice_expressions">slicing</a>
   936  it, so these two expressions are equivalent:
   937  </p>
   938  
   939  <pre>
   940  make([]int, 50, 100)
   941  new([100]int)[0:50]
   942  </pre>
   943  
   944  <p>
   945  Like arrays, slices are always one-dimensional but may be composed to construct
   946  higher-dimensional objects.
   947  With arrays of arrays, the inner arrays are, by construction, always the same length;
   948  however with slices of slices (or arrays of slices), the inner lengths may vary dynamically.
   949  Moreover, the inner slices must be initialized individually.
   950  </p>
   951  
   952  <h3 id="Struct_types">Struct types</h3>
   953  
   954  <p>
   955  A struct is a sequence of named elements, called fields, each of which has a
   956  name and a type. Field names may be specified explicitly (IdentifierList) or
   957  implicitly (EmbeddedField).
   958  Within a struct, non-<a href="#Blank_identifier">blank</a> field names must
   959  be <a href="#Uniqueness_of_identifiers">unique</a>.
   960  </p>
   961  
   962  <pre class="ebnf">
   963  StructType    = "struct" "{" { FieldDecl ";" } "}" .
   964  FieldDecl     = (IdentifierList Type | EmbeddedField) [ Tag ] .
   965  EmbeddedField = [ "*" ] TypeName .
   966  Tag           = string_lit .
   967  </pre>
   968  
   969  <pre>
   970  // An empty struct.
   971  struct {}
   972  
   973  // A struct with 6 fields.
   974  struct {
   975  	x, y int
   976  	u float32
   977  	_ float32  // padding
   978  	A *[]int
   979  	F func()
   980  }
   981  </pre>
   982  
   983  <p>
   984  A field declared with a type but no explicit field name is called an <i>embedded field</i>.
   985  An embedded field must be specified as
   986  a type name <code>T</code> or as a pointer to a non-interface type name <code>*T</code>,
   987  and <code>T</code> itself may not be
   988  a pointer type. The unqualified type name acts as the field name.
   989  </p>
   990  
   991  <pre>
   992  // A struct with four embedded fields of types T1, *T2, P.T3 and *P.T4
   993  struct {
   994  	T1        // field name is T1
   995  	*T2       // field name is T2
   996  	P.T3      // field name is T3
   997  	*P.T4     // field name is T4
   998  	x, y int  // field names are x and y
   999  }
  1000  </pre>
  1001  
  1002  <p>
  1003  The following declaration is illegal because field names must be unique
  1004  in a struct type:
  1005  </p>
  1006  
  1007  <pre>
  1008  struct {
  1009  	T     // conflicts with embedded field *T and *P.T
  1010  	*T    // conflicts with embedded field T and *P.T
  1011  	*P.T  // conflicts with embedded field T and *T
  1012  }
  1013  </pre>
  1014  
  1015  <p>
  1016  A field or <a href="#Method_declarations">method</a> <code>f</code> of an
  1017  embedded field in a struct <code>x</code> is called <i>promoted</i> if
  1018  <code>x.f</code> is a legal <a href="#Selectors">selector</a> that denotes
  1019  that field or method <code>f</code>.
  1020  </p>
  1021  
  1022  <p>
  1023  Promoted fields act like ordinary fields
  1024  of a struct except that they cannot be used as field names in
  1025  <a href="#Composite_literals">composite literals</a> of the struct.
  1026  </p>
  1027  
  1028  <p>
  1029  Given a struct type <code>S</code> and a type named <code>T</code>,
  1030  promoted methods are included in the method set of the struct as follows:
  1031  </p>
  1032  <ul>
  1033  	<li>
  1034  	If <code>S</code> contains an embedded field <code>T</code>,
  1035  	the <a href="#Method_sets">method sets</a> of <code>S</code>
  1036  	and <code>*S</code> both include promoted methods with receiver
  1037  	<code>T</code>. The method set of <code>*S</code> also
  1038  	includes promoted methods with receiver <code>*T</code>.
  1039  	</li>
  1040  
  1041  	<li>
  1042  	If <code>S</code> contains an embedded field <code>*T</code>,
  1043  	the method sets of <code>S</code> and <code>*S</code> both
  1044  	include promoted methods with receiver <code>T</code> or
  1045  	<code>*T</code>.
  1046  	</li>
  1047  </ul>
  1048  
  1049  <p>
  1050  A field declaration may be followed by an optional string literal <i>tag</i>,
  1051  which becomes an attribute for all the fields in the corresponding
  1052  field declaration. An empty tag string is equivalent to an absent tag.
  1053  The tags are made visible through a <a href="/pkg/reflect/#StructTag">reflection interface</a>
  1054  and take part in <a href="#Type_identity">type identity</a> for structs
  1055  but are otherwise ignored.
  1056  </p>
  1057  
  1058  <pre>
  1059  struct {
  1060  	x, y float64 ""  // an empty tag string is like an absent tag
  1061  	name string  "any string is permitted as a tag"
  1062  	_    [4]byte "ceci n'est pas un champ de structure"
  1063  }
  1064  
  1065  // A struct corresponding to a TimeStamp protocol buffer.
  1066  // The tag strings define the protocol buffer field numbers;
  1067  // they follow the convention outlined by the reflect package.
  1068  struct {
  1069  	microsec  uint64 `protobuf:"1"`
  1070  	serverIP6 uint64 `protobuf:"2"`
  1071  }
  1072  </pre>
  1073  
  1074  <h3 id="Pointer_types">Pointer types</h3>
  1075  
  1076  <p>
  1077  A pointer type denotes the set of all pointers to <a href="#Variables">variables</a> of a given
  1078  type, called the <i>base type</i> of the pointer.
  1079  The value of an uninitialized pointer is <code>nil</code>.
  1080  </p>
  1081  
  1082  <pre class="ebnf">
  1083  PointerType = "*" BaseType .
  1084  BaseType    = Type .
  1085  </pre>
  1086  
  1087  <pre>
  1088  *Point
  1089  *[4]int
  1090  </pre>
  1091  
  1092  <h3 id="Function_types">Function types</h3>
  1093  
  1094  <p>
  1095  A function type denotes the set of all functions with the same parameter
  1096  and result types. The value of an uninitialized variable of function type
  1097  is <code>nil</code>.
  1098  </p>
  1099  
  1100  <pre class="ebnf">
  1101  FunctionType   = "func" Signature .
  1102  Signature      = Parameters [ Result ] .
  1103  Result         = Parameters | Type .
  1104  Parameters     = "(" [ ParameterList [ "," ] ] ")" .
  1105  ParameterList  = ParameterDecl { "," ParameterDecl } .
  1106  ParameterDecl  = [ IdentifierList ] [ "..." ] Type .
  1107  </pre>
  1108  
  1109  <p>
  1110  Within a list of parameters or results, the names (IdentifierList)
  1111  must either all be present or all be absent. If present, each name
  1112  stands for one item (parameter or result) of the specified type and
  1113  all non-<a href="#Blank_identifier">blank</a> names in the signature
  1114  must be <a href="#Uniqueness_of_identifiers">unique</a>.
  1115  If absent, each type stands for one item of that type.
  1116  Parameter and result
  1117  lists are always parenthesized except that if there is exactly
  1118  one unnamed result it may be written as an unparenthesized type.
  1119  </p>
  1120  
  1121  <p>
  1122  The final incoming parameter in a function signature may have
  1123  a type prefixed with <code>...</code>.
  1124  A function with such a parameter is called <i>variadic</i> and
  1125  may be invoked with zero or more arguments for that parameter.
  1126  </p>
  1127  
  1128  <pre>
  1129  func()
  1130  func(x int) int
  1131  func(a, _ int, z float32) bool
  1132  func(a, b int, z float32) (bool)
  1133  func(prefix string, values ...int)
  1134  func(a, b int, z float64, opt ...interface{}) (success bool)
  1135  func(int, int, float64) (float64, *[]int)
  1136  func(n int) func(p *T)
  1137  </pre>
  1138  
  1139  
  1140  <h3 id="Interface_types">Interface types</h3>
  1141  
  1142  <p>
  1143  An interface type specifies a <a href="#Method_sets">method set</a> called its <i>interface</i>.
  1144  A variable of interface type can store a value of any type with a method set
  1145  that is any superset of the interface. Such a type is said to
  1146  <i>implement the interface</i>.
  1147  The value of an uninitialized variable of interface type is <code>nil</code>.
  1148  </p>
  1149  
  1150  <pre class="ebnf">
  1151  InterfaceType      = "interface" "{" { MethodSpec ";" } "}" .
  1152  MethodSpec         = MethodName Signature | InterfaceTypeName .
  1153  MethodName         = identifier .
  1154  InterfaceTypeName  = TypeName .
  1155  </pre>
  1156  
  1157  <p>
  1158  As with all method sets, in an interface type, each method must have a
  1159  <a href="#Uniqueness_of_identifiers">unique</a>
  1160  non-<a href="#Blank_identifier">blank</a> name.
  1161  </p>
  1162  
  1163  <pre>
  1164  // A simple File interface
  1165  interface {
  1166  	Read(b Buffer) bool
  1167  	Write(b Buffer) bool
  1168  	Close()
  1169  }
  1170  </pre>
  1171  
  1172  <p>
  1173  More than one type may implement an interface.
  1174  For instance, if two types <code>S1</code> and <code>S2</code>
  1175  have the method set
  1176  </p>
  1177  
  1178  <pre>
  1179  func (p T) Read(b Buffer) bool { return … }
  1180  func (p T) Write(b Buffer) bool { return … }
  1181  func (p T) Close() { … }
  1182  </pre>
  1183  
  1184  <p>
  1185  (where <code>T</code> stands for either <code>S1</code> or <code>S2</code>)
  1186  then the <code>File</code> interface is implemented by both <code>S1</code> and
  1187  <code>S2</code>, regardless of what other methods
  1188  <code>S1</code> and <code>S2</code> may have or share.
  1189  </p>
  1190  
  1191  <p>
  1192  A type implements any interface comprising any subset of its methods
  1193  and may therefore implement several distinct interfaces. For
  1194  instance, all types implement the <i>empty interface</i>:
  1195  </p>
  1196  
  1197  <pre>
  1198  interface{}
  1199  </pre>
  1200  
  1201  <p>
  1202  Similarly, consider this interface specification,
  1203  which appears within a <a href="#Type_declarations">type declaration</a>
  1204  to define an interface called <code>Locker</code>:
  1205  </p>
  1206  
  1207  <pre>
  1208  type Locker interface {
  1209  	Lock()
  1210  	Unlock()
  1211  }
  1212  </pre>
  1213  
  1214  <p>
  1215  If <code>S1</code> and <code>S2</code> also implement
  1216  </p>
  1217  
  1218  <pre>
  1219  func (p T) Lock() { … }
  1220  func (p T) Unlock() { … }
  1221  </pre>
  1222  
  1223  <p>
  1224  they implement the <code>Locker</code> interface as well
  1225  as the <code>File</code> interface.
  1226  </p>
  1227  
  1228  <p>
  1229  An interface <code>T</code> may use a (possibly qualified) interface type
  1230  name <code>E</code> in place of a method specification. This is called
  1231  <i>embedding</i> interface <code>E</code> in <code>T</code>; it adds
  1232  all (exported and non-exported) methods of <code>E</code> to the interface
  1233  <code>T</code>.
  1234  </p>
  1235  
  1236  <pre>
  1237  type ReadWriter interface {
  1238  	Read(b Buffer) bool
  1239  	Write(b Buffer) bool
  1240  }
  1241  
  1242  type File interface {
  1243  	ReadWriter  // same as adding the methods of ReadWriter
  1244  	Locker      // same as adding the methods of Locker
  1245  	Close()
  1246  }
  1247  
  1248  type LockedFile interface {
  1249  	Locker
  1250  	File        // illegal: Lock, Unlock not unique
  1251  	Lock()      // illegal: Lock not unique
  1252  }
  1253  </pre>
  1254  
  1255  <p>
  1256  An interface type <code>T</code> may not embed itself
  1257  or any interface type that embeds <code>T</code>, recursively.
  1258  </p>
  1259  
  1260  <pre>
  1261  // illegal: Bad cannot embed itself
  1262  type Bad interface {
  1263  	Bad
  1264  }
  1265  
  1266  // illegal: Bad1 cannot embed itself using Bad2
  1267  type Bad1 interface {
  1268  	Bad2
  1269  }
  1270  type Bad2 interface {
  1271  	Bad1
  1272  }
  1273  </pre>
  1274  
  1275  <h3 id="Map_types">Map types</h3>
  1276  
  1277  <p>
  1278  A map is an unordered group of elements of one type, called the
  1279  element type, indexed by a set of unique <i>keys</i> of another type,
  1280  called the key type.
  1281  The value of an uninitialized map is <code>nil</code>.
  1282  </p>
  1283  
  1284  <pre class="ebnf">
  1285  MapType     = "map" "[" KeyType "]" ElementType .
  1286  KeyType     = Type .
  1287  </pre>
  1288  
  1289  <p>
  1290  The <a href="#Comparison_operators">comparison operators</a>
  1291  <code>==</code> and <code>!=</code> must be fully defined
  1292  for operands of the key type; thus the key type must not be a function, map, or
  1293  slice.
  1294  If the key type is an interface type, these
  1295  comparison operators must be defined for the dynamic key values;
  1296  failure will cause a <a href="#Run_time_panics">run-time panic</a>.
  1297  
  1298  </p>
  1299  
  1300  <pre>
  1301  map[string]int
  1302  map[*T]struct{ x, y float64 }
  1303  map[string]interface{}
  1304  </pre>
  1305  
  1306  <p>
  1307  The number of map elements is called its length.
  1308  For a map <code>m</code>, it can be discovered using the
  1309  built-in function <a href="#Length_and_capacity"><code>len</code></a>
  1310  and may change during execution. Elements may be added during execution
  1311  using <a href="#Assignments">assignments</a> and retrieved with
  1312  <a href="#Index_expressions">index expressions</a>; they may be removed with the
  1313  <a href="#Deletion_of_map_elements"><code>delete</code></a> built-in function.
  1314  </p>
  1315  <p>
  1316  A new, empty map value is made using the built-in
  1317  function <a href="#Making_slices_maps_and_channels"><code>make</code></a>,
  1318  which takes the map type and an optional capacity hint as arguments:
  1319  </p>
  1320  
  1321  <pre>
  1322  make(map[string]int)
  1323  make(map[string]int, 100)
  1324  </pre>
  1325  
  1326  <p>
  1327  The initial capacity does not bound its size:
  1328  maps grow to accommodate the number of items
  1329  stored in them, with the exception of <code>nil</code> maps.
  1330  A <code>nil</code> map is equivalent to an empty map except that no elements
  1331  may be added.
  1332  
  1333  <h3 id="Channel_types">Channel types</h3>
  1334  
  1335  <p>
  1336  A channel provides a mechanism for
  1337  <a href="#Go_statements">concurrently executing functions</a>
  1338  to communicate by
  1339  <a href="#Send_statements">sending</a> and
  1340  <a href="#Receive_operator">receiving</a>
  1341  values of a specified element type.
  1342  The value of an uninitialized channel is <code>nil</code>.
  1343  </p>
  1344  
  1345  <pre class="ebnf">
  1346  ChannelType = ( "chan" | "chan" "&lt;-" | "&lt;-" "chan" ) ElementType .
  1347  </pre>
  1348  
  1349  <p>
  1350  The optional <code>&lt;-</code> operator specifies the channel <i>direction</i>,
  1351  <i>send</i> or <i>receive</i>. If no direction is given, the channel is
  1352  <i>bidirectional</i>.
  1353  A channel may be constrained only to send or only to receive by
  1354  <a href="#Conversions">conversion</a> or <a href="#Assignments">assignment</a>.
  1355  </p>
  1356  
  1357  <pre>
  1358  chan T          // can be used to send and receive values of type T
  1359  chan&lt;- float64  // can only be used to send float64s
  1360  &lt;-chan int      // can only be used to receive ints
  1361  </pre>
  1362  
  1363  <p>
  1364  The <code>&lt;-</code> operator associates with the leftmost <code>chan</code>
  1365  possible:
  1366  </p>
  1367  
  1368  <pre>
  1369  chan&lt;- chan int    // same as chan&lt;- (chan int)
  1370  chan&lt;- &lt;-chan int  // same as chan&lt;- (&lt;-chan int)
  1371  &lt;-chan &lt;-chan int  // same as &lt;-chan (&lt;-chan int)
  1372  chan (&lt;-chan int)
  1373  </pre>
  1374  
  1375  <p>
  1376  A new, initialized channel
  1377  value can be made using the built-in function
  1378  <a href="#Making_slices_maps_and_channels"><code>make</code></a>,
  1379  which takes the channel type and an optional <i>capacity</i> as arguments:
  1380  </p>
  1381  
  1382  <pre>
  1383  make(chan int, 100)
  1384  </pre>
  1385  
  1386  <p>
  1387  The capacity, in number of elements, sets the size of the buffer in the channel.
  1388  If the capacity is zero or absent, the channel is unbuffered and communication
  1389  succeeds only when both a sender and receiver are ready. Otherwise, the channel
  1390  is buffered and communication succeeds without blocking if the buffer
  1391  is not full (sends) or not empty (receives).
  1392  A <code>nil</code> channel is never ready for communication.
  1393  </p>
  1394  
  1395  <p>
  1396  A channel may be closed with the built-in function
  1397  <a href="#Close"><code>close</code></a>.
  1398  The multi-valued assignment form of the
  1399  <a href="#Receive_operator">receive operator</a>
  1400  reports whether a received value was sent before
  1401  the channel was closed.
  1402  </p>
  1403  
  1404  <p>
  1405  A single channel may be used in
  1406  <a href="#Send_statements">send statements</a>,
  1407  <a href="#Receive_operator">receive operations</a>,
  1408  and calls to the built-in functions
  1409  <a href="#Length_and_capacity"><code>cap</code></a> and
  1410  <a href="#Length_and_capacity"><code>len</code></a>
  1411  by any number of goroutines without further synchronization.
  1412  Channels act as first-in-first-out queues.
  1413  For example, if one goroutine sends values on a channel
  1414  and a second goroutine receives them, the values are
  1415  received in the order sent.
  1416  </p>
  1417  
  1418  <h2 id="Properties_of_types_and_values">Properties of types and values</h2>
  1419  
  1420  <h3 id="Type_identity">Type identity</h3>
  1421  
  1422  <p>
  1423  Two types are either <i>identical</i> or <i>different</i>.
  1424  </p>
  1425  
  1426  <p>
  1427  A <a href="#Type_definitions">defined type</a> is always different from any other type.
  1428  Otherwise, two types are identical if their <a href="#Types">underlying</a> type literals are
  1429  structurally equivalent; that is, they have the same literal structure and corresponding
  1430  components have identical types. In detail:
  1431  </p>
  1432  
  1433  <ul>
  1434  	<li>Two array types are identical if they have identical element types and
  1435  	    the same array length.</li>
  1436  
  1437  	<li>Two slice types are identical if they have identical element types.</li>
  1438  
  1439  	<li>Two struct types are identical if they have the same sequence of fields,
  1440  	    and if corresponding fields have the same names, and identical types,
  1441  	    and identical tags.
  1442  	    <a href="#Exported_identifiers">Non-exported</a> field names from different
  1443  	    packages are always different.</li>
  1444  
  1445  	<li>Two pointer types are identical if they have identical base types.</li>
  1446  
  1447  	<li>Two function types are identical if they have the same number of parameters
  1448  	    and result values, corresponding parameter and result types are
  1449  	    identical, and either both functions are variadic or neither is.
  1450  	    Parameter and result names are not required to match.</li>
  1451  
  1452  	<li>Two interface types are identical if they have the same set of methods
  1453  	    with the same names and identical function types.
  1454  	    <a href="#Exported_identifiers">Non-exported</a> method names from different
  1455  	    packages are always different. The order of the methods is irrelevant.</li>
  1456  
  1457  	<li>Two map types are identical if they have identical key and value types.</li>
  1458  
  1459  	<li>Two channel types are identical if they have identical value types and
  1460  	    the same direction.</li>
  1461  </ul>
  1462  
  1463  <p>
  1464  Given the declarations
  1465  </p>
  1466  
  1467  <pre>
  1468  type (
  1469  	A0 = []string
  1470  	A1 = A0
  1471  	A2 = struct{ a, b int }
  1472  	A3 = int
  1473  	A4 = func(A3, float64) *A0
  1474  	A5 = func(x int, _ float64) *[]string
  1475  )
  1476  
  1477  type (
  1478  	B0 A0
  1479  	B1 []string
  1480  	B2 struct{ a, b int }
  1481  	B3 struct{ a, c int }
  1482  	B4 func(int, float64) *B0
  1483  	B5 func(x int, y float64) *A1
  1484  )
  1485  
  1486  type	C0 = B0
  1487  </pre>
  1488  
  1489  <p>
  1490  these types are identical:
  1491  </p>
  1492  
  1493  <pre>
  1494  A0, A1, and []string
  1495  A2 and struct{ a, b int }
  1496  A3 and int
  1497  A4, func(int, float64) *[]string, and A5
  1498  
  1499  B0, B0, and C0
  1500  []int and []int
  1501  struct{ a, b *T5 } and struct{ a, b *T5 }
  1502  func(x int, y float64) *[]string, func(int, float64) (result *[]string), and A5
  1503  </pre>
  1504  
  1505  <p>
  1506  <code>B0</code> and <code>B1</code> are different because they are new types
  1507  created by distinct <a href="#Type_definitions">type definitions</a>;
  1508  <code>func(int, float64) *B0</code> and <code>func(x int, y float64) *[]string</code>
  1509  are different because <code>B0</code> is different from <code>[]string</code>.
  1510  </p>
  1511  
  1512  
  1513  <h3 id="Assignability">Assignability</h3>
  1514  
  1515  <p>
  1516  A value <code>x</code> is <i>assignable</i> to a <a href="#Variables">variable</a> of type <code>T</code>
  1517  ("<code>x</code> is assignable to <code>T</code>") if one of the following conditions applies:
  1518  </p>
  1519  
  1520  <ul>
  1521  <li>
  1522  <code>x</code>'s type is identical to <code>T</code>.
  1523  </li>
  1524  <li>
  1525  <code>x</code>'s type <code>V</code> and <code>T</code> have identical
  1526  <a href="#Types">underlying types</a> and at least one of <code>V</code>
  1527  or <code>T</code> is not a <a href="#Type_definitions">defined</a> type.
  1528  </li>
  1529  <li>
  1530  <code>T</code> is an interface type and
  1531  <code>x</code> <a href="#Interface_types">implements</a> <code>T</code>.
  1532  </li>
  1533  <li>
  1534  <code>x</code> is a bidirectional channel value, <code>T</code> is a channel type,
  1535  <code>x</code>'s type <code>V</code> and <code>T</code> have identical element types,
  1536  and at least one of <code>V</code> or <code>T</code> is not a defined type.
  1537  </li>
  1538  <li>
  1539  <code>x</code> is the predeclared identifier <code>nil</code> and <code>T</code>
  1540  is a pointer, function, slice, map, channel, or interface type.
  1541  </li>
  1542  <li>
  1543  <code>x</code> is an untyped <a href="#Constants">constant</a>
  1544  <a href="#Representability">representable</a>
  1545  by a value of type <code>T</code>.
  1546  </li>
  1547  </ul>
  1548  
  1549  
  1550  <h3 id="Representability">Representability</h3>
  1551  
  1552  <p>
  1553  A <a href="#Constants">constant</a> <code>x</code> is <i>representable</i>
  1554  by a value of type <code>T</code> if one of the following conditions applies:
  1555  </p>
  1556  
  1557  <ul>
  1558  <li>
  1559  <code>x</code> is in the set of values <a href="#Types">determined</a> by <code>T</code>.
  1560  </li>
  1561  
  1562  <li>
  1563  <code>T</code> is a floating-point type and <code>x</code> can be rounded to <code>T</code>'s
  1564  precision without overflow. Rounding uses IEEE 754 round-to-even rules but with an IEEE
  1565  negative zero further simplified to an unsigned zero. Note that constant values never result
  1566  in an IEEE negative zero, NaN, or infinity.
  1567  </li>
  1568  
  1569  <li>
  1570  <code>T</code> is a complex type, and <code>x</code>'s
  1571  <a href="#Complex_numbers">components</a> <code>real(x)</code> and <code>imag(x)</code>
  1572  are representable by values of <code>T</code>'s component type (<code>float32</code> or
  1573  <code>float64</code>).
  1574  </li>
  1575  </ul>
  1576  
  1577  <pre>
  1578  x                   T           x is representable by a value of T because
  1579  
  1580  'a'                 byte        97 is in the set of byte values
  1581  97                  rune        rune is an alias for int32, and 97 is in the set of 32-bit integers
  1582  "foo"               string      "foo" is in the set of string values
  1583  1024                int16       1024 is in the set of 16-bit integers
  1584  42.0                byte        42 is in the set of unsigned 8-bit integers
  1585  1e10                uint64      10000000000 is in the set of unsigned 64-bit integers
  1586  2.718281828459045   float32     2.718281828459045 rounds to 2.7182817 which is in the set of float32 values
  1587  -1e-1000            float64     -1e-1000 rounds to IEEE -0.0 which is further simplified to 0.0
  1588  0i                  int         0 is an integer value
  1589  (42 + 0i)           float32     42.0 (with zero imaginary part) is in the set of float32 values
  1590  </pre>
  1591  
  1592  <pre>
  1593  x                   T           x is not representable by a value of T because
  1594  
  1595  0                   bool        0 is not in the set of boolean values
  1596  'a'                 string      'a' is a rune, it is not in the set of string values
  1597  1024                byte        1024 is not in the set of unsigned 8-bit integers
  1598  -1                  uint16      -1 is not in the set of unsigned 16-bit integers
  1599  1.1                 int         1.1 is not an integer value
  1600  42i                 float32     (0 + 42i) is not in the set of float32 values
  1601  1e1000              float64     1e1000 overflows to IEEE +Inf after rounding
  1602  </pre>
  1603  
  1604  
  1605  <h2 id="Blocks">Blocks</h2>
  1606  
  1607  <p>
  1608  A <i>block</i> is a possibly empty sequence of declarations and statements
  1609  within matching brace brackets.
  1610  </p>
  1611  
  1612  <pre class="ebnf">
  1613  Block = "{" StatementList "}" .
  1614  StatementList = { Statement ";" } .
  1615  </pre>
  1616  
  1617  <p>
  1618  In addition to explicit blocks in the source code, there are implicit blocks:
  1619  </p>
  1620  
  1621  <ol>
  1622  	<li>The <i>universe block</i> encompasses all Go source text.</li>
  1623  
  1624  	<li>Each <a href="#Packages">package</a> has a <i>package block</i> containing all
  1625  	    Go source text for that package.</li>
  1626  
  1627  	<li>Each file has a <i>file block</i> containing all Go source text
  1628  	    in that file.</li>
  1629  
  1630  	<li>Each <a href="#If_statements">"if"</a>,
  1631  	    <a href="#For_statements">"for"</a>, and
  1632  	    <a href="#Switch_statements">"switch"</a>
  1633  	    statement is considered to be in its own implicit block.</li>
  1634  
  1635  	<li>Each clause in a <a href="#Switch_statements">"switch"</a>
  1636  	    or <a href="#Select_statements">"select"</a> statement
  1637  	    acts as an implicit block.</li>
  1638  </ol>
  1639  
  1640  <p>
  1641  Blocks nest and influence <a href="#Declarations_and_scope">scoping</a>.
  1642  </p>
  1643  
  1644  
  1645  <h2 id="Declarations_and_scope">Declarations and scope</h2>
  1646  
  1647  <p>
  1648  A <i>declaration</i> binds a non-<a href="#Blank_identifier">blank</a> identifier to a
  1649  <a href="#Constant_declarations">constant</a>,
  1650  <a href="#Type_declarations">type</a>,
  1651  <a href="#Variable_declarations">variable</a>,
  1652  <a href="#Function_declarations">function</a>,
  1653  <a href="#Labeled_statements">label</a>, or
  1654  <a href="#Import_declarations">package</a>.
  1655  Every identifier in a program must be declared.
  1656  No identifier may be declared twice in the same block, and
  1657  no identifier may be declared in both the file and package block.
  1658  </p>
  1659  
  1660  <p>
  1661  The <a href="#Blank_identifier">blank identifier</a> may be used like any other identifier
  1662  in a declaration, but it does not introduce a binding and thus is not declared.
  1663  In the package block, the identifier <code>init</code> may only be used for
  1664  <a href="#Package_initialization"><code>init</code> function</a> declarations,
  1665  and like the blank identifier it does not introduce a new binding.
  1666  </p>
  1667  
  1668  <pre class="ebnf">
  1669  Declaration   = ConstDecl | TypeDecl | VarDecl .
  1670  TopLevelDecl  = Declaration | FunctionDecl | MethodDecl .
  1671  </pre>
  1672  
  1673  <p>
  1674  The <i>scope</i> of a declared identifier is the extent of source text in which
  1675  the identifier denotes the specified constant, type, variable, function, label, or package.
  1676  </p>
  1677  
  1678  <p>
  1679  Go is lexically scoped using <a href="#Blocks">blocks</a>:
  1680  </p>
  1681  
  1682  <ol>
  1683  	<li>The scope of a <a href="#Predeclared_identifiers">predeclared identifier</a> is the universe block.</li>
  1684  
  1685  	<li>The scope of an identifier denoting a constant, type, variable,
  1686  	    or function (but not method) declared at top level (outside any
  1687  	    function) is the package block.</li>
  1688  
  1689  	<li>The scope of the package name of an imported package is the file block
  1690  	    of the file containing the import declaration.</li>
  1691  
  1692  	<li>The scope of an identifier denoting a method receiver, function parameter,
  1693  	    or result variable is the function body.</li>
  1694  
  1695  	<li>The scope of a constant or variable identifier declared
  1696  	    inside a function begins at the end of the ConstSpec or VarSpec
  1697  	    (ShortVarDecl for short variable declarations)
  1698  	    and ends at the end of the innermost containing block.</li>
  1699  
  1700  	<li>The scope of a type identifier declared inside a function
  1701  	    begins at the identifier in the TypeSpec
  1702  	    and ends at the end of the innermost containing block.</li>
  1703  </ol>
  1704  
  1705  <p>
  1706  An identifier declared in a block may be redeclared in an inner block.
  1707  While the identifier of the inner declaration is in scope, it denotes
  1708  the entity declared by the inner declaration.
  1709  </p>
  1710  
  1711  <p>
  1712  The <a href="#Package_clause">package clause</a> is not a declaration; the package name
  1713  does not appear in any scope. Its purpose is to identify the files belonging
  1714  to the same <a href="#Packages">package</a> and to specify the default package name for import
  1715  declarations.
  1716  </p>
  1717  
  1718  
  1719  <h3 id="Label_scopes">Label scopes</h3>
  1720  
  1721  <p>
  1722  Labels are declared by <a href="#Labeled_statements">labeled statements</a> and are
  1723  used in the <a href="#Break_statements">"break"</a>,
  1724  <a href="#Continue_statements">"continue"</a>, and
  1725  <a href="#Goto_statements">"goto"</a> statements.
  1726  It is illegal to define a label that is never used.
  1727  In contrast to other identifiers, labels are not block scoped and do
  1728  not conflict with identifiers that are not labels. The scope of a label
  1729  is the body of the function in which it is declared and excludes
  1730  the body of any nested function.
  1731  </p>
  1732  
  1733  
  1734  <h3 id="Blank_identifier">Blank identifier</h3>
  1735  
  1736  <p>
  1737  The <i>blank identifier</i> is represented by the underscore character <code>_</code>.
  1738  It serves as an anonymous placeholder instead of a regular (non-blank)
  1739  identifier and has special meaning in <a href="#Declarations_and_scope">declarations</a>,
  1740  as an <a href="#Operands">operand</a>, and in <a href="#Assignments">assignments</a>.
  1741  </p>
  1742  
  1743  
  1744  <h3 id="Predeclared_identifiers">Predeclared identifiers</h3>
  1745  
  1746  <p>
  1747  The following identifiers are implicitly declared in the
  1748  <a href="#Blocks">universe block</a>:
  1749  </p>
  1750  <pre class="grammar">
  1751  Types:
  1752  	bool byte complex64 complex128 error float32 float64
  1753  	int int8 int16 int32 int64 rune string
  1754  	uint uint8 uint16 uint32 uint64 uintptr
  1755  
  1756  Constants:
  1757  	true false iota
  1758  
  1759  Zero value:
  1760  	nil
  1761  
  1762  Functions:
  1763  	append cap close complex copy delete imag len
  1764  	make new panic print println real recover
  1765  </pre>
  1766  
  1767  
  1768  <h3 id="Exported_identifiers">Exported identifiers</h3>
  1769  
  1770  <p>
  1771  An identifier may be <i>exported</i> to permit access to it from another package.
  1772  An identifier is exported if both:
  1773  </p>
  1774  <ol>
  1775  	<li>the first character of the identifier's name is a Unicode upper case
  1776  	letter (Unicode class "Lu"); and</li>
  1777  	<li>the identifier is declared in the <a href="#Blocks">package block</a>
  1778  	or it is a <a href="#Struct_types">field name</a> or
  1779  	<a href="#MethodName">method name</a>.</li>
  1780  </ol>
  1781  <p>
  1782  All other identifiers are not exported.
  1783  </p>
  1784  
  1785  
  1786  <h3 id="Uniqueness_of_identifiers">Uniqueness of identifiers</h3>
  1787  
  1788  <p>
  1789  Given a set of identifiers, an identifier is called <i>unique</i> if it is
  1790  <i>different</i> from every other in the set.
  1791  Two identifiers are different if they are spelled differently, or if they
  1792  appear in different <a href="#Packages">packages</a> and are not
  1793  <a href="#Exported_identifiers">exported</a>. Otherwise, they are the same.
  1794  </p>
  1795  
  1796  <h3 id="Constant_declarations">Constant declarations</h3>
  1797  
  1798  <p>
  1799  A constant declaration binds a list of identifiers (the names of
  1800  the constants) to the values of a list of <a href="#Constant_expressions">constant expressions</a>.
  1801  The number of identifiers must be equal
  1802  to the number of expressions, and the <i>n</i>th identifier on
  1803  the left is bound to the value of the <i>n</i>th expression on the
  1804  right.
  1805  </p>
  1806  
  1807  <pre class="ebnf">
  1808  ConstDecl      = "const" ( ConstSpec | "(" { ConstSpec ";" } ")" ) .
  1809  ConstSpec      = IdentifierList [ [ Type ] "=" ExpressionList ] .
  1810  
  1811  IdentifierList = identifier { "," identifier } .
  1812  ExpressionList = Expression { "," Expression } .
  1813  </pre>
  1814  
  1815  <p>
  1816  If the type is present, all constants take the type specified, and
  1817  the expressions must be <a href="#Assignability">assignable</a> to that type.
  1818  If the type is omitted, the constants take the
  1819  individual types of the corresponding expressions.
  1820  If the expression values are untyped <a href="#Constants">constants</a>,
  1821  the declared constants remain untyped and the constant identifiers
  1822  denote the constant values. For instance, if the expression is a
  1823  floating-point literal, the constant identifier denotes a floating-point
  1824  constant, even if the literal's fractional part is zero.
  1825  </p>
  1826  
  1827  <pre>
  1828  const Pi float64 = 3.14159265358979323846
  1829  const zero = 0.0         // untyped floating-point constant
  1830  const (
  1831  	size int64 = 1024
  1832  	eof        = -1  // untyped integer constant
  1833  )
  1834  const a, b, c = 3, 4, "foo"  // a = 3, b = 4, c = "foo", untyped integer and string constants
  1835  const u, v float32 = 0, 3    // u = 0.0, v = 3.0
  1836  </pre>
  1837  
  1838  <p>
  1839  Within a parenthesized <code>const</code> declaration list the
  1840  expression list may be omitted from any but the first declaration.
  1841  Such an empty list is equivalent to the textual substitution of the
  1842  first preceding non-empty expression list and its type if any.
  1843  Omitting the list of expressions is therefore equivalent to
  1844  repeating the previous list.  The number of identifiers must be equal
  1845  to the number of expressions in the previous list.
  1846  Together with the <a href="#Iota"><code>iota</code> constant generator</a>
  1847  this mechanism permits light-weight declaration of sequential values:
  1848  </p>
  1849  
  1850  <pre>
  1851  const (
  1852  	Sunday = iota
  1853  	Monday
  1854  	Tuesday
  1855  	Wednesday
  1856  	Thursday
  1857  	Friday
  1858  	Partyday
  1859  	numberOfDays  // this constant is not exported
  1860  )
  1861  </pre>
  1862  
  1863  
  1864  <h3 id="Iota">Iota</h3>
  1865  
  1866  <p>
  1867  Within a <a href="#Constant_declarations">constant declaration</a>, the predeclared identifier
  1868  <code>iota</code> represents successive untyped integer <a href="#Constants">
  1869  constants</a>. It is reset to 0 whenever the reserved word <code>const</code>
  1870  appears in the source and increments after each <a href="#ConstSpec">ConstSpec</a>.
  1871  It can be used to construct a set of related constants:
  1872  </p>
  1873  
  1874  <pre>
  1875  const ( // iota is reset to 0
  1876  	c0 = iota  // c0 == 0
  1877  	c1 = iota  // c1 == 1
  1878  	c2 = iota  // c2 == 2
  1879  )
  1880  
  1881  const ( // iota is reset to 0
  1882  	a = 1 &lt;&lt; iota  // a == 1
  1883  	b = 1 &lt;&lt; iota  // b == 2
  1884  	c = 3          // c == 3  (iota is not used but still incremented)
  1885  	d = 1 &lt;&lt; iota  // d == 8
  1886  )
  1887  
  1888  const ( // iota is reset to 0
  1889  	u         = iota * 42  // u == 0     (untyped integer constant)
  1890  	v float64 = iota * 42  // v == 42.0  (float64 constant)
  1891  	w         = iota * 42  // w == 84    (untyped integer constant)
  1892  )
  1893  
  1894  const x = iota  // x == 0  (iota has been reset)
  1895  const y = iota  // y == 0  (iota has been reset)
  1896  </pre>
  1897  
  1898  <p>
  1899  Within an ExpressionList, the value of each <code>iota</code> is the same because
  1900  it is only incremented after each ConstSpec:
  1901  </p>
  1902  
  1903  <pre>
  1904  const (
  1905  	bit0, mask0 = 1 &lt;&lt; iota, 1&lt;&lt;iota - 1  // bit0 == 1, mask0 == 0
  1906  	bit1, mask1                           // bit1 == 2, mask1 == 1
  1907  	_, _                                  // skips iota == 2
  1908  	bit3, mask3                           // bit3 == 8, mask3 == 7
  1909  )
  1910  </pre>
  1911  
  1912  <p>
  1913  This last example exploits the implicit repetition of the
  1914  last non-empty expression list.
  1915  </p>
  1916  
  1917  
  1918  <h3 id="Type_declarations">Type declarations</h3>
  1919  
  1920  <p>
  1921  A type declaration binds an identifier, the <i>type name</i>, to a <a href="#Types">type</a>.
  1922  Type declarations come in two forms: alias declarations and type definitions.
  1923  <p>
  1924  
  1925  <pre class="ebnf">
  1926  TypeDecl = "type" ( TypeSpec | "(" { TypeSpec ";" } ")" ) .
  1927  TypeSpec = AliasDecl | TypeDef .
  1928  </pre>
  1929  
  1930  <h4 id="Alias_declarations">Alias declarations</h4>
  1931  
  1932  <p>
  1933  An alias declaration binds an identifier to the given type.
  1934  </p>
  1935  
  1936  <pre class="ebnf">
  1937  AliasDecl = identifier "=" Type .
  1938  </pre>
  1939  
  1940  <p>
  1941  Within the <a href="#Declarations_and_scope">scope</a> of
  1942  the identifier, it serves as an <i>alias</i> for the type.
  1943  </p>
  1944  
  1945  <pre>
  1946  type (
  1947  	nodeList = []*Node  // nodeList and []*Node are identical types
  1948  	Polar    = polar    // Polar and polar denote identical types
  1949  )
  1950  </pre>
  1951  
  1952  
  1953  <h4 id="Type_definitions">Type definitions</h4>
  1954  
  1955  <p>
  1956  A type definition creates a new, distinct type with the same
  1957  <a href="#Types">underlying type</a> and operations as the given type,
  1958  and binds an identifier to it.
  1959  </p>
  1960  
  1961  <pre class="ebnf">
  1962  TypeDef = identifier Type .
  1963  </pre>
  1964  
  1965  <p>
  1966  The new type is called a <i>defined type</i>.
  1967  It is <a href="#Type_identity">different</a> from any other type,
  1968  including the type it is created from.
  1969  </p>
  1970  
  1971  <pre>
  1972  type (
  1973  	Point struct{ x, y float64 }  // Point and struct{ x, y float64 } are different types
  1974  	polar Point                   // polar and Point denote different types
  1975  )
  1976  
  1977  type TreeNode struct {
  1978  	left, right *TreeNode
  1979  	value *Comparable
  1980  }
  1981  
  1982  type Block interface {
  1983  	BlockSize() int
  1984  	Encrypt(src, dst []byte)
  1985  	Decrypt(src, dst []byte)
  1986  }
  1987  </pre>
  1988  
  1989  <p>
  1990  A defined type may have <a href="#Method_declarations">methods</a> associated with it.
  1991  It does not inherit any methods bound to the given type,
  1992  but the <a href="#Method_sets">method set</a>
  1993  of an interface type or of elements of a composite type remains unchanged:
  1994  </p>
  1995  
  1996  <pre>
  1997  // A Mutex is a data type with two methods, Lock and Unlock.
  1998  type Mutex struct         { /* Mutex fields */ }
  1999  func (m *Mutex) Lock()    { /* Lock implementation */ }
  2000  func (m *Mutex) Unlock()  { /* Unlock implementation */ }
  2001  
  2002  // NewMutex has the same composition as Mutex but its method set is empty.
  2003  type NewMutex Mutex
  2004  
  2005  // The method set of PtrMutex's underlying type *Mutex remains unchanged,
  2006  // but the method set of PtrMutex is empty.
  2007  type PtrMutex *Mutex
  2008  
  2009  // The method set of *PrintableMutex contains the methods
  2010  // Lock and Unlock bound to its embedded field Mutex.
  2011  type PrintableMutex struct {
  2012  	Mutex
  2013  }
  2014  
  2015  // MyBlock is an interface type that has the same method set as Block.
  2016  type MyBlock Block
  2017  </pre>
  2018  
  2019  <p>
  2020  Type definitions may be used to define different boolean, numeric,
  2021  or string types and associate methods with them:
  2022  </p>
  2023  
  2024  <pre>
  2025  type TimeZone int
  2026  
  2027  const (
  2028  	EST TimeZone = -(5 + iota)
  2029  	CST
  2030  	MST
  2031  	PST
  2032  )
  2033  
  2034  func (tz TimeZone) String() string {
  2035  	return fmt.Sprintf("GMT%+dh", tz)
  2036  }
  2037  </pre>
  2038  
  2039  
  2040  <h3 id="Variable_declarations">Variable declarations</h3>
  2041  
  2042  <p>
  2043  A variable declaration creates one or more <a href="#Variables">variables</a>,
  2044  binds corresponding identifiers to them, and gives each a type and an initial value.
  2045  </p>
  2046  
  2047  <pre class="ebnf">
  2048  VarDecl     = "var" ( VarSpec | "(" { VarSpec ";" } ")" ) .
  2049  VarSpec     = IdentifierList ( Type [ "=" ExpressionList ] | "=" ExpressionList ) .
  2050  </pre>
  2051  
  2052  <pre>
  2053  var i int
  2054  var U, V, W float64
  2055  var k = 0
  2056  var x, y float32 = -1, -2
  2057  var (
  2058  	i       int
  2059  	u, v, s = 2.0, 3.0, "bar"
  2060  )
  2061  var re, im = complexSqrt(-1)
  2062  var _, found = entries[name]  // map lookup; only interested in "found"
  2063  </pre>
  2064  
  2065  <p>
  2066  If a list of expressions is given, the variables are initialized
  2067  with the expressions following the rules for <a href="#Assignments">assignments</a>.
  2068  Otherwise, each variable is initialized to its <a href="#The_zero_value">zero value</a>.
  2069  </p>
  2070  
  2071  <p>
  2072  If a type is present, each variable is given that type.
  2073  Otherwise, each variable is given the type of the corresponding
  2074  initialization value in the assignment.
  2075  If that value is an untyped constant, it is first
  2076  <a href="#Conversions">converted</a> to its <a href="#Constants">default type</a>;
  2077  if it is an untyped boolean value, it is first converted to type <code>bool</code>.
  2078  The predeclared value <code>nil</code> cannot be used to initialize a variable
  2079  with no explicit type.
  2080  </p>
  2081  
  2082  <pre>
  2083  var d = math.Sin(0.5)  // d is float64
  2084  var i = 42             // i is int
  2085  var t, ok = x.(T)      // t is T, ok is bool
  2086  var n = nil            // illegal
  2087  </pre>
  2088  
  2089  <p>
  2090  Implementation restriction: A compiler may make it illegal to declare a variable
  2091  inside a <a href="#Function_declarations">function body</a> if the variable is
  2092  never used.
  2093  </p>
  2094  
  2095  <h3 id="Short_variable_declarations">Short variable declarations</h3>
  2096  
  2097  <p>
  2098  A <i>short variable declaration</i> uses the syntax:
  2099  </p>
  2100  
  2101  <pre class="ebnf">
  2102  ShortVarDecl = IdentifierList ":=" ExpressionList .
  2103  </pre>
  2104  
  2105  <p>
  2106  It is shorthand for a regular <a href="#Variable_declarations">variable declaration</a>
  2107  with initializer expressions but no types:
  2108  </p>
  2109  
  2110  <pre class="grammar">
  2111  "var" IdentifierList = ExpressionList .
  2112  </pre>
  2113  
  2114  <pre>
  2115  i, j := 0, 10
  2116  f := func() int { return 7 }
  2117  ch := make(chan int)
  2118  r, w := os.Pipe(fd)  // os.Pipe() returns two values
  2119  _, y, _ := coord(p)  // coord() returns three values; only interested in y coordinate
  2120  </pre>
  2121  
  2122  <p>
  2123  Unlike regular variable declarations, a short variable declaration may <i>redeclare</i>
  2124  variables provided they were originally declared earlier in the same block
  2125  (or the parameter lists if the block is the function body) with the same type,
  2126  and at least one of the non-<a href="#Blank_identifier">blank</a> variables is new.
  2127  As a consequence, redeclaration can only appear in a multi-variable short declaration.
  2128  Redeclaration does not introduce a new variable; it just assigns a new value to the original.
  2129  </p>
  2130  
  2131  <pre>
  2132  field1, offset := nextField(str, 0)
  2133  field2, offset := nextField(str, offset)  // redeclares offset
  2134  a, a := 1, 2                              // illegal: double declaration of a or no new variable if a was declared elsewhere
  2135  </pre>
  2136  
  2137  <p>
  2138  Short variable declarations may appear only inside functions.
  2139  In some contexts such as the initializers for
  2140  <a href="#If_statements">"if"</a>,
  2141  <a href="#For_statements">"for"</a>, or
  2142  <a href="#Switch_statements">"switch"</a> statements,
  2143  they can be used to declare local temporary variables.
  2144  </p>
  2145  
  2146  <h3 id="Function_declarations">Function declarations</h3>
  2147  
  2148  <p>
  2149  A function declaration binds an identifier, the <i>function name</i>,
  2150  to a function.
  2151  </p>
  2152  
  2153  <pre class="ebnf">
  2154  FunctionDecl = "func" FunctionName ( Function | Signature ) .
  2155  FunctionName = identifier .
  2156  Function     = Signature FunctionBody .
  2157  FunctionBody = Block .
  2158  </pre>
  2159  
  2160  <p>
  2161  If the function's <a href="#Function_types">signature</a> declares
  2162  result parameters, the function body's statement list must end in
  2163  a <a href="#Terminating_statements">terminating statement</a>.
  2164  </p>
  2165  
  2166  <pre>
  2167  func IndexRune(s string, r rune) int {
  2168  	for i, c := range s {
  2169  		if c == r {
  2170  			return i
  2171  		}
  2172  	}
  2173  	// invalid: missing return statement
  2174  }
  2175  </pre>
  2176  
  2177  <p>
  2178  A function declaration may omit the body. Such a declaration provides the
  2179  signature for a function implemented outside Go, such as an assembly routine.
  2180  </p>
  2181  
  2182  <pre>
  2183  func min(x int, y int) int {
  2184  	if x &lt; y {
  2185  		return x
  2186  	}
  2187  	return y
  2188  }
  2189  
  2190  func flushICache(begin, end uintptr)  // implemented externally
  2191  </pre>
  2192  
  2193  <h3 id="Method_declarations">Method declarations</h3>
  2194  
  2195  <p>
  2196  A method is a <a href="#Function_declarations">function</a> with a <i>receiver</i>.
  2197  A method declaration binds an identifier, the <i>method name</i>, to a method,
  2198  and associates the method with the receiver's <i>base type</i>.
  2199  </p>
  2200  
  2201  <pre class="ebnf">
  2202  MethodDecl = "func" Receiver MethodName ( Function | Signature ) .
  2203  Receiver   = Parameters .
  2204  </pre>
  2205  
  2206  <p>
  2207  The receiver is specified via an extra parameter section preceding the method
  2208  name. That parameter section must declare a single non-variadic parameter, the receiver.
  2209  Its type must be of the form <code>T</code> or <code>*T</code> (possibly using
  2210  parentheses) where <code>T</code> is a type name. The type denoted by <code>T</code> is called
  2211  the receiver <i>base type</i>; it must not be a pointer or interface type and
  2212  it must be <a href="#Type_definitions">defined</a> in the same package as the method.
  2213  The method is said to be <i>bound</i> to the base type and the method name
  2214  is visible only within <a href="#Selectors">selectors</a> for type <code>T</code>
  2215  or <code>*T</code>.
  2216  </p>
  2217  
  2218  <p>
  2219  A non-<a href="#Blank_identifier">blank</a> receiver identifier must be
  2220  <a href="#Uniqueness_of_identifiers">unique</a> in the method signature.
  2221  If the receiver's value is not referenced inside the body of the method,
  2222  its identifier may be omitted in the declaration. The same applies in
  2223  general to parameters of functions and methods.
  2224  </p>
  2225  
  2226  <p>
  2227  For a base type, the non-blank names of methods bound to it must be unique.
  2228  If the base type is a <a href="#Struct_types">struct type</a>,
  2229  the non-blank method and field names must be distinct.
  2230  </p>
  2231  
  2232  <p>
  2233  Given type <code>Point</code>, the declarations
  2234  </p>
  2235  
  2236  <pre>
  2237  func (p *Point) Length() float64 {
  2238  	return math.Sqrt(p.x * p.x + p.y * p.y)
  2239  }
  2240  
  2241  func (p *Point) Scale(factor float64) {
  2242  	p.x *= factor
  2243  	p.y *= factor
  2244  }
  2245  </pre>
  2246  
  2247  <p>
  2248  bind the methods <code>Length</code> and <code>Scale</code>,
  2249  with receiver type <code>*Point</code>,
  2250  to the base type <code>Point</code>.
  2251  </p>
  2252  
  2253  <p>
  2254  The type of a method is the type of a function with the receiver as first
  2255  argument.  For instance, the method <code>Scale</code> has type
  2256  </p>
  2257  
  2258  <pre>
  2259  func(p *Point, factor float64)
  2260  </pre>
  2261  
  2262  <p>
  2263  However, a function declared this way is not a method.
  2264  </p>
  2265  
  2266  
  2267  <h2 id="Expressions">Expressions</h2>
  2268  
  2269  <p>
  2270  An expression specifies the computation of a value by applying
  2271  operators and functions to operands.
  2272  </p>
  2273  
  2274  <h3 id="Operands">Operands</h3>
  2275  
  2276  <p>
  2277  Operands denote the elementary values in an expression. An operand may be a
  2278  literal, a (possibly <a href="#Qualified_identifiers">qualified</a>)
  2279  non-<a href="#Blank_identifier">blank</a> identifier denoting a
  2280  <a href="#Constant_declarations">constant</a>,
  2281  <a href="#Variable_declarations">variable</a>, or
  2282  <a href="#Function_declarations">function</a>,
  2283  a <a href="#Method_expressions">method expression</a> yielding a function,
  2284  or a parenthesized expression.
  2285  </p>
  2286  
  2287  <p>
  2288  The <a href="#Blank_identifier">blank identifier</a> may appear as an
  2289  operand only on the left-hand side of an <a href="#Assignments">assignment</a>.
  2290  </p>
  2291  
  2292  <pre class="ebnf">
  2293  Operand     = Literal | OperandName | MethodExpr | "(" Expression ")" .
  2294  Literal     = BasicLit | CompositeLit | FunctionLit .
  2295  BasicLit    = int_lit | float_lit | imaginary_lit | rune_lit | string_lit .
  2296  OperandName = identifier | QualifiedIdent.
  2297  </pre>
  2298  
  2299  <h3 id="Qualified_identifiers">Qualified identifiers</h3>
  2300  
  2301  <p>
  2302  A qualified identifier is an identifier qualified with a package name prefix.
  2303  Both the package name and the identifier must not be
  2304  <a href="#Blank_identifier">blank</a>.
  2305  </p>
  2306  
  2307  <pre class="ebnf">
  2308  QualifiedIdent = PackageName "." identifier .
  2309  </pre>
  2310  
  2311  <p>
  2312  A qualified identifier accesses an identifier in a different package, which
  2313  must be <a href="#Import_declarations">imported</a>.
  2314  The identifier must be <a href="#Exported_identifiers">exported</a> and
  2315  declared in the <a href="#Blocks">package block</a> of that package.
  2316  </p>
  2317  
  2318  <pre>
  2319  math.Sin	// denotes the Sin function in package math
  2320  </pre>
  2321  
  2322  <h3 id="Composite_literals">Composite literals</h3>
  2323  
  2324  <p>
  2325  Composite literals construct values for structs, arrays, slices, and maps
  2326  and create a new value each time they are evaluated.
  2327  They consist of the type of the literal followed by a brace-bound list of elements.
  2328  Each element may optionally be preceded by a corresponding key.
  2329  </p>
  2330  
  2331  <pre class="ebnf">
  2332  CompositeLit  = LiteralType LiteralValue .
  2333  LiteralType   = StructType | ArrayType | "[" "..." "]" ElementType |
  2334                  SliceType | MapType | TypeName .
  2335  LiteralValue  = "{" [ ElementList [ "," ] ] "}" .
  2336  ElementList   = KeyedElement { "," KeyedElement } .
  2337  KeyedElement  = [ Key ":" ] Element .
  2338  Key           = FieldName | Expression | LiteralValue .
  2339  FieldName     = identifier .
  2340  Element       = Expression | LiteralValue .
  2341  </pre>
  2342  
  2343  <p>
  2344  The LiteralType's underlying type must be a struct, array, slice, or map type
  2345  (the grammar enforces this constraint except when the type is given
  2346  as a TypeName).
  2347  The types of the elements and keys must be <a href="#Assignability">assignable</a>
  2348  to the respective field, element, and key types of the literal type;
  2349  there is no additional conversion.
  2350  The key is interpreted as a field name for struct literals,
  2351  an index for array and slice literals, and a key for map literals.
  2352  For map literals, all elements must have a key. It is an error
  2353  to specify multiple elements with the same field name or
  2354  constant key value. For non-constant map keys, see the section on
  2355  <a href="#Order_of_evaluation">evaluation order</a>.
  2356  </p>
  2357  
  2358  <p>
  2359  For struct literals the following rules apply:
  2360  </p>
  2361  <ul>
  2362  	<li>A key must be a field name declared in the struct type.
  2363  	</li>
  2364  	<li>An element list that does not contain any keys must
  2365  	    list an element for each struct field in the
  2366  	    order in which the fields are declared.
  2367  	</li>
  2368  	<li>If any element has a key, every element must have a key.
  2369  	</li>
  2370  	<li>An element list that contains keys does not need to
  2371  	    have an element for each struct field. Omitted fields
  2372  	    get the zero value for that field.
  2373  	</li>
  2374  	<li>A literal may omit the element list; such a literal evaluates
  2375  	    to the zero value for its type.
  2376  	</li>
  2377  	<li>It is an error to specify an element for a non-exported
  2378  	    field of a struct belonging to a different package.
  2379  	</li>
  2380  </ul>
  2381  
  2382  <p>
  2383  Given the declarations
  2384  </p>
  2385  <pre>
  2386  type Point3D struct { x, y, z float64 }
  2387  type Line struct { p, q Point3D }
  2388  </pre>
  2389  
  2390  <p>
  2391  one may write
  2392  </p>
  2393  
  2394  <pre>
  2395  origin := Point3D{}                            // zero value for Point3D
  2396  line := Line{origin, Point3D{y: -4, z: 12.3}}  // zero value for line.q.x
  2397  </pre>
  2398  
  2399  <p>
  2400  For array and slice literals the following rules apply:
  2401  </p>
  2402  <ul>
  2403  	<li>Each element has an associated integer index marking
  2404  	    its position in the array.
  2405  	</li>
  2406  	<li>An element with a key uses the key as its index. The
  2407  	    key must be a non-negative constant
  2408  	    <a href="#Representability">representable</a> by
  2409  	    a value of type <code>int</code>; and if it is typed
  2410  	    it must be of integer type.
  2411  	</li>
  2412  	<li>An element without a key uses the previous element's index plus one.
  2413  	    If the first element has no key, its index is zero.
  2414  	</li>
  2415  </ul>
  2416  
  2417  <p>
  2418  <a href="#Address_operators">Taking the address</a> of a composite literal
  2419  generates a pointer to a unique <a href="#Variables">variable</a> initialized
  2420  with the literal's value.
  2421  </p>
  2422  <pre>
  2423  var pointer *Point3D = &amp;Point3D{y: 1000}
  2424  </pre>
  2425  
  2426  <p>
  2427  The length of an array literal is the length specified in the literal type.
  2428  If fewer elements than the length are provided in the literal, the missing
  2429  elements are set to the zero value for the array element type.
  2430  It is an error to provide elements with index values outside the index range
  2431  of the array. The notation <code>...</code> specifies an array length equal
  2432  to the maximum element index plus one.
  2433  </p>
  2434  
  2435  <pre>
  2436  buffer := [10]string{}             // len(buffer) == 10
  2437  intSet := [6]int{1, 2, 3, 5}       // len(intSet) == 6
  2438  days := [...]string{"Sat", "Sun"}  // len(days) == 2
  2439  </pre>
  2440  
  2441  <p>
  2442  A slice literal describes the entire underlying array literal.
  2443  Thus the length and capacity of a slice literal are the maximum
  2444  element index plus one. A slice literal has the form
  2445  </p>
  2446  
  2447  <pre>
  2448  []T{x1, x2, … xn}
  2449  </pre>
  2450  
  2451  <p>
  2452  and is shorthand for a slice operation applied to an array:
  2453  </p>
  2454  
  2455  <pre>
  2456  tmp := [n]T{x1, x2, … xn}
  2457  tmp[0 : n]
  2458  </pre>
  2459  
  2460  <p>
  2461  Within a composite literal of array, slice, or map type <code>T</code>,
  2462  elements or map keys that are themselves composite literals may elide the respective
  2463  literal type if it is identical to the element or key type of <code>T</code>.
  2464  Similarly, elements or keys that are addresses of composite literals may elide
  2465  the <code>&amp;T</code> when the element or key type is <code>*T</code>.
  2466  </p>
  2467  
  2468  <pre>
  2469  [...]Point{{1.5, -3.5}, {0, 0}}     // same as [...]Point{Point{1.5, -3.5}, Point{0, 0}}
  2470  [][]int{{1, 2, 3}, {4, 5}}          // same as [][]int{[]int{1, 2, 3}, []int{4, 5}}
  2471  [][]Point{{{0, 1}, {1, 2}}}         // same as [][]Point{[]Point{Point{0, 1}, Point{1, 2}}}
  2472  map[string]Point{"orig": {0, 0}}    // same as map[string]Point{"orig": Point{0, 0}}
  2473  map[Point]string{{0, 0}: "orig"}    // same as map[Point]string{Point{0, 0}: "orig"}
  2474  
  2475  type PPoint *Point
  2476  [2]*Point{{1.5, -3.5}, {}}          // same as [2]*Point{&amp;Point{1.5, -3.5}, &amp;Point{}}
  2477  [2]PPoint{{1.5, -3.5}, {}}          // same as [2]PPoint{PPoint(&amp;Point{1.5, -3.5}), PPoint(&amp;Point{})}
  2478  </pre>
  2479  
  2480  <p>
  2481  A parsing ambiguity arises when a composite literal using the
  2482  TypeName form of the LiteralType appears as an operand between the
  2483  <a href="#Keywords">keyword</a> and the opening brace of the block
  2484  of an "if", "for", or "switch" statement, and the composite literal
  2485  is not enclosed in parentheses, square brackets, or curly braces.
  2486  In this rare case, the opening brace of the literal is erroneously parsed
  2487  as the one introducing the block of statements. To resolve the ambiguity,
  2488  the composite literal must appear within parentheses.
  2489  </p>
  2490  
  2491  <pre>
  2492  if x == (T{a,b,c}[i]) { … }
  2493  if (x == T{a,b,c}[i]) { … }
  2494  </pre>
  2495  
  2496  <p>
  2497  Examples of valid array, slice, and map literals:
  2498  </p>
  2499  
  2500  <pre>
  2501  // list of prime numbers
  2502  primes := []int{2, 3, 5, 7, 9, 2147483647}
  2503  
  2504  // vowels[ch] is true if ch is a vowel
  2505  vowels := [128]bool{'a': true, 'e': true, 'i': true, 'o': true, 'u': true, 'y': true}
  2506  
  2507  // the array [10]float32{-1, 0, 0, 0, -0.1, -0.1, 0, 0, 0, -1}
  2508  filter := [10]float32{-1, 4: -0.1, -0.1, 9: -1}
  2509  
  2510  // frequencies in Hz for equal-tempered scale (A4 = 440Hz)
  2511  noteFrequency := map[string]float32{
  2512  	"C0": 16.35, "D0": 18.35, "E0": 20.60, "F0": 21.83,
  2513  	"G0": 24.50, "A0": 27.50, "B0": 30.87,
  2514  }
  2515  </pre>
  2516  
  2517  
  2518  <h3 id="Function_literals">Function literals</h3>
  2519  
  2520  <p>
  2521  A function literal represents an anonymous <a href="#Function_declarations">function</a>.
  2522  </p>
  2523  
  2524  <pre class="ebnf">
  2525  FunctionLit = "func" Function .
  2526  </pre>
  2527  
  2528  <pre>
  2529  func(a, b int, z float64) bool { return a*b &lt; int(z) }
  2530  </pre>
  2531  
  2532  <p>
  2533  A function literal can be assigned to a variable or invoked directly.
  2534  </p>
  2535  
  2536  <pre>
  2537  f := func(x, y int) int { return x + y }
  2538  func(ch chan int) { ch &lt;- ACK }(replyChan)
  2539  </pre>
  2540  
  2541  <p>
  2542  Function literals are <i>closures</i>: they may refer to variables
  2543  defined in a surrounding function. Those variables are then shared between
  2544  the surrounding function and the function literal, and they survive as long
  2545  as they are accessible.
  2546  </p>
  2547  
  2548  
  2549  <h3 id="Primary_expressions">Primary expressions</h3>
  2550  
  2551  <p>
  2552  Primary expressions are the operands for unary and binary expressions.
  2553  </p>
  2554  
  2555  <pre class="ebnf">
  2556  PrimaryExpr =
  2557  	Operand |
  2558  	Conversion |
  2559  	PrimaryExpr Selector |
  2560  	PrimaryExpr Index |
  2561  	PrimaryExpr Slice |
  2562  	PrimaryExpr TypeAssertion |
  2563  	PrimaryExpr Arguments .
  2564  
  2565  Selector       = "." identifier .
  2566  Index          = "[" Expression "]" .
  2567  Slice          = "[" [ Expression ] ":" [ Expression ] "]" |
  2568                   "[" [ Expression ] ":" Expression ":" Expression "]" .
  2569  TypeAssertion  = "." "(" Type ")" .
  2570  Arguments      = "(" [ ( ExpressionList | Type [ "," ExpressionList ] ) [ "..." ] [ "," ] ] ")" .
  2571  </pre>
  2572  
  2573  
  2574  <pre>
  2575  x
  2576  2
  2577  (s + ".txt")
  2578  f(3.1415, true)
  2579  Point{1, 2}
  2580  m["foo"]
  2581  s[i : j + 1]
  2582  obj.color
  2583  f.p[i].x()
  2584  </pre>
  2585  
  2586  
  2587  <h3 id="Selectors">Selectors</h3>
  2588  
  2589  <p>
  2590  For a <a href="#Primary_expressions">primary expression</a> <code>x</code>
  2591  that is not a <a href="#Package_clause">package name</a>, the
  2592  <i>selector expression</i>
  2593  </p>
  2594  
  2595  <pre>
  2596  x.f
  2597  </pre>
  2598  
  2599  <p>
  2600  denotes the field or method <code>f</code> of the value <code>x</code>
  2601  (or sometimes <code>*x</code>; see below).
  2602  The identifier <code>f</code> is called the (field or method) <i>selector</i>;
  2603  it must not be the <a href="#Blank_identifier">blank identifier</a>.
  2604  The type of the selector expression is the type of <code>f</code>.
  2605  If <code>x</code> is a package name, see the section on
  2606  <a href="#Qualified_identifiers">qualified identifiers</a>.
  2607  </p>
  2608  
  2609  <p>
  2610  A selector <code>f</code> may denote a field or method <code>f</code> of
  2611  a type <code>T</code>, or it may refer
  2612  to a field or method <code>f</code> of a nested
  2613  <a href="#Struct_types">embedded field</a> of <code>T</code>.
  2614  The number of embedded fields traversed
  2615  to reach <code>f</code> is called its <i>depth</i> in <code>T</code>.
  2616  The depth of a field or method <code>f</code>
  2617  declared in <code>T</code> is zero.
  2618  The depth of a field or method <code>f</code> declared in
  2619  an embedded field <code>A</code> in <code>T</code> is the
  2620  depth of <code>f</code> in <code>A</code> plus one.
  2621  </p>
  2622  
  2623  <p>
  2624  The following rules apply to selectors:
  2625  </p>
  2626  
  2627  <ol>
  2628  <li>
  2629  For a value <code>x</code> of type <code>T</code> or <code>*T</code>
  2630  where <code>T</code> is not a pointer or interface type,
  2631  <code>x.f</code> denotes the field or method at the shallowest depth
  2632  in <code>T</code> where there
  2633  is such an <code>f</code>.
  2634  If there is not exactly <a href="#Uniqueness_of_identifiers">one <code>f</code></a>
  2635  with shallowest depth, the selector expression is illegal.
  2636  </li>
  2637  
  2638  <li>
  2639  For a value <code>x</code> of type <code>I</code> where <code>I</code>
  2640  is an interface type, <code>x.f</code> denotes the actual method with name
  2641  <code>f</code> of the dynamic value of <code>x</code>.
  2642  If there is no method with name <code>f</code> in the
  2643  <a href="#Method_sets">method set</a> of <code>I</code>, the selector
  2644  expression is illegal.
  2645  </li>
  2646  
  2647  <li>
  2648  As an exception, if the type of <code>x</code> is a named pointer type
  2649  and <code>(*x).f</code> is a valid selector expression denoting a field
  2650  (but not a method), <code>x.f</code> is shorthand for <code>(*x).f</code>.
  2651  </li>
  2652  
  2653  <li>
  2654  In all other cases, <code>x.f</code> is illegal.
  2655  </li>
  2656  
  2657  <li>
  2658  If <code>x</code> is of pointer type and has the value
  2659  <code>nil</code> and <code>x.f</code> denotes a struct field,
  2660  assigning to or evaluating <code>x.f</code>
  2661  causes a <a href="#Run_time_panics">run-time panic</a>.
  2662  </li>
  2663  
  2664  <li>
  2665  If <code>x</code> is of interface type and has the value
  2666  <code>nil</code>, <a href="#Calls">calling</a> or
  2667  <a href="#Method_values">evaluating</a> the method <code>x.f</code>
  2668  causes a <a href="#Run_time_panics">run-time panic</a>.
  2669  </li>
  2670  </ol>
  2671  
  2672  <p>
  2673  For example, given the declarations:
  2674  </p>
  2675  
  2676  <pre>
  2677  type T0 struct {
  2678  	x int
  2679  }
  2680  
  2681  func (*T0) M0()
  2682  
  2683  type T1 struct {
  2684  	y int
  2685  }
  2686  
  2687  func (T1) M1()
  2688  
  2689  type T2 struct {
  2690  	z int
  2691  	T1
  2692  	*T0
  2693  }
  2694  
  2695  func (*T2) M2()
  2696  
  2697  type Q *T2
  2698  
  2699  var t T2     // with t.T0 != nil
  2700  var p *T2    // with p != nil and (*p).T0 != nil
  2701  var q Q = p
  2702  </pre>
  2703  
  2704  <p>
  2705  one may write:
  2706  </p>
  2707  
  2708  <pre>
  2709  t.z          // t.z
  2710  t.y          // t.T1.y
  2711  t.x          // (*t.T0).x
  2712  
  2713  p.z          // (*p).z
  2714  p.y          // (*p).T1.y
  2715  p.x          // (*(*p).T0).x
  2716  
  2717  q.x          // (*(*q).T0).x        (*q).x is a valid field selector
  2718  
  2719  p.M0()       // ((*p).T0).M0()      M0 expects *T0 receiver
  2720  p.M1()       // ((*p).T1).M1()      M1 expects T1 receiver
  2721  p.M2()       // p.M2()              M2 expects *T2 receiver
  2722  t.M2()       // (&amp;t).M2()           M2 expects *T2 receiver, see section on Calls
  2723  </pre>
  2724  
  2725  <p>
  2726  but the following is invalid:
  2727  </p>
  2728  
  2729  <pre>
  2730  q.M0()       // (*q).M0 is valid but not a field selector
  2731  </pre>
  2732  
  2733  
  2734  <h3 id="Method_expressions">Method expressions</h3>
  2735  
  2736  <p>
  2737  If <code>M</code> is in the <a href="#Method_sets">method set</a> of type <code>T</code>,
  2738  <code>T.M</code> is a function that is callable as a regular function
  2739  with the same arguments as <code>M</code> prefixed by an additional
  2740  argument that is the receiver of the method.
  2741  </p>
  2742  
  2743  <pre class="ebnf">
  2744  MethodExpr    = ReceiverType "." MethodName .
  2745  ReceiverType  = TypeName | "(" "*" TypeName ")" | "(" ReceiverType ")" .
  2746  </pre>
  2747  
  2748  <p>
  2749  Consider a struct type <code>T</code> with two methods,
  2750  <code>Mv</code>, whose receiver is of type <code>T</code>, and
  2751  <code>Mp</code>, whose receiver is of type <code>*T</code>.
  2752  </p>
  2753  
  2754  <pre>
  2755  type T struct {
  2756  	a int
  2757  }
  2758  func (tv  T) Mv(a int) int         { return 0 }  // value receiver
  2759  func (tp *T) Mp(f float32) float32 { return 1 }  // pointer receiver
  2760  
  2761  var t T
  2762  </pre>
  2763  
  2764  <p>
  2765  The expression
  2766  </p>
  2767  
  2768  <pre>
  2769  T.Mv
  2770  </pre>
  2771  
  2772  <p>
  2773  yields a function equivalent to <code>Mv</code> but
  2774  with an explicit receiver as its first argument; it has signature
  2775  </p>
  2776  
  2777  <pre>
  2778  func(tv T, a int) int
  2779  </pre>
  2780  
  2781  <p>
  2782  That function may be called normally with an explicit receiver, so
  2783  these five invocations are equivalent:
  2784  </p>
  2785  
  2786  <pre>
  2787  t.Mv(7)
  2788  T.Mv(t, 7)
  2789  (T).Mv(t, 7)
  2790  f1 := T.Mv; f1(t, 7)
  2791  f2 := (T).Mv; f2(t, 7)
  2792  </pre>
  2793  
  2794  <p>
  2795  Similarly, the expression
  2796  </p>
  2797  
  2798  <pre>
  2799  (*T).Mp
  2800  </pre>
  2801  
  2802  <p>
  2803  yields a function value representing <code>Mp</code> with signature
  2804  </p>
  2805  
  2806  <pre>
  2807  func(tp *T, f float32) float32
  2808  </pre>
  2809  
  2810  <p>
  2811  For a method with a value receiver, one can derive a function
  2812  with an explicit pointer receiver, so
  2813  </p>
  2814  
  2815  <pre>
  2816  (*T).Mv
  2817  </pre>
  2818  
  2819  <p>
  2820  yields a function value representing <code>Mv</code> with signature
  2821  </p>
  2822  
  2823  <pre>
  2824  func(tv *T, a int) int
  2825  </pre>
  2826  
  2827  <p>
  2828  Such a function indirects through the receiver to create a value
  2829  to pass as the receiver to the underlying method;
  2830  the method does not overwrite the value whose address is passed in
  2831  the function call.
  2832  </p>
  2833  
  2834  <p>
  2835  The final case, a value-receiver function for a pointer-receiver method,
  2836  is illegal because pointer-receiver methods are not in the method set
  2837  of the value type.
  2838  </p>
  2839  
  2840  <p>
  2841  Function values derived from methods are called with function call syntax;
  2842  the receiver is provided as the first argument to the call.
  2843  That is, given <code>f := T.Mv</code>, <code>f</code> is invoked
  2844  as <code>f(t, 7)</code> not <code>t.f(7)</code>.
  2845  To construct a function that binds the receiver, use a
  2846  <a href="#Function_literals">function literal</a> or
  2847  <a href="#Method_values">method value</a>.
  2848  </p>
  2849  
  2850  <p>
  2851  It is legal to derive a function value from a method of an interface type.
  2852  The resulting function takes an explicit receiver of that interface type.
  2853  </p>
  2854  
  2855  <h3 id="Method_values">Method values</h3>
  2856  
  2857  <p>
  2858  If the expression <code>x</code> has static type <code>T</code> and
  2859  <code>M</code> is in the <a href="#Method_sets">method set</a> of type <code>T</code>,
  2860  <code>x.M</code> is called a <i>method value</i>.
  2861  The method value <code>x.M</code> is a function value that is callable
  2862  with the same arguments as a method call of <code>x.M</code>.
  2863  The expression <code>x</code> is evaluated and saved during the evaluation of the
  2864  method value; the saved copy is then used as the receiver in any calls,
  2865  which may be executed later.
  2866  </p>
  2867  
  2868  <p>
  2869  The type <code>T</code> may be an interface or non-interface type.
  2870  </p>
  2871  
  2872  <p>
  2873  As in the discussion of <a href="#Method_expressions">method expressions</a> above,
  2874  consider a struct type <code>T</code> with two methods,
  2875  <code>Mv</code>, whose receiver is of type <code>T</code>, and
  2876  <code>Mp</code>, whose receiver is of type <code>*T</code>.
  2877  </p>
  2878  
  2879  <pre>
  2880  type T struct {
  2881  	a int
  2882  }
  2883  func (tv  T) Mv(a int) int         { return 0 }  // value receiver
  2884  func (tp *T) Mp(f float32) float32 { return 1 }  // pointer receiver
  2885  
  2886  var t T
  2887  var pt *T
  2888  func makeT() T
  2889  </pre>
  2890  
  2891  <p>
  2892  The expression
  2893  </p>
  2894  
  2895  <pre>
  2896  t.Mv
  2897  </pre>
  2898  
  2899  <p>
  2900  yields a function value of type
  2901  </p>
  2902  
  2903  <pre>
  2904  func(int) int
  2905  </pre>
  2906  
  2907  <p>
  2908  These two invocations are equivalent:
  2909  </p>
  2910  
  2911  <pre>
  2912  t.Mv(7)
  2913  f := t.Mv; f(7)
  2914  </pre>
  2915  
  2916  <p>
  2917  Similarly, the expression
  2918  </p>
  2919  
  2920  <pre>
  2921  pt.Mp
  2922  </pre>
  2923  
  2924  <p>
  2925  yields a function value of type
  2926  </p>
  2927  
  2928  <pre>
  2929  func(float32) float32
  2930  </pre>
  2931  
  2932  <p>
  2933  As with <a href="#Selectors">selectors</a>, a reference to a non-interface method with a value receiver
  2934  using a pointer will automatically dereference that pointer: <code>pt.Mv</code> is equivalent to <code>(*pt).Mv</code>.
  2935  </p>
  2936  
  2937  <p>
  2938  As with <a href="#Calls">method calls</a>, a reference to a non-interface method with a pointer receiver
  2939  using an addressable value will automatically take the address of that value: <code>t.Mp</code> is equivalent to <code>(&amp;t).Mp</code>.
  2940  </p>
  2941  
  2942  <pre>
  2943  f := t.Mv; f(7)   // like t.Mv(7)
  2944  f := pt.Mp; f(7)  // like pt.Mp(7)
  2945  f := pt.Mv; f(7)  // like (*pt).Mv(7)
  2946  f := t.Mp; f(7)   // like (&amp;t).Mp(7)
  2947  f := makeT().Mp   // invalid: result of makeT() is not addressable
  2948  </pre>
  2949  
  2950  <p>
  2951  Although the examples above use non-interface types, it is also legal to create a method value
  2952  from a value of interface type.
  2953  </p>
  2954  
  2955  <pre>
  2956  var i interface { M(int) } = myVal
  2957  f := i.M; f(7)  // like i.M(7)
  2958  </pre>
  2959  
  2960  
  2961  <h3 id="Index_expressions">Index expressions</h3>
  2962  
  2963  <p>
  2964  A primary expression of the form
  2965  </p>
  2966  
  2967  <pre>
  2968  a[x]
  2969  </pre>
  2970  
  2971  <p>
  2972  denotes the element of the array, pointer to array, slice, string or map <code>a</code> indexed by <code>x</code>.
  2973  The value <code>x</code> is called the <i>index</i> or <i>map key</i>, respectively.
  2974  The following rules apply:
  2975  </p>
  2976  
  2977  <p>
  2978  If <code>a</code> is not a map:
  2979  </p>
  2980  <ul>
  2981  	<li>the index <code>x</code> must be of integer type or an untyped constant</li>
  2982  	<li>a constant index must be non-negative and
  2983  	    <a href="#Representability">representable</a> by a value of type <code>int</code></li>
  2984  	<li>a constant index that is untyped is given type <code>int</code></li>
  2985  	<li>the index <code>x</code> is <i>in range</i> if <code>0 &lt;= x &lt; len(a)</code>,
  2986  	    otherwise it is <i>out of range</i></li>
  2987  </ul>
  2988  
  2989  <p>
  2990  For <code>a</code> of <a href="#Array_types">array type</a> <code>A</code>:
  2991  </p>
  2992  <ul>
  2993  	<li>a <a href="#Constants">constant</a> index must be in range</li>
  2994  	<li>if <code>x</code> is out of range at run time,
  2995  	    a <a href="#Run_time_panics">run-time panic</a> occurs</li>
  2996  	<li><code>a[x]</code> is the array element at index <code>x</code> and the type of
  2997  	    <code>a[x]</code> is the element type of <code>A</code></li>
  2998  </ul>
  2999  
  3000  <p>
  3001  For <code>a</code> of <a href="#Pointer_types">pointer</a> to array type:
  3002  </p>
  3003  <ul>
  3004  	<li><code>a[x]</code> is shorthand for <code>(*a)[x]</code></li>
  3005  </ul>
  3006  
  3007  <p>
  3008  For <code>a</code> of <a href="#Slice_types">slice type</a> <code>S</code>:
  3009  </p>
  3010  <ul>
  3011  	<li>if <code>x</code> is out of range at run time,
  3012  	    a <a href="#Run_time_panics">run-time panic</a> occurs</li>
  3013  	<li><code>a[x]</code> is the slice element at index <code>x</code> and the type of
  3014  	    <code>a[x]</code> is the element type of <code>S</code></li>
  3015  </ul>
  3016  
  3017  <p>
  3018  For <code>a</code> of <a href="#String_types">string type</a>:
  3019  </p>
  3020  <ul>
  3021  	<li>a <a href="#Constants">constant</a> index must be in range
  3022  	    if the string <code>a</code> is also constant</li>
  3023  	<li>if <code>x</code> is out of range at run time,
  3024  	    a <a href="#Run_time_panics">run-time panic</a> occurs</li>
  3025  	<li><code>a[x]</code> is the non-constant byte value at index <code>x</code> and the type of
  3026  	    <code>a[x]</code> is <code>byte</code></li>
  3027  	<li><code>a[x]</code> may not be assigned to</li>
  3028  </ul>
  3029  
  3030  <p>
  3031  For <code>a</code> of <a href="#Map_types">map type</a> <code>M</code>:
  3032  </p>
  3033  <ul>
  3034  	<li><code>x</code>'s type must be
  3035  	    <a href="#Assignability">assignable</a>
  3036  	    to the key type of <code>M</code></li>
  3037  	<li>if the map contains an entry with key <code>x</code>,
  3038  	    <code>a[x]</code> is the map value with key <code>x</code>
  3039  	    and the type of <code>a[x]</code> is the value type of <code>M</code></li>
  3040  	<li>if the map is <code>nil</code> or does not contain such an entry,
  3041  	    <code>a[x]</code> is the <a href="#The_zero_value">zero value</a>
  3042  	    for the value type of <code>M</code></li>
  3043  </ul>
  3044  
  3045  <p>
  3046  Otherwise <code>a[x]</code> is illegal.
  3047  </p>
  3048  
  3049  <p>
  3050  An index expression on a map <code>a</code> of type <code>map[K]V</code>
  3051  used in an <a href="#Assignments">assignment</a> or initialization of the special form
  3052  </p>
  3053  
  3054  <pre>
  3055  v, ok = a[x]
  3056  v, ok := a[x]
  3057  var v, ok = a[x]
  3058  var v, ok T = a[x]
  3059  </pre>
  3060  
  3061  <p>
  3062  yields an additional untyped boolean value. The value of <code>ok</code> is
  3063  <code>true</code> if the key <code>x</code> is present in the map, and
  3064  <code>false</code> otherwise.
  3065  </p>
  3066  
  3067  <p>
  3068  Assigning to an element of a <code>nil</code> map causes a
  3069  <a href="#Run_time_panics">run-time panic</a>.
  3070  </p>
  3071  
  3072  
  3073  <h3 id="Slice_expressions">Slice expressions</h3>
  3074  
  3075  <p>
  3076  Slice expressions construct a substring or slice from a string, array, pointer
  3077  to array, or slice. There are two variants: a simple form that specifies a low
  3078  and high bound, and a full form that also specifies a bound on the capacity.
  3079  </p>
  3080  
  3081  <h4>Simple slice expressions</h4>
  3082  
  3083  <p>
  3084  For a string, array, pointer to array, or slice <code>a</code>, the primary expression
  3085  </p>
  3086  
  3087  <pre>
  3088  a[low : high]
  3089  </pre>
  3090  
  3091  <p>
  3092  constructs a substring or slice. The <i>indices</i> <code>low</code> and
  3093  <code>high</code> select which elements of operand <code>a</code> appear
  3094  in the result. The result has indices starting at 0 and length equal to
  3095  <code>high</code>&nbsp;-&nbsp;<code>low</code>.
  3096  After slicing the array <code>a</code>
  3097  </p>
  3098  
  3099  <pre>
  3100  a := [5]int{1, 2, 3, 4, 5}
  3101  s := a[1:4]
  3102  </pre>
  3103  
  3104  <p>
  3105  the slice <code>s</code> has type <code>[]int</code>, length 3, capacity 4, and elements
  3106  </p>
  3107  
  3108  <pre>
  3109  s[0] == 2
  3110  s[1] == 3
  3111  s[2] == 4
  3112  </pre>
  3113  
  3114  <p>
  3115  For convenience, any of the indices may be omitted. A missing <code>low</code>
  3116  index defaults to zero; a missing <code>high</code> index defaults to the length of the
  3117  sliced operand:
  3118  </p>
  3119  
  3120  <pre>
  3121  a[2:]  // same as a[2 : len(a)]
  3122  a[:3]  // same as a[0 : 3]
  3123  a[:]   // same as a[0 : len(a)]
  3124  </pre>
  3125  
  3126  <p>
  3127  If <code>a</code> is a pointer to an array, <code>a[low : high]</code> is shorthand for
  3128  <code>(*a)[low : high]</code>.
  3129  </p>
  3130  
  3131  <p>
  3132  For arrays or strings, the indices are <i>in range</i> if
  3133  <code>0</code> &lt;= <code>low</code> &lt;= <code>high</code> &lt;= <code>len(a)</code>,
  3134  otherwise they are <i>out of range</i>.
  3135  For slices, the upper index bound is the slice capacity <code>cap(a)</code> rather than the length.
  3136  A <a href="#Constants">constant</a> index must be non-negative and
  3137  <a href="#Representability">representable</a> by a value of type
  3138  <code>int</code>; for arrays or constant strings, constant indices must also be in range.
  3139  If both indices are constant, they must satisfy <code>low &lt;= high</code>.
  3140  If the indices are out of range at run time, a <a href="#Run_time_panics">run-time panic</a> occurs.
  3141  </p>
  3142  
  3143  <p>
  3144  Except for <a href="#Constants">untyped strings</a>, if the sliced operand is a string or slice,
  3145  the result of the slice operation is a non-constant value of the same type as the operand.
  3146  For untyped string operands the result is a non-constant value of type <code>string</code>.
  3147  If the sliced operand is an array, it must be <a href="#Address_operators">addressable</a>
  3148  and the result of the slice operation is a slice with the same element type as the array.
  3149  </p>
  3150  
  3151  <p>
  3152  If the sliced operand of a valid slice expression is a <code>nil</code> slice, the result
  3153  is a <code>nil</code> slice. Otherwise, if the result is a slice, it shares its underlying
  3154  array with the operand.
  3155  </p>
  3156  
  3157  <h4>Full slice expressions</h4>
  3158  
  3159  <p>
  3160  For an array, pointer to array, or slice <code>a</code> (but not a string), the primary expression
  3161  </p>
  3162  
  3163  <pre>
  3164  a[low : high : max]
  3165  </pre>
  3166  
  3167  <p>
  3168  constructs a slice of the same type, and with the same length and elements as the simple slice
  3169  expression <code>a[low : high]</code>. Additionally, it controls the resulting slice's capacity
  3170  by setting it to <code>max - low</code>. Only the first index may be omitted; it defaults to 0.
  3171  After slicing the array <code>a</code>
  3172  </p>
  3173  
  3174  <pre>
  3175  a := [5]int{1, 2, 3, 4, 5}
  3176  t := a[1:3:5]
  3177  </pre>
  3178  
  3179  <p>
  3180  the slice <code>t</code> has type <code>[]int</code>, length 2, capacity 4, and elements
  3181  </p>
  3182  
  3183  <pre>
  3184  t[0] == 2
  3185  t[1] == 3
  3186  </pre>
  3187  
  3188  <p>
  3189  As for simple slice expressions, if <code>a</code> is a pointer to an array,
  3190  <code>a[low : high : max]</code> is shorthand for <code>(*a)[low : high : max]</code>.
  3191  If the sliced operand is an array, it must be <a href="#Address_operators">addressable</a>.
  3192  </p>
  3193  
  3194  <p>
  3195  The indices are <i>in range</i> if <code>0 &lt;= low &lt;= high &lt;= max &lt;= cap(a)</code>,
  3196  otherwise they are <i>out of range</i>.
  3197  A <a href="#Constants">constant</a> index must be non-negative and
  3198  <a href="#Representability">representable</a> by a value of type
  3199  <code>int</code>; for arrays, constant indices must also be in range.
  3200  If multiple indices are constant, the constants that are present must be in range relative to each
  3201  other.
  3202  If the indices are out of range at run time, a <a href="#Run_time_panics">run-time panic</a> occurs.
  3203  </p>
  3204  
  3205  <h3 id="Type_assertions">Type assertions</h3>
  3206  
  3207  <p>
  3208  For an expression <code>x</code> of <a href="#Interface_types">interface type</a>
  3209  and a type <code>T</code>, the primary expression
  3210  </p>
  3211  
  3212  <pre>
  3213  x.(T)
  3214  </pre>
  3215  
  3216  <p>
  3217  asserts that <code>x</code> is not <code>nil</code>
  3218  and that the value stored in <code>x</code> is of type <code>T</code>.
  3219  The notation <code>x.(T)</code> is called a <i>type assertion</i>.
  3220  </p>
  3221  <p>
  3222  More precisely, if <code>T</code> is not an interface type, <code>x.(T)</code> asserts
  3223  that the dynamic type of <code>x</code> is <a href="#Type_identity">identical</a>
  3224  to the type <code>T</code>.
  3225  In this case, <code>T</code> must <a href="#Method_sets">implement</a> the (interface) type of <code>x</code>;
  3226  otherwise the type assertion is invalid since it is not possible for <code>x</code>
  3227  to store a value of type <code>T</code>.
  3228  If <code>T</code> is an interface type, <code>x.(T)</code> asserts that the dynamic type
  3229  of <code>x</code> implements the interface <code>T</code>.
  3230  </p>
  3231  <p>
  3232  If the type assertion holds, the value of the expression is the value
  3233  stored in <code>x</code> and its type is <code>T</code>. If the type assertion is false,
  3234  a <a href="#Run_time_panics">run-time panic</a> occurs.
  3235  In other words, even though the dynamic type of <code>x</code>
  3236  is known only at run time, the type of <code>x.(T)</code> is
  3237  known to be <code>T</code> in a correct program.
  3238  </p>
  3239  
  3240  <pre>
  3241  var x interface{} = 7          // x has dynamic type int and value 7
  3242  i := x.(int)                   // i has type int and value 7
  3243  
  3244  type I interface { m() }
  3245  
  3246  func f(y I) {
  3247  	s := y.(string)        // illegal: string does not implement I (missing method m)
  3248  	r := y.(io.Reader)     // r has type io.Reader and the dynamic type of y must implement both I and io.Reader
  3249  	…
  3250  }
  3251  </pre>
  3252  
  3253  <p>
  3254  A type assertion used in an <a href="#Assignments">assignment</a> or initialization of the special form
  3255  </p>
  3256  
  3257  <pre>
  3258  v, ok = x.(T)
  3259  v, ok := x.(T)
  3260  var v, ok = x.(T)
  3261  var v, ok T1 = x.(T)
  3262  </pre>
  3263  
  3264  <p>
  3265  yields an additional untyped boolean value. The value of <code>ok</code> is <code>true</code>
  3266  if the assertion holds. Otherwise it is <code>false</code> and the value of <code>v</code> is
  3267  the <a href="#The_zero_value">zero value</a> for type <code>T</code>.
  3268  No run-time panic occurs in this case.
  3269  </p>
  3270  
  3271  
  3272  <h3 id="Calls">Calls</h3>
  3273  
  3274  <p>
  3275  Given an expression <code>f</code> of function type
  3276  <code>F</code>,
  3277  </p>
  3278  
  3279  <pre>
  3280  f(a1, a2, … an)
  3281  </pre>
  3282  
  3283  <p>
  3284  calls <code>f</code> with arguments <code>a1, a2, … an</code>.
  3285  Except for one special case, arguments must be single-valued expressions
  3286  <a href="#Assignability">assignable</a> to the parameter types of
  3287  <code>F</code> and are evaluated before the function is called.
  3288  The type of the expression is the result type
  3289  of <code>F</code>.
  3290  A method invocation is similar but the method itself
  3291  is specified as a selector upon a value of the receiver type for
  3292  the method.
  3293  </p>
  3294  
  3295  <pre>
  3296  math.Atan2(x, y)  // function call
  3297  var pt *Point
  3298  pt.Scale(3.5)     // method call with receiver pt
  3299  </pre>
  3300  
  3301  <p>
  3302  In a function call, the function value and arguments are evaluated in
  3303  <a href="#Order_of_evaluation">the usual order</a>.
  3304  After they are evaluated, the parameters of the call are passed by value to the function
  3305  and the called function begins execution.
  3306  The return parameters of the function are passed by value
  3307  back to the calling function when the function returns.
  3308  </p>
  3309  
  3310  <p>
  3311  Calling a <code>nil</code> function value
  3312  causes a <a href="#Run_time_panics">run-time panic</a>.
  3313  </p>
  3314  
  3315  <p>
  3316  As a special case, if the return values of a function or method
  3317  <code>g</code> are equal in number and individually
  3318  assignable to the parameters of another function or method
  3319  <code>f</code>, then the call <code>f(g(<i>parameters_of_g</i>))</code>
  3320  will invoke <code>f</code> after binding the return values of
  3321  <code>g</code> to the parameters of <code>f</code> in order.  The call
  3322  of <code>f</code> must contain no parameters other than the call of <code>g</code>,
  3323  and <code>g</code> must have at least one return value.
  3324  If <code>f</code> has a final <code>...</code> parameter, it is
  3325  assigned the return values of <code>g</code> that remain after
  3326  assignment of regular parameters.
  3327  </p>
  3328  
  3329  <pre>
  3330  func Split(s string, pos int) (string, string) {
  3331  	return s[0:pos], s[pos:]
  3332  }
  3333  
  3334  func Join(s, t string) string {
  3335  	return s + t
  3336  }
  3337  
  3338  if Join(Split(value, len(value)/2)) != value {
  3339  	log.Panic("test fails")
  3340  }
  3341  </pre>
  3342  
  3343  <p>
  3344  A method call <code>x.m()</code> is valid if the <a href="#Method_sets">method set</a>
  3345  of (the type of) <code>x</code> contains <code>m</code> and the
  3346  argument list can be assigned to the parameter list of <code>m</code>.
  3347  If <code>x</code> is <a href="#Address_operators">addressable</a> and <code>&amp;x</code>'s method
  3348  set contains <code>m</code>, <code>x.m()</code> is shorthand
  3349  for <code>(&amp;x).m()</code>:
  3350  </p>
  3351  
  3352  <pre>
  3353  var p Point
  3354  p.Scale(3.5)
  3355  </pre>
  3356  
  3357  <p>
  3358  There is no distinct method type and there are no method literals.
  3359  </p>
  3360  
  3361  <h3 id="Passing_arguments_to_..._parameters">Passing arguments to <code>...</code> parameters</h3>
  3362  
  3363  <p>
  3364  If <code>f</code> is <a href="#Function_types">variadic</a> with a final
  3365  parameter <code>p</code> of type <code>...T</code>, then within <code>f</code>
  3366  the type of <code>p</code> is equivalent to type <code>[]T</code>.
  3367  If <code>f</code> is invoked with no actual arguments for <code>p</code>,
  3368  the value passed to <code>p</code> is <code>nil</code>.
  3369  Otherwise, the value passed is a new slice
  3370  of type <code>[]T</code> with a new underlying array whose successive elements
  3371  are the actual arguments, which all must be <a href="#Assignability">assignable</a>
  3372  to <code>T</code>. The length and capacity of the slice is therefore
  3373  the number of arguments bound to <code>p</code> and may differ for each
  3374  call site.
  3375  </p>
  3376  
  3377  <p>
  3378  Given the function and calls
  3379  </p>
  3380  <pre>
  3381  func Greeting(prefix string, who ...string)
  3382  Greeting("nobody")
  3383  Greeting("hello:", "Joe", "Anna", "Eileen")
  3384  </pre>
  3385  
  3386  <p>
  3387  within <code>Greeting</code>, <code>who</code> will have the value
  3388  <code>nil</code> in the first call, and
  3389  <code>[]string{"Joe", "Anna", "Eileen"}</code> in the second.
  3390  </p>
  3391  
  3392  <p>
  3393  If the final argument is assignable to a slice type <code>[]T</code>, it may be
  3394  passed unchanged as the value for a <code>...T</code> parameter if the argument
  3395  is followed by <code>...</code>. In this case no new slice is created.
  3396  </p>
  3397  
  3398  <p>
  3399  Given the slice <code>s</code> and call
  3400  </p>
  3401  
  3402  <pre>
  3403  s := []string{"James", "Jasmine"}
  3404  Greeting("goodbye:", s...)
  3405  </pre>
  3406  
  3407  <p>
  3408  within <code>Greeting</code>, <code>who</code> will have the same value as <code>s</code>
  3409  with the same underlying array.
  3410  </p>
  3411  
  3412  
  3413  <h3 id="Operators">Operators</h3>
  3414  
  3415  <p>
  3416  Operators combine operands into expressions.
  3417  </p>
  3418  
  3419  <pre class="ebnf">
  3420  Expression = UnaryExpr | Expression binary_op Expression .
  3421  UnaryExpr  = PrimaryExpr | unary_op UnaryExpr .
  3422  
  3423  binary_op  = "||" | "&amp;&amp;" | rel_op | add_op | mul_op .
  3424  rel_op     = "==" | "!=" | "&lt;" | "&lt;=" | ">" | ">=" .
  3425  add_op     = "+" | "-" | "|" | "^" .
  3426  mul_op     = "*" | "/" | "%" | "&lt;&lt;" | "&gt;&gt;" | "&amp;" | "&amp;^" .
  3427  
  3428  unary_op   = "+" | "-" | "!" | "^" | "*" | "&amp;" | "&lt;-" .
  3429  </pre>
  3430  
  3431  <p>
  3432  Comparisons are discussed <a href="#Comparison_operators">elsewhere</a>.
  3433  For other binary operators, the operand types must be <a href="#Type_identity">identical</a>
  3434  unless the operation involves shifts or untyped <a href="#Constants">constants</a>.
  3435  For operations involving constants only, see the section on
  3436  <a href="#Constant_expressions">constant expressions</a>.
  3437  </p>
  3438  
  3439  <p>
  3440  Except for shift operations, if one operand is an untyped <a href="#Constants">constant</a>
  3441  and the other operand is not, the constant is <a href="#Conversions">converted</a>
  3442  to the type of the other operand.
  3443  </p>
  3444  
  3445  <p>
  3446  The right operand in a shift expression must have unsigned integer type
  3447  or be an untyped constant <a href="#Representability">representable</a> by a
  3448  value of type <code>uint</code>.
  3449  If the left operand of a non-constant shift expression is an untyped constant,
  3450  it is first converted to the type it would assume if the shift expression were
  3451  replaced by its left operand alone.
  3452  </p>
  3453  
  3454  <pre>
  3455  var s uint = 33
  3456  var i = 1&lt;&lt;s                  // 1 has type int
  3457  var j int32 = 1&lt;&lt;s            // 1 has type int32; j == 0
  3458  var k = uint64(1&lt;&lt;s)          // 1 has type uint64; k == 1&lt;&lt;33
  3459  var m int = 1.0&lt;&lt;s            // 1.0 has type int; m == 0 if ints are 32bits in size
  3460  var n = 1.0&lt;&lt;s == j           // 1.0 has type int32; n == true
  3461  var o = 1&lt;&lt;s == 2&lt;&lt;s          // 1 and 2 have type int; o == true if ints are 32bits in size
  3462  var p = 1&lt;&lt;s == 1&lt;&lt;33         // illegal if ints are 32bits in size: 1 has type int, but 1&lt;&lt;33 overflows int
  3463  var u = 1.0&lt;&lt;s                // illegal: 1.0 has type float64, cannot shift
  3464  var u1 = 1.0&lt;&lt;s != 0          // illegal: 1.0 has type float64, cannot shift
  3465  var u2 = 1&lt;&lt;s != 1.0          // illegal: 1 has type float64, cannot shift
  3466  var v float32 = 1&lt;&lt;s          // illegal: 1 has type float32, cannot shift
  3467  var w int64 = 1.0&lt;&lt;33         // 1.0&lt;&lt;33 is a constant shift expression
  3468  var x = a[1.0&lt;&lt;s]             // 1.0 has type int; x == a[0] if ints are 32bits in size
  3469  var a = make([]byte, 1.0&lt;&lt;s)  // 1.0 has type int; len(a) == 0 if ints are 32bits in size
  3470  </pre>
  3471  
  3472  
  3473  <h4 id="Operator_precedence">Operator precedence</h4>
  3474  <p>
  3475  Unary operators have the highest precedence.
  3476  As the  <code>++</code> and <code>--</code> operators form
  3477  statements, not expressions, they fall
  3478  outside the operator hierarchy.
  3479  As a consequence, statement <code>*p++</code> is the same as <code>(*p)++</code>.
  3480  <p>
  3481  There are five precedence levels for binary operators.
  3482  Multiplication operators bind strongest, followed by addition
  3483  operators, comparison operators, <code>&amp;&amp;</code> (logical AND),
  3484  and finally <code>||</code> (logical OR):
  3485  </p>
  3486  
  3487  <pre class="grammar">
  3488  Precedence    Operator
  3489      5             *  /  %  &lt;&lt;  &gt;&gt;  &amp;  &amp;^
  3490      4             +  -  |  ^
  3491      3             ==  !=  &lt;  &lt;=  &gt;  &gt;=
  3492      2             &amp;&amp;
  3493      1             ||
  3494  </pre>
  3495  
  3496  <p>
  3497  Binary operators of the same precedence associate from left to right.
  3498  For instance, <code>x / y * z</code> is the same as <code>(x / y) * z</code>.
  3499  </p>
  3500  
  3501  <pre>
  3502  +x
  3503  23 + 3*x[i]
  3504  x &lt;= f()
  3505  ^a &gt;&gt; b
  3506  f() || g()
  3507  x == y+1 &amp;&amp; &lt;-chanPtr &gt; 0
  3508  </pre>
  3509  
  3510  
  3511  <h3 id="Arithmetic_operators">Arithmetic operators</h3>
  3512  <p>
  3513  Arithmetic operators apply to numeric values and yield a result of the same
  3514  type as the first operand. The four standard arithmetic operators (<code>+</code>,
  3515  <code>-</code>, <code>*</code>, <code>/</code>) apply to integer,
  3516  floating-point, and complex types; <code>+</code> also applies to strings.
  3517  The bitwise logical and shift operators apply to integers only.
  3518  </p>
  3519  
  3520  <pre class="grammar">
  3521  +    sum                    integers, floats, complex values, strings
  3522  -    difference             integers, floats, complex values
  3523  *    product                integers, floats, complex values
  3524  /    quotient               integers, floats, complex values
  3525  %    remainder              integers
  3526  
  3527  &amp;    bitwise AND            integers
  3528  |    bitwise OR             integers
  3529  ^    bitwise XOR            integers
  3530  &amp;^   bit clear (AND NOT)    integers
  3531  
  3532  &lt;&lt;   left shift             integer &lt;&lt; unsigned integer
  3533  &gt;&gt;   right shift            integer &gt;&gt; unsigned integer
  3534  </pre>
  3535  
  3536  
  3537  <h4 id="Integer_operators">Integer operators</h4>
  3538  
  3539  <p>
  3540  For two integer values <code>x</code> and <code>y</code>, the integer quotient
  3541  <code>q = x / y</code> and remainder <code>r = x % y</code> satisfy the following
  3542  relationships:
  3543  </p>
  3544  
  3545  <pre>
  3546  x = q*y + r  and  |r| &lt; |y|
  3547  </pre>
  3548  
  3549  <p>
  3550  with <code>x / y</code> truncated towards zero
  3551  (<a href="http://en.wikipedia.org/wiki/Modulo_operation">"truncated division"</a>).
  3552  </p>
  3553  
  3554  <pre>
  3555   x     y     x / y     x % y
  3556   5     3       1         2
  3557  -5     3      -1        -2
  3558   5    -3      -1         2
  3559  -5    -3       1        -2
  3560  </pre>
  3561  
  3562  <p>
  3563  As an exception to this rule, if the dividend <code>x</code> is the most
  3564  negative value for the int type of <code>x</code>, the quotient
  3565  <code>q = x / -1</code> is equal to <code>x</code> (and <code>r = 0</code>).
  3566  </p>
  3567  
  3568  <pre>
  3569  			 x, q
  3570  int8                     -128
  3571  int16                  -32768
  3572  int32             -2147483648
  3573  int64    -9223372036854775808
  3574  </pre>
  3575  
  3576  <p>
  3577  If the divisor is a <a href="#Constants">constant</a>, it must not be zero.
  3578  If the divisor is zero at run time, a <a href="#Run_time_panics">run-time panic</a> occurs.
  3579  If the dividend is non-negative and the divisor is a constant power of 2,
  3580  the division may be replaced by a right shift, and computing the remainder may
  3581  be replaced by a bitwise AND operation:
  3582  </p>
  3583  
  3584  <pre>
  3585   x     x / 4     x % 4     x &gt;&gt; 2     x &amp; 3
  3586   11      2         3         2          3
  3587  -11     -2        -3        -3          1
  3588  </pre>
  3589  
  3590  <p>
  3591  The shift operators shift the left operand by the shift count specified by the
  3592  right operand. They implement arithmetic shifts if the left operand is a signed
  3593  integer and logical shifts if it is an unsigned integer.
  3594  There is no upper limit on the shift count. Shifts behave
  3595  as if the left operand is shifted <code>n</code> times by 1 for a shift
  3596  count of <code>n</code>.
  3597  As a result, <code>x &lt;&lt; 1</code> is the same as <code>x*2</code>
  3598  and <code>x &gt;&gt; 1</code> is the same as
  3599  <code>x/2</code> but truncated towards negative infinity.
  3600  </p>
  3601  
  3602  <p>
  3603  For integer operands, the unary operators
  3604  <code>+</code>, <code>-</code>, and <code>^</code> are defined as
  3605  follows:
  3606  </p>
  3607  
  3608  <pre class="grammar">
  3609  +x                          is 0 + x
  3610  -x    negation              is 0 - x
  3611  ^x    bitwise complement    is m ^ x  with m = "all bits set to 1" for unsigned x
  3612                                        and  m = -1 for signed x
  3613  </pre>
  3614  
  3615  
  3616  <h4 id="Integer_overflow">Integer overflow</h4>
  3617  
  3618  <p>
  3619  For unsigned integer values, the operations <code>+</code>,
  3620  <code>-</code>, <code>*</code>, and <code>&lt;&lt;</code> are
  3621  computed modulo 2<sup><i>n</i></sup>, where <i>n</i> is the bit width of
  3622  the <a href="#Numeric_types">unsigned integer</a>'s type.
  3623  Loosely speaking, these unsigned integer operations
  3624  discard high bits upon overflow, and programs may rely on ``wrap around''.
  3625  </p>
  3626  <p>
  3627  For signed integers, the operations <code>+</code>,
  3628  <code>-</code>, <code>*</code>, and <code>&lt;&lt;</code> may legally
  3629  overflow and the resulting value exists and is deterministically defined
  3630  by the signed integer representation, the operation, and its operands.
  3631  No exception is raised as a result of overflow. A
  3632  compiler may not optimize code under the assumption that overflow does
  3633  not occur. For instance, it may not assume that <code>x &lt; x + 1</code> is always true.
  3634  </p>
  3635  
  3636  
  3637  <h4 id="Floating_point_operators">Floating-point operators</h4>
  3638  
  3639  <p>
  3640  For floating-point and complex numbers,
  3641  <code>+x</code> is the same as <code>x</code>,
  3642  while <code>-x</code> is the negation of <code>x</code>.
  3643  The result of a floating-point or complex division by zero is not specified beyond the
  3644  IEEE-754 standard; whether a <a href="#Run_time_panics">run-time panic</a>
  3645  occurs is implementation-specific.
  3646  </p>
  3647  
  3648  <p>
  3649  An implementation may combine multiple floating-point operations into a single
  3650  fused operation, possibly across statements, and produce a result that differs
  3651  from the value obtained by executing and rounding the instructions individually.
  3652  A floating-point type <a href="#Conversions">conversion</a> explicitly rounds to
  3653  the precision of the target type, preventing fusion that would discard that rounding.
  3654  </p>
  3655  
  3656  <p>
  3657  For instance, some architectures provide a "fused multiply and add" (FMA) instruction
  3658  that computes <code>x*y + z</code> without rounding the intermediate result <code>x*y</code>.
  3659  These examples show when a Go implementation can use that instruction:
  3660  </p>
  3661  
  3662  <pre>
  3663  // FMA allowed for computing r, because x*y is not explicitly rounded:
  3664  r  = x*y + z
  3665  r  = z;   r += x*y
  3666  t  = x*y; r = t + z
  3667  *p = x*y; r = *p + z
  3668  r  = x*y + float64(z)
  3669  
  3670  // FMA disallowed for computing r, because it would omit rounding of x*y:
  3671  r  = float64(x*y) + z
  3672  r  = z; r += float64(x*y)
  3673  t  = float64(x*y); r = t + z
  3674  </pre>
  3675  
  3676  <h4 id="String_concatenation">String concatenation</h4>
  3677  
  3678  <p>
  3679  Strings can be concatenated using the <code>+</code> operator
  3680  or the <code>+=</code> assignment operator:
  3681  </p>
  3682  
  3683  <pre>
  3684  s := "hi" + string(c)
  3685  s += " and good bye"
  3686  </pre>
  3687  
  3688  <p>
  3689  String addition creates a new string by concatenating the operands.
  3690  </p>
  3691  
  3692  
  3693  <h3 id="Comparison_operators">Comparison operators</h3>
  3694  
  3695  <p>
  3696  Comparison operators compare two operands and yield an untyped boolean value.
  3697  </p>
  3698  
  3699  <pre class="grammar">
  3700  ==    equal
  3701  !=    not equal
  3702  &lt;     less
  3703  &lt;=    less or equal
  3704  &gt;     greater
  3705  &gt;=    greater or equal
  3706  </pre>
  3707  
  3708  <p>
  3709  In any comparison, the first operand
  3710  must be <a href="#Assignability">assignable</a>
  3711  to the type of the second operand, or vice versa.
  3712  </p>
  3713  <p>
  3714  The equality operators <code>==</code> and <code>!=</code> apply
  3715  to operands that are <i>comparable</i>.
  3716  The ordering operators <code>&lt;</code>, <code>&lt;=</code>, <code>&gt;</code>, and <code>&gt;=</code>
  3717  apply to operands that are <i>ordered</i>.
  3718  These terms and the result of the comparisons are defined as follows:
  3719  </p>
  3720  
  3721  <ul>
  3722  	<li>
  3723  	Boolean values are comparable.
  3724  	Two boolean values are equal if they are either both
  3725  	<code>true</code> or both <code>false</code>.
  3726  	</li>
  3727  
  3728  	<li>
  3729  	Integer values are comparable and ordered, in the usual way.
  3730  	</li>
  3731  
  3732  	<li>
  3733  	Floating-point values are comparable and ordered,
  3734  	as defined by the IEEE-754 standard.
  3735  	</li>
  3736  
  3737  	<li>
  3738  	Complex values are comparable.
  3739  	Two complex values <code>u</code> and <code>v</code> are
  3740  	equal if both <code>real(u) == real(v)</code> and
  3741  	<code>imag(u) == imag(v)</code>.
  3742  	</li>
  3743  
  3744  	<li>
  3745  	String values are comparable and ordered, lexically byte-wise.
  3746  	</li>
  3747  
  3748  	<li>
  3749  	Pointer values are comparable.
  3750  	Two pointer values are equal if they point to the same variable or if both have value <code>nil</code>.
  3751  	Pointers to distinct <a href="#Size_and_alignment_guarantees">zero-size</a> variables may or may not be equal.
  3752  	</li>
  3753  
  3754  	<li>
  3755  	Channel values are comparable.
  3756  	Two channel values are equal if they were created by the same call to
  3757  	<a href="#Making_slices_maps_and_channels"><code>make</code></a>
  3758  	or if both have value <code>nil</code>.
  3759  	</li>
  3760  
  3761  	<li>
  3762  	Interface values are comparable.
  3763  	Two interface values are equal if they have <a href="#Type_identity">identical</a> dynamic types
  3764  	and equal dynamic values or if both have value <code>nil</code>.
  3765  	</li>
  3766  
  3767  	<li>
  3768  	A value <code>x</code> of non-interface type <code>X</code> and
  3769  	a value <code>t</code> of interface type <code>T</code> are comparable when values
  3770  	of type <code>X</code> are comparable and
  3771  	<code>X</code> implements <code>T</code>.
  3772  	They are equal if <code>t</code>'s dynamic type is identical to <code>X</code>
  3773  	and <code>t</code>'s dynamic value is equal to <code>x</code>.
  3774  	</li>
  3775  
  3776  	<li>
  3777  	Struct values are comparable if all their fields are comparable.
  3778  	Two struct values are equal if their corresponding
  3779  	non-<a href="#Blank_identifier">blank</a> fields are equal.
  3780  	</li>
  3781  
  3782  	<li>
  3783  	Array values are comparable if values of the array element type are comparable.
  3784  	Two array values are equal if their corresponding elements are equal.
  3785  	</li>
  3786  </ul>
  3787  
  3788  <p>
  3789  A comparison of two interface values with identical dynamic types
  3790  causes a <a href="#Run_time_panics">run-time panic</a> if values
  3791  of that type are not comparable.  This behavior applies not only to direct interface
  3792  value comparisons but also when comparing arrays of interface values
  3793  or structs with interface-valued fields.
  3794  </p>
  3795  
  3796  <p>
  3797  Slice, map, and function values are not comparable.
  3798  However, as a special case, a slice, map, or function value may
  3799  be compared to the predeclared identifier <code>nil</code>.
  3800  Comparison of pointer, channel, and interface values to <code>nil</code>
  3801  is also allowed and follows from the general rules above.
  3802  </p>
  3803  
  3804  <pre>
  3805  const c = 3 &lt; 4            // c is the untyped boolean constant true
  3806  
  3807  type MyBool bool
  3808  var x, y int
  3809  var (
  3810  	// The result of a comparison is an untyped boolean.
  3811  	// The usual assignment rules apply.
  3812  	b3        = x == y // b3 has type bool
  3813  	b4 bool   = x == y // b4 has type bool
  3814  	b5 MyBool = x == y // b5 has type MyBool
  3815  )
  3816  </pre>
  3817  
  3818  <h3 id="Logical_operators">Logical operators</h3>
  3819  
  3820  <p>
  3821  Logical operators apply to <a href="#Boolean_types">boolean</a> values
  3822  and yield a result of the same type as the operands.
  3823  The right operand is evaluated conditionally.
  3824  </p>
  3825  
  3826  <pre class="grammar">
  3827  &amp;&amp;    conditional AND    p &amp;&amp; q  is  "if p then q else false"
  3828  ||    conditional OR     p || q  is  "if p then true else q"
  3829  !     NOT                !p      is  "not p"
  3830  </pre>
  3831  
  3832  
  3833  <h3 id="Address_operators">Address operators</h3>
  3834  
  3835  <p>
  3836  For an operand <code>x</code> of type <code>T</code>, the address operation
  3837  <code>&amp;x</code> generates a pointer of type <code>*T</code> to <code>x</code>.
  3838  The operand must be <i>addressable</i>,
  3839  that is, either a variable, pointer indirection, or slice indexing
  3840  operation; or a field selector of an addressable struct operand;
  3841  or an array indexing operation of an addressable array.
  3842  As an exception to the addressability requirement, <code>x</code> may also be a
  3843  (possibly parenthesized)
  3844  <a href="#Composite_literals">composite literal</a>.
  3845  If the evaluation of <code>x</code> would cause a <a href="#Run_time_panics">run-time panic</a>,
  3846  then the evaluation of <code>&amp;x</code> does too.
  3847  </p>
  3848  
  3849  <p>
  3850  For an operand <code>x</code> of pointer type <code>*T</code>, the pointer
  3851  indirection <code>*x</code> denotes the <a href="#Variables">variable</a> of type <code>T</code> pointed
  3852  to by <code>x</code>.
  3853  If <code>x</code> is <code>nil</code>, an attempt to evaluate <code>*x</code>
  3854  will cause a <a href="#Run_time_panics">run-time panic</a>.
  3855  </p>
  3856  
  3857  <pre>
  3858  &amp;x
  3859  &amp;a[f(2)]
  3860  &amp;Point{2, 3}
  3861  *p
  3862  *pf(x)
  3863  
  3864  var x *int = nil
  3865  *x   // causes a run-time panic
  3866  &amp;*x  // causes a run-time panic
  3867  </pre>
  3868  
  3869  
  3870  <h3 id="Receive_operator">Receive operator</h3>
  3871  
  3872  <p>
  3873  For an operand <code>ch</code> of <a href="#Channel_types">channel type</a>,
  3874  the value of the receive operation <code>&lt;-ch</code> is the value received
  3875  from the channel <code>ch</code>. The channel direction must permit receive operations,
  3876  and the type of the receive operation is the element type of the channel.
  3877  The expression blocks until a value is available.
  3878  Receiving from a <code>nil</code> channel blocks forever.
  3879  A receive operation on a <a href="#Close">closed</a> channel can always proceed
  3880  immediately, yielding the element type's <a href="#The_zero_value">zero value</a>
  3881  after any previously sent values have been received.
  3882  </p>
  3883  
  3884  <pre>
  3885  v1 := &lt;-ch
  3886  v2 = &lt;-ch
  3887  f(&lt;-ch)
  3888  &lt;-strobe  // wait until clock pulse and discard received value
  3889  </pre>
  3890  
  3891  <p>
  3892  A receive expression used in an <a href="#Assignments">assignment</a> or initialization of the special form
  3893  </p>
  3894  
  3895  <pre>
  3896  x, ok = &lt;-ch
  3897  x, ok := &lt;-ch
  3898  var x, ok = &lt;-ch
  3899  var x, ok T = &lt;-ch
  3900  </pre>
  3901  
  3902  <p>
  3903  yields an additional untyped boolean result reporting whether the
  3904  communication succeeded. The value of <code>ok</code> is <code>true</code>
  3905  if the value received was delivered by a successful send operation to the
  3906  channel, or <code>false</code> if it is a zero value generated because the
  3907  channel is closed and empty.
  3908  </p>
  3909  
  3910  
  3911  <h3 id="Conversions">Conversions</h3>
  3912  
  3913  <p>
  3914  Conversions are expressions of the form <code>T(x)</code>
  3915  where <code>T</code> is a type and <code>x</code> is an expression
  3916  that can be converted to type <code>T</code>.
  3917  </p>
  3918  
  3919  <pre class="ebnf">
  3920  Conversion = Type "(" Expression [ "," ] ")" .
  3921  </pre>
  3922  
  3923  <p>
  3924  If the type starts with the operator <code>*</code> or <code>&lt;-</code>,
  3925  or if the type starts with the keyword <code>func</code>
  3926  and has no result list, it must be parenthesized when
  3927  necessary to avoid ambiguity:
  3928  </p>
  3929  
  3930  <pre>
  3931  *Point(p)        // same as *(Point(p))
  3932  (*Point)(p)      // p is converted to *Point
  3933  &lt;-chan int(c)    // same as &lt;-(chan int(c))
  3934  (&lt;-chan int)(c)  // c is converted to &lt;-chan int
  3935  func()(x)        // function signature func() x
  3936  (func())(x)      // x is converted to func()
  3937  (func() int)(x)  // x is converted to func() int
  3938  func() int(x)    // x is converted to func() int (unambiguous)
  3939  </pre>
  3940  
  3941  <p>
  3942  A <a href="#Constants">constant</a> value <code>x</code> can be converted to
  3943  type <code>T</code> if <code>x</code> is <a href="#Representability">representable</a>
  3944  by a value of <code>T</code>.
  3945  As a special case, an integer constant <code>x</code> can be converted to a
  3946  <a href="#String_types">string type</a> using the
  3947  <a href="#Conversions_to_and_from_a_string_type">same rule</a>
  3948  as for non-constant <code>x</code>.
  3949  </p>
  3950  
  3951  <p>
  3952  Converting a constant yields a typed constant as result.
  3953  </p>
  3954  
  3955  <pre>
  3956  uint(iota)               // iota value of type uint
  3957  float32(2.718281828)     // 2.718281828 of type float32
  3958  complex128(1)            // 1.0 + 0.0i of type complex128
  3959  float32(0.49999999)      // 0.5 of type float32
  3960  float64(-1e-1000)        // 0.0 of type float64
  3961  string('x')              // "x" of type string
  3962  string(0x266c)           // "♬" of type string
  3963  MyString("foo" + "bar")  // "foobar" of type MyString
  3964  string([]byte{'a'})      // not a constant: []byte{'a'} is not a constant
  3965  (*int)(nil)              // not a constant: nil is not a constant, *int is not a boolean, numeric, or string type
  3966  int(1.2)                 // illegal: 1.2 cannot be represented as an int
  3967  string(65.0)             // illegal: 65.0 is not an integer constant
  3968  </pre>
  3969  
  3970  <p>
  3971  A non-constant value <code>x</code> can be converted to type <code>T</code>
  3972  in any of these cases:
  3973  </p>
  3974  
  3975  <ul>
  3976  	<li>
  3977  	<code>x</code> is <a href="#Assignability">assignable</a>
  3978  	to <code>T</code>.
  3979  	</li>
  3980  	<li>
  3981  	ignoring struct tags (see below),
  3982  	<code>x</code>'s type and <code>T</code> have <a href="#Type_identity">identical</a>
  3983  	<a href="#Types">underlying types</a>.
  3984  	</li>
  3985  	<li>
  3986  	ignoring struct tags (see below),
  3987  	<code>x</code>'s type and <code>T</code> are pointer types
  3988  	that are not <a href="#Type_definitions">defined types</a>,
  3989  	and their pointer base types have identical underlying types.
  3990  	</li>
  3991  	<li>
  3992  	<code>x</code>'s type and <code>T</code> are both integer or floating
  3993  	point types.
  3994  	</li>
  3995  	<li>
  3996  	<code>x</code>'s type and <code>T</code> are both complex types.
  3997  	</li>
  3998  	<li>
  3999  	<code>x</code> is an integer or a slice of bytes or runes
  4000  	and <code>T</code> is a string type.
  4001  	</li>
  4002  	<li>
  4003  	<code>x</code> is a string and <code>T</code> is a slice of bytes or runes.
  4004  	</li>
  4005  </ul>
  4006  
  4007  <p>
  4008  <a href="#Struct_types">Struct tags</a> are ignored when comparing struct types
  4009  for identity for the purpose of conversion:
  4010  </p>
  4011  
  4012  <pre>
  4013  type Person struct {
  4014  	Name    string
  4015  	Address *struct {
  4016  		Street string
  4017  		City   string
  4018  	}
  4019  }
  4020  
  4021  var data *struct {
  4022  	Name    string `json:"name"`
  4023  	Address *struct {
  4024  		Street string `json:"street"`
  4025  		City   string `json:"city"`
  4026  	} `json:"address"`
  4027  }
  4028  
  4029  var person = (*Person)(data)  // ignoring tags, the underlying types are identical
  4030  </pre>
  4031  
  4032  <p>
  4033  Specific rules apply to (non-constant) conversions between numeric types or
  4034  to and from a string type.
  4035  These conversions may change the representation of <code>x</code>
  4036  and incur a run-time cost.
  4037  All other conversions only change the type but not the representation
  4038  of <code>x</code>.
  4039  </p>
  4040  
  4041  <p>
  4042  There is no linguistic mechanism to convert between pointers and integers.
  4043  The package <a href="#Package_unsafe"><code>unsafe</code></a>
  4044  implements this functionality under
  4045  restricted circumstances.
  4046  </p>
  4047  
  4048  <h4>Conversions between numeric types</h4>
  4049  
  4050  <p>
  4051  For the conversion of non-constant numeric values, the following rules apply:
  4052  </p>
  4053  
  4054  <ol>
  4055  <li>
  4056  When converting between integer types, if the value is a signed integer, it is
  4057  sign extended to implicit infinite precision; otherwise it is zero extended.
  4058  It is then truncated to fit in the result type's size.
  4059  For example, if <code>v := uint16(0x10F0)</code>, then <code>uint32(int8(v)) == 0xFFFFFFF0</code>.
  4060  The conversion always yields a valid value; there is no indication of overflow.
  4061  </li>
  4062  <li>
  4063  When converting a floating-point number to an integer, the fraction is discarded
  4064  (truncation towards zero).
  4065  </li>
  4066  <li>
  4067  When converting an integer or floating-point number to a floating-point type,
  4068  or a complex number to another complex type, the result value is rounded
  4069  to the precision specified by the destination type.
  4070  For instance, the value of a variable <code>x</code> of type <code>float32</code>
  4071  may be stored using additional precision beyond that of an IEEE-754 32-bit number,
  4072  but float32(x) represents the result of rounding <code>x</code>'s value to
  4073  32-bit precision. Similarly, <code>x + 0.1</code> may use more than 32 bits
  4074  of precision, but <code>float32(x + 0.1)</code> does not.
  4075  </li>
  4076  </ol>
  4077  
  4078  <p>
  4079  In all non-constant conversions involving floating-point or complex values,
  4080  if the result type cannot represent the value the conversion
  4081  succeeds but the result value is implementation-dependent.
  4082  </p>
  4083  
  4084  <h4 id="Conversions_to_and_from_a_string_type">Conversions to and from a string type</h4>
  4085  
  4086  <ol>
  4087  <li>
  4088  Converting a signed or unsigned integer value to a string type yields a
  4089  string containing the UTF-8 representation of the integer. Values outside
  4090  the range of valid Unicode code points are converted to <code>"\uFFFD"</code>.
  4091  
  4092  <pre>
  4093  string('a')       // "a"
  4094  string(-1)        // "\ufffd" == "\xef\xbf\xbd"
  4095  string(0xf8)      // "\u00f8" == "ø" == "\xc3\xb8"
  4096  type MyString string
  4097  MyString(0x65e5)  // "\u65e5" == "日" == "\xe6\x97\xa5"
  4098  </pre>
  4099  </li>
  4100  
  4101  <li>
  4102  Converting a slice of bytes to a string type yields
  4103  a string whose successive bytes are the elements of the slice.
  4104  
  4105  <pre>
  4106  string([]byte{'h', 'e', 'l', 'l', '\xc3', '\xb8'})   // "hellø"
  4107  string([]byte{})                                     // ""
  4108  string([]byte(nil))                                  // ""
  4109  
  4110  type MyBytes []byte
  4111  string(MyBytes{'h', 'e', 'l', 'l', '\xc3', '\xb8'})  // "hellø"
  4112  </pre>
  4113  </li>
  4114  
  4115  <li>
  4116  Converting a slice of runes to a string type yields
  4117  a string that is the concatenation of the individual rune values
  4118  converted to strings.
  4119  
  4120  <pre>
  4121  string([]rune{0x767d, 0x9d6c, 0x7fd4})   // "\u767d\u9d6c\u7fd4" == "白鵬翔"
  4122  string([]rune{})                         // ""
  4123  string([]rune(nil))                      // ""
  4124  
  4125  type MyRunes []rune
  4126  string(MyRunes{0x767d, 0x9d6c, 0x7fd4})  // "\u767d\u9d6c\u7fd4" == "白鵬翔"
  4127  </pre>
  4128  </li>
  4129  
  4130  <li>
  4131  Converting a value of a string type to a slice of bytes type
  4132  yields a slice whose successive elements are the bytes of the string.
  4133  
  4134  <pre>
  4135  []byte("hellø")   // []byte{'h', 'e', 'l', 'l', '\xc3', '\xb8'}
  4136  []byte("")        // []byte{}
  4137  
  4138  MyBytes("hellø")  // []byte{'h', 'e', 'l', 'l', '\xc3', '\xb8'}
  4139  </pre>
  4140  </li>
  4141  
  4142  <li>
  4143  Converting a value of a string type to a slice of runes type
  4144  yields a slice containing the individual Unicode code points of the string.
  4145  
  4146  <pre>
  4147  []rune(MyString("白鵬翔"))  // []rune{0x767d, 0x9d6c, 0x7fd4}
  4148  []rune("")                 // []rune{}
  4149  
  4150  MyRunes("白鵬翔")           // []rune{0x767d, 0x9d6c, 0x7fd4}
  4151  </pre>
  4152  </li>
  4153  </ol>
  4154  
  4155  
  4156  <h3 id="Constant_expressions">Constant expressions</h3>
  4157  
  4158  <p>
  4159  Constant expressions may contain only <a href="#Constants">constant</a>
  4160  operands and are evaluated at compile time.
  4161  </p>
  4162  
  4163  <p>
  4164  Untyped boolean, numeric, and string constants may be used as operands
  4165  wherever it is legal to use an operand of boolean, numeric, or string type,
  4166  respectively.
  4167  Except for shift operations, if the operands of a binary operation are
  4168  different kinds of untyped constants, the operation and, for non-boolean operations, the result use
  4169  the kind that appears later in this list: integer, rune, floating-point, complex.
  4170  For example, an untyped integer constant divided by an
  4171  untyped complex constant yields an untyped complex constant.
  4172  </p>
  4173  
  4174  <p>
  4175  A constant <a href="#Comparison_operators">comparison</a> always yields
  4176  an untyped boolean constant.  If the left operand of a constant
  4177  <a href="#Operators">shift expression</a> is an untyped constant, the
  4178  result is an integer constant; otherwise it is a constant of the same
  4179  type as the left operand, which must be of
  4180  <a href="#Numeric_types">integer type</a>.
  4181  Applying all other operators to untyped constants results in an untyped
  4182  constant of the same kind (that is, a boolean, integer, floating-point,
  4183  complex, or string constant).
  4184  </p>
  4185  
  4186  <pre>
  4187  const a = 2 + 3.0          // a == 5.0   (untyped floating-point constant)
  4188  const b = 15 / 4           // b == 3     (untyped integer constant)
  4189  const c = 15 / 4.0         // c == 3.75  (untyped floating-point constant)
  4190  const Θ float64 = 3/2      // Θ == 1.0   (type float64, 3/2 is integer division)
  4191  const Π float64 = 3/2.     // Π == 1.5   (type float64, 3/2. is float division)
  4192  const d = 1 &lt;&lt; 3.0         // d == 8     (untyped integer constant)
  4193  const e = 1.0 &lt;&lt; 3         // e == 8     (untyped integer constant)
  4194  const f = int32(1) &lt;&lt; 33   // illegal    (constant 8589934592 overflows int32)
  4195  const g = float64(2) &gt;&gt; 1  // illegal    (float64(2) is a typed floating-point constant)
  4196  const h = "foo" &gt; "bar"    // h == true  (untyped boolean constant)
  4197  const j = true             // j == true  (untyped boolean constant)
  4198  const k = 'w' + 1          // k == 'x'   (untyped rune constant)
  4199  const l = "hi"             // l == "hi"  (untyped string constant)
  4200  const m = string(k)        // m == "x"   (type string)
  4201  const Σ = 1 - 0.707i       //            (untyped complex constant)
  4202  const Δ = Σ + 2.0e-4       //            (untyped complex constant)
  4203  const Φ = iota*1i - 1/1i   //            (untyped complex constant)
  4204  </pre>
  4205  
  4206  <p>
  4207  Applying the built-in function <code>complex</code> to untyped
  4208  integer, rune, or floating-point constants yields
  4209  an untyped complex constant.
  4210  </p>
  4211  
  4212  <pre>
  4213  const ic = complex(0, c)   // ic == 3.75i  (untyped complex constant)
  4214  const iΘ = complex(0, Θ)   // iΘ == 1i     (type complex128)
  4215  </pre>
  4216  
  4217  <p>
  4218  Constant expressions are always evaluated exactly; intermediate values and the
  4219  constants themselves may require precision significantly larger than supported
  4220  by any predeclared type in the language. The following are legal declarations:
  4221  </p>
  4222  
  4223  <pre>
  4224  const Huge = 1 &lt;&lt; 100         // Huge == 1267650600228229401496703205376  (untyped integer constant)
  4225  const Four int8 = Huge &gt;&gt; 98  // Four == 4                                (type int8)
  4226  </pre>
  4227  
  4228  <p>
  4229  The divisor of a constant division or remainder operation must not be zero:
  4230  </p>
  4231  
  4232  <pre>
  4233  3.14 / 0.0   // illegal: division by zero
  4234  </pre>
  4235  
  4236  <p>
  4237  The values of <i>typed</i> constants must always be accurately
  4238  <a href="#Representability">representable</a> by values
  4239  of the constant type. The following constant expressions are illegal:
  4240  </p>
  4241  
  4242  <pre>
  4243  uint(-1)     // -1 cannot be represented as a uint
  4244  int(3.14)    // 3.14 cannot be represented as an int
  4245  int64(Huge)  // 1267650600228229401496703205376 cannot be represented as an int64
  4246  Four * 300   // operand 300 cannot be represented as an int8 (type of Four)
  4247  Four * 100   // product 400 cannot be represented as an int8 (type of Four)
  4248  </pre>
  4249  
  4250  <p>
  4251  The mask used by the unary bitwise complement operator <code>^</code> matches
  4252  the rule for non-constants: the mask is all 1s for unsigned constants
  4253  and -1 for signed and untyped constants.
  4254  </p>
  4255  
  4256  <pre>
  4257  ^1         // untyped integer constant, equal to -2
  4258  uint8(^1)  // illegal: same as uint8(-2), -2 cannot be represented as a uint8
  4259  ^uint8(1)  // typed uint8 constant, same as 0xFF ^ uint8(1) = uint8(0xFE)
  4260  int8(^1)   // same as int8(-2)
  4261  ^int8(1)   // same as -1 ^ int8(1) = -2
  4262  </pre>
  4263  
  4264  <p>
  4265  Implementation restriction: A compiler may use rounding while
  4266  computing untyped floating-point or complex constant expressions; see
  4267  the implementation restriction in the section
  4268  on <a href="#Constants">constants</a>.  This rounding may cause a
  4269  floating-point constant expression to be invalid in an integer
  4270  context, even if it would be integral when calculated using infinite
  4271  precision, and vice versa.
  4272  </p>
  4273  
  4274  
  4275  <h3 id="Order_of_evaluation">Order of evaluation</h3>
  4276  
  4277  <p>
  4278  At package level, <a href="#Package_initialization">initialization dependencies</a>
  4279  determine the evaluation order of individual initialization expressions in
  4280  <a href="#Variable_declarations">variable declarations</a>.
  4281  Otherwise, when evaluating the <a href="#Operands">operands</a> of an
  4282  expression, assignment, or
  4283  <a href="#Return_statements">return statement</a>,
  4284  all function calls, method calls, and
  4285  communication operations are evaluated in lexical left-to-right
  4286  order.
  4287  </p>
  4288  
  4289  <p>
  4290  For example, in the (function-local) assignment
  4291  </p>
  4292  <pre>
  4293  y[f()], ok = g(h(), i()+x[j()], &lt;-c), k()
  4294  </pre>
  4295  <p>
  4296  the function calls and communication happen in the order
  4297  <code>f()</code>, <code>h()</code>, <code>i()</code>, <code>j()</code>,
  4298  <code>&lt;-c</code>, <code>g()</code>, and <code>k()</code>.
  4299  However, the order of those events compared to the evaluation
  4300  and indexing of <code>x</code> and the evaluation
  4301  of <code>y</code> is not specified.
  4302  </p>
  4303  
  4304  <pre>
  4305  a := 1
  4306  f := func() int { a++; return a }
  4307  x := []int{a, f()}            // x may be [1, 2] or [2, 2]: evaluation order between a and f() is not specified
  4308  m := map[int]int{a: 1, a: 2}  // m may be {2: 1} or {2: 2}: evaluation order between the two map assignments is not specified
  4309  n := map[int]int{a: f()}      // n may be {2: 3} or {3: 3}: evaluation order between the key and the value is not specified
  4310  </pre>
  4311  
  4312  <p>
  4313  At package level, initialization dependencies override the left-to-right rule
  4314  for individual initialization expressions, but not for operands within each
  4315  expression:
  4316  </p>
  4317  
  4318  <pre>
  4319  var a, b, c = f() + v(), g(), sqr(u()) + v()
  4320  
  4321  func f() int        { return c }
  4322  func g() int        { return a }
  4323  func sqr(x int) int { return x*x }
  4324  
  4325  // functions u and v are independent of all other variables and functions
  4326  </pre>
  4327  
  4328  <p>
  4329  The function calls happen in the order
  4330  <code>u()</code>, <code>sqr()</code>, <code>v()</code>,
  4331  <code>f()</code>, <code>v()</code>, and <code>g()</code>.
  4332  </p>
  4333  
  4334  <p>
  4335  Floating-point operations within a single expression are evaluated according to
  4336  the associativity of the operators.  Explicit parentheses affect the evaluation
  4337  by overriding the default associativity.
  4338  In the expression <code>x + (y + z)</code> the addition <code>y + z</code>
  4339  is performed before adding <code>x</code>.
  4340  </p>
  4341  
  4342  <h2 id="Statements">Statements</h2>
  4343  
  4344  <p>
  4345  Statements control execution.
  4346  </p>
  4347  
  4348  <pre class="ebnf">
  4349  Statement =
  4350  	Declaration | LabeledStmt | SimpleStmt |
  4351  	GoStmt | ReturnStmt | BreakStmt | ContinueStmt | GotoStmt |
  4352  	FallthroughStmt | Block | IfStmt | SwitchStmt | SelectStmt | ForStmt |
  4353  	DeferStmt .
  4354  
  4355  SimpleStmt = EmptyStmt | ExpressionStmt | SendStmt | IncDecStmt | Assignment | ShortVarDecl .
  4356  </pre>
  4357  
  4358  <h3 id="Terminating_statements">Terminating statements</h3>
  4359  
  4360  <p>
  4361  A terminating statement is one of the following:
  4362  </p>
  4363  
  4364  <ol>
  4365  <li>
  4366  	A <a href="#Return_statements">"return"</a> or
  4367      	<a href="#Goto_statements">"goto"</a> statement.
  4368  	<!-- ul below only for regular layout -->
  4369  	<ul> </ul>
  4370  </li>
  4371  
  4372  <li>
  4373  	A call to the built-in function
  4374  	<a href="#Handling_panics"><code>panic</code></a>.
  4375  	<!-- ul below only for regular layout -->
  4376  	<ul> </ul>
  4377  </li>
  4378  
  4379  <li>
  4380  	A <a href="#Blocks">block</a> in which the statement list ends in a terminating statement.
  4381  	<!-- ul below only for regular layout -->
  4382  	<ul> </ul>
  4383  </li>
  4384  
  4385  <li>
  4386  	An <a href="#If_statements">"if" statement</a> in which:
  4387  	<ul>
  4388  	<li>the "else" branch is present, and</li>
  4389  	<li>both branches are terminating statements.</li>
  4390  	</ul>
  4391  </li>
  4392  
  4393  <li>
  4394  	A <a href="#For_statements">"for" statement</a> in which:
  4395  	<ul>
  4396  	<li>there are no "break" statements referring to the "for" statement, and</li>
  4397  	<li>the loop condition is absent.</li>
  4398  	</ul>
  4399  </li>
  4400  
  4401  <li>
  4402  	A <a href="#Switch_statements">"switch" statement</a> in which:
  4403  	<ul>
  4404  	<li>there are no "break" statements referring to the "switch" statement,</li>
  4405  	<li>there is a default case, and</li>
  4406  	<li>the statement lists in each case, including the default, end in a terminating
  4407  	    statement, or a possibly labeled <a href="#Fallthrough_statements">"fallthrough"
  4408  	    statement</a>.</li>
  4409  	</ul>
  4410  </li>
  4411  
  4412  <li>
  4413  	A <a href="#Select_statements">"select" statement</a> in which:
  4414  	<ul>
  4415  	<li>there are no "break" statements referring to the "select" statement, and</li>
  4416  	<li>the statement lists in each case, including the default if present,
  4417  	    end in a terminating statement.</li>
  4418  	</ul>
  4419  </li>
  4420  
  4421  <li>
  4422  	A <a href="#Labeled_statements">labeled statement</a> labeling
  4423  	a terminating statement.
  4424  </li>
  4425  </ol>
  4426  
  4427  <p>
  4428  All other statements are not terminating.
  4429  </p>
  4430  
  4431  <p>
  4432  A <a href="#Blocks">statement list</a> ends in a terminating statement if the list
  4433  is not empty and its final non-empty statement is terminating.
  4434  </p>
  4435  
  4436  
  4437  <h3 id="Empty_statements">Empty statements</h3>
  4438  
  4439  <p>
  4440  The empty statement does nothing.
  4441  </p>
  4442  
  4443  <pre class="ebnf">
  4444  EmptyStmt = .
  4445  </pre>
  4446  
  4447  
  4448  <h3 id="Labeled_statements">Labeled statements</h3>
  4449  
  4450  <p>
  4451  A labeled statement may be the target of a <code>goto</code>,
  4452  <code>break</code> or <code>continue</code> statement.
  4453  </p>
  4454  
  4455  <pre class="ebnf">
  4456  LabeledStmt = Label ":" Statement .
  4457  Label       = identifier .
  4458  </pre>
  4459  
  4460  <pre>
  4461  Error: log.Panic("error encountered")
  4462  </pre>
  4463  
  4464  
  4465  <h3 id="Expression_statements">Expression statements</h3>
  4466  
  4467  <p>
  4468  With the exception of specific built-in functions,
  4469  function and method <a href="#Calls">calls</a> and
  4470  <a href="#Receive_operator">receive operations</a>
  4471  can appear in statement context. Such statements may be parenthesized.
  4472  </p>
  4473  
  4474  <pre class="ebnf">
  4475  ExpressionStmt = Expression .
  4476  </pre>
  4477  
  4478  <p>
  4479  The following built-in functions are not permitted in statement context:
  4480  </p>
  4481  
  4482  <pre>
  4483  append cap complex imag len make new real
  4484  unsafe.Alignof unsafe.Offsetof unsafe.Sizeof
  4485  </pre>
  4486  
  4487  <pre>
  4488  h(x+y)
  4489  f.Close()
  4490  &lt;-ch
  4491  (&lt;-ch)
  4492  len("foo")  // illegal if len is the built-in function
  4493  </pre>
  4494  
  4495  
  4496  <h3 id="Send_statements">Send statements</h3>
  4497  
  4498  <p>
  4499  A send statement sends a value on a channel.
  4500  The channel expression must be of <a href="#Channel_types">channel type</a>,
  4501  the channel direction must permit send operations,
  4502  and the type of the value to be sent must be <a href="#Assignability">assignable</a>
  4503  to the channel's element type.
  4504  </p>
  4505  
  4506  <pre class="ebnf">
  4507  SendStmt = Channel "&lt;-" Expression .
  4508  Channel  = Expression .
  4509  </pre>
  4510  
  4511  <p>
  4512  Both the channel and the value expression are evaluated before communication
  4513  begins. Communication blocks until the send can proceed.
  4514  A send on an unbuffered channel can proceed if a receiver is ready.
  4515  A send on a buffered channel can proceed if there is room in the buffer.
  4516  A send on a closed channel proceeds by causing a <a href="#Run_time_panics">run-time panic</a>.
  4517  A send on a <code>nil</code> channel blocks forever.
  4518  </p>
  4519  
  4520  <pre>
  4521  ch &lt;- 3  // send value 3 to channel ch
  4522  </pre>
  4523  
  4524  
  4525  <h3 id="IncDec_statements">IncDec statements</h3>
  4526  
  4527  <p>
  4528  The "++" and "--" statements increment or decrement their operands
  4529  by the untyped <a href="#Constants">constant</a> <code>1</code>.
  4530  As with an assignment, the operand must be <a href="#Address_operators">addressable</a>
  4531  or a map index expression.
  4532  </p>
  4533  
  4534  <pre class="ebnf">
  4535  IncDecStmt = Expression ( "++" | "--" ) .
  4536  </pre>
  4537  
  4538  <p>
  4539  The following <a href="#Assignments">assignment statements</a> are semantically
  4540  equivalent:
  4541  </p>
  4542  
  4543  <pre class="grammar">
  4544  IncDec statement    Assignment
  4545  x++                 x += 1
  4546  x--                 x -= 1
  4547  </pre>
  4548  
  4549  
  4550  <h3 id="Assignments">Assignments</h3>
  4551  
  4552  <pre class="ebnf">
  4553  Assignment = ExpressionList assign_op ExpressionList .
  4554  
  4555  assign_op = [ add_op | mul_op ] "=" .
  4556  </pre>
  4557  
  4558  <p>
  4559  Each left-hand side operand must be <a href="#Address_operators">addressable</a>,
  4560  a map index expression, or (for <code>=</code> assignments only) the
  4561  <a href="#Blank_identifier">blank identifier</a>.
  4562  Operands may be parenthesized.
  4563  </p>
  4564  
  4565  <pre>
  4566  x = 1
  4567  *p = f()
  4568  a[i] = 23
  4569  (k) = &lt;-ch  // same as: k = &lt;-ch
  4570  </pre>
  4571  
  4572  <p>
  4573  An <i>assignment operation</i> <code>x</code> <i>op</i><code>=</code>
  4574  <code>y</code> where <i>op</i> is a binary <a href="#Arithmetic_operators">arithmetic operator</a>
  4575  is equivalent to <code>x</code> <code>=</code> <code>x</code> <i>op</i>
  4576  <code>(y)</code> but evaluates <code>x</code>
  4577  only once.  The <i>op</i><code>=</code> construct is a single token.
  4578  In assignment operations, both the left- and right-hand expression lists
  4579  must contain exactly one single-valued expression, and the left-hand
  4580  expression must not be the blank identifier.
  4581  </p>
  4582  
  4583  <pre>
  4584  a[i] &lt;&lt;= 2
  4585  i &amp;^= 1&lt;&lt;n
  4586  </pre>
  4587  
  4588  <p>
  4589  A tuple assignment assigns the individual elements of a multi-valued
  4590  operation to a list of variables.  There are two forms.  In the
  4591  first, the right hand operand is a single multi-valued expression
  4592  such as a function call, a <a href="#Channel_types">channel</a> or
  4593  <a href="#Map_types">map</a> operation, or a <a href="#Type_assertions">type assertion</a>.
  4594  The number of operands on the left
  4595  hand side must match the number of values.  For instance, if
  4596  <code>f</code> is a function returning two values,
  4597  </p>
  4598  
  4599  <pre>
  4600  x, y = f()
  4601  </pre>
  4602  
  4603  <p>
  4604  assigns the first value to <code>x</code> and the second to <code>y</code>.
  4605  In the second form, the number of operands on the left must equal the number
  4606  of expressions on the right, each of which must be single-valued, and the
  4607  <i>n</i>th expression on the right is assigned to the <i>n</i>th
  4608  operand on the left:
  4609  </p>
  4610  
  4611  <pre>
  4612  one, two, three = '一', '二', '三'
  4613  </pre>
  4614  
  4615  <p>
  4616  The <a href="#Blank_identifier">blank identifier</a> provides a way to
  4617  ignore right-hand side values in an assignment:
  4618  </p>
  4619  
  4620  <pre>
  4621  _ = x       // evaluate x but ignore it
  4622  x, _ = f()  // evaluate f() but ignore second result value
  4623  </pre>
  4624  
  4625  <p>
  4626  The assignment proceeds in two phases.
  4627  First, the operands of <a href="#Index_expressions">index expressions</a>
  4628  and <a href="#Address_operators">pointer indirections</a>
  4629  (including implicit pointer indirections in <a href="#Selectors">selectors</a>)
  4630  on the left and the expressions on the right are all
  4631  <a href="#Order_of_evaluation">evaluated in the usual order</a>.
  4632  Second, the assignments are carried out in left-to-right order.
  4633  </p>
  4634  
  4635  <pre>
  4636  a, b = b, a  // exchange a and b
  4637  
  4638  x := []int{1, 2, 3}
  4639  i := 0
  4640  i, x[i] = 1, 2  // set i = 1, x[0] = 2
  4641  
  4642  i = 0
  4643  x[i], i = 2, 1  // set x[0] = 2, i = 1
  4644  
  4645  x[0], x[0] = 1, 2  // set x[0] = 1, then x[0] = 2 (so x[0] == 2 at end)
  4646  
  4647  x[1], x[3] = 4, 5  // set x[1] = 4, then panic setting x[3] = 5.
  4648  
  4649  type Point struct { x, y int }
  4650  var p *Point
  4651  x[2], p.x = 6, 7  // set x[2] = 6, then panic setting p.x = 7
  4652  
  4653  i = 2
  4654  x = []int{3, 5, 7}
  4655  for i, x[i] = range x {  // set i, x[2] = 0, x[0]
  4656  	break
  4657  }
  4658  // after this loop, i == 0 and x == []int{3, 5, 3}
  4659  </pre>
  4660  
  4661  <p>
  4662  In assignments, each value must be <a href="#Assignability">assignable</a>
  4663  to the type of the operand to which it is assigned, with the following special cases:
  4664  </p>
  4665  
  4666  <ol>
  4667  <li>
  4668  	Any typed value may be assigned to the blank identifier.
  4669  </li>
  4670  
  4671  <li>
  4672  	If an untyped constant
  4673  	is assigned to a variable of interface type or the blank identifier,
  4674  	the constant is first <a href="#Conversions">converted</a> to its
  4675  	 <a href="#Constants">default type</a>.
  4676  </li>
  4677  
  4678  <li>
  4679  	If an untyped boolean value is assigned to a variable of interface type or
  4680  	the blank identifier, it is first converted to type <code>bool</code>.
  4681  </li>
  4682  </ol>
  4683  
  4684  <h3 id="If_statements">If statements</h3>
  4685  
  4686  <p>
  4687  "If" statements specify the conditional execution of two branches
  4688  according to the value of a boolean expression.  If the expression
  4689  evaluates to true, the "if" branch is executed, otherwise, if
  4690  present, the "else" branch is executed.
  4691  </p>
  4692  
  4693  <pre class="ebnf">
  4694  IfStmt = "if" [ SimpleStmt ";" ] Expression Block [ "else" ( IfStmt | Block ) ] .
  4695  </pre>
  4696  
  4697  <pre>
  4698  if x &gt; max {
  4699  	x = max
  4700  }
  4701  </pre>
  4702  
  4703  <p>
  4704  The expression may be preceded by a simple statement, which
  4705  executes before the expression is evaluated.
  4706  </p>
  4707  
  4708  <pre>
  4709  if x := f(); x &lt; y {
  4710  	return x
  4711  } else if x &gt; z {
  4712  	return z
  4713  } else {
  4714  	return y
  4715  }
  4716  </pre>
  4717  
  4718  
  4719  <h3 id="Switch_statements">Switch statements</h3>
  4720  
  4721  <p>
  4722  "Switch" statements provide multi-way execution.
  4723  An expression or type specifier is compared to the "cases"
  4724  inside the "switch" to determine which branch
  4725  to execute.
  4726  </p>
  4727  
  4728  <pre class="ebnf">
  4729  SwitchStmt = ExprSwitchStmt | TypeSwitchStmt .
  4730  </pre>
  4731  
  4732  <p>
  4733  There are two forms: expression switches and type switches.
  4734  In an expression switch, the cases contain expressions that are compared
  4735  against the value of the switch expression.
  4736  In a type switch, the cases contain types that are compared against the
  4737  type of a specially annotated switch expression.
  4738  The switch expression is evaluated exactly once in a switch statement.
  4739  </p>
  4740  
  4741  <h4 id="Expression_switches">Expression switches</h4>
  4742  
  4743  <p>
  4744  In an expression switch,
  4745  the switch expression is evaluated and
  4746  the case expressions, which need not be constants,
  4747  are evaluated left-to-right and top-to-bottom; the first one that equals the
  4748  switch expression
  4749  triggers execution of the statements of the associated case;
  4750  the other cases are skipped.
  4751  If no case matches and there is a "default" case,
  4752  its statements are executed.
  4753  There can be at most one default case and it may appear anywhere in the
  4754  "switch" statement.
  4755  A missing switch expression is equivalent to the boolean value
  4756  <code>true</code>.
  4757  </p>
  4758  
  4759  <pre class="ebnf">
  4760  ExprSwitchStmt = "switch" [ SimpleStmt ";" ] [ Expression ] "{" { ExprCaseClause } "}" .
  4761  ExprCaseClause = ExprSwitchCase ":" StatementList .
  4762  ExprSwitchCase = "case" ExpressionList | "default" .
  4763  </pre>
  4764  
  4765  <p>
  4766  If the switch expression evaluates to an untyped constant, it is first
  4767  <a href="#Conversions">converted</a> to its <a href="#Constants">default type</a>;
  4768  if it is an untyped boolean value, it is first converted to type <code>bool</code>.
  4769  The predeclared untyped value <code>nil</code> cannot be used as a switch expression.
  4770  </p>
  4771  
  4772  <p>
  4773  If a case expression is untyped, it is first <a href="#Conversions">converted</a>
  4774  to the type of the switch expression.
  4775  For each (possibly converted) case expression <code>x</code> and the value <code>t</code>
  4776  of the switch expression, <code>x == t</code> must be a valid <a href="#Comparison_operators">comparison</a>.
  4777  </p>
  4778  
  4779  <p>
  4780  In other words, the switch expression is treated as if it were used to declare and
  4781  initialize a temporary variable <code>t</code> without explicit type; it is that
  4782  value of <code>t</code> against which each case expression <code>x</code> is tested
  4783  for equality.
  4784  </p>
  4785  
  4786  <p>
  4787  In a case or default clause, the last non-empty statement
  4788  may be a (possibly <a href="#Labeled_statements">labeled</a>)
  4789  <a href="#Fallthrough_statements">"fallthrough" statement</a> to
  4790  indicate that control should flow from the end of this clause to
  4791  the first statement of the next clause.
  4792  Otherwise control flows to the end of the "switch" statement.
  4793  A "fallthrough" statement may appear as the last statement of all
  4794  but the last clause of an expression switch.
  4795  </p>
  4796  
  4797  <p>
  4798  The switch expression may be preceded by a simple statement, which
  4799  executes before the expression is evaluated.
  4800  </p>
  4801  
  4802  <pre>
  4803  switch tag {
  4804  default: s3()
  4805  case 0, 1, 2, 3: s1()
  4806  case 4, 5, 6, 7: s2()
  4807  }
  4808  
  4809  switch x := f(); {  // missing switch expression means "true"
  4810  case x &lt; 0: return -x
  4811  default: return x
  4812  }
  4813  
  4814  switch {
  4815  case x &lt; y: f1()
  4816  case x &lt; z: f2()
  4817  case x == 4: f3()
  4818  }
  4819  </pre>
  4820  
  4821  <p>
  4822  Implementation restriction: A compiler may disallow multiple case
  4823  expressions evaluating to the same constant.
  4824  For instance, the current compilers disallow duplicate integer,
  4825  floating point, or string constants in case expressions.
  4826  </p>
  4827  
  4828  <h4 id="Type_switches">Type switches</h4>
  4829  
  4830  <p>
  4831  A type switch compares types rather than values. It is otherwise similar
  4832  to an expression switch. It is marked by a special switch expression that
  4833  has the form of a <a href="#Type_assertions">type assertion</a>
  4834  using the reserved word <code>type</code> rather than an actual type:
  4835  </p>
  4836  
  4837  <pre>
  4838  switch x.(type) {
  4839  // cases
  4840  }
  4841  </pre>
  4842  
  4843  <p>
  4844  Cases then match actual types <code>T</code> against the dynamic type of the
  4845  expression <code>x</code>. As with type assertions, <code>x</code> must be of
  4846  <a href="#Interface_types">interface type</a>, and each non-interface type
  4847  <code>T</code> listed in a case must implement the type of <code>x</code>.
  4848  The types listed in the cases of a type switch must all be
  4849  <a href="#Type_identity">different</a>.
  4850  </p>
  4851  
  4852  <pre class="ebnf">
  4853  TypeSwitchStmt  = "switch" [ SimpleStmt ";" ] TypeSwitchGuard "{" { TypeCaseClause } "}" .
  4854  TypeSwitchGuard = [ identifier ":=" ] PrimaryExpr "." "(" "type" ")" .
  4855  TypeCaseClause  = TypeSwitchCase ":" StatementList .
  4856  TypeSwitchCase  = "case" TypeList | "default" .
  4857  TypeList        = Type { "," Type } .
  4858  </pre>
  4859  
  4860  <p>
  4861  The TypeSwitchGuard may include a
  4862  <a href="#Short_variable_declarations">short variable declaration</a>.
  4863  When that form is used, the variable is declared at the end of the
  4864  TypeSwitchCase in the <a href="#Blocks">implicit block</a> of each clause.
  4865  In clauses with a case listing exactly one type, the variable
  4866  has that type; otherwise, the variable has the type of the expression
  4867  in the TypeSwitchGuard.
  4868  </p>
  4869  
  4870  <p>
  4871  Instead of a type, a case may use the predeclared identifier
  4872  <a href="#Predeclared_identifiers"><code>nil</code></a>;
  4873  that case is selected when the expression in the TypeSwitchGuard
  4874  is a <code>nil</code> interface value.
  4875  There may be at most one <code>nil</code> case.
  4876  </p>
  4877  
  4878  <p>
  4879  Given an expression <code>x</code> of type <code>interface{}</code>,
  4880  the following type switch:
  4881  </p>
  4882  
  4883  <pre>
  4884  switch i := x.(type) {
  4885  case nil:
  4886  	printString("x is nil")                // type of i is type of x (interface{})
  4887  case int:
  4888  	printInt(i)                            // type of i is int
  4889  case float64:
  4890  	printFloat64(i)                        // type of i is float64
  4891  case func(int) float64:
  4892  	printFunction(i)                       // type of i is func(int) float64
  4893  case bool, string:
  4894  	printString("type is bool or string")  // type of i is type of x (interface{})
  4895  default:
  4896  	printString("don't know the type")     // type of i is type of x (interface{})
  4897  }
  4898  </pre>
  4899  
  4900  <p>
  4901  could be rewritten:
  4902  </p>
  4903  
  4904  <pre>
  4905  v := x  // x is evaluated exactly once
  4906  if v == nil {
  4907  	i := v                                 // type of i is type of x (interface{})
  4908  	printString("x is nil")
  4909  } else if i, isInt := v.(int); isInt {
  4910  	printInt(i)                            // type of i is int
  4911  } else if i, isFloat64 := v.(float64); isFloat64 {
  4912  	printFloat64(i)                        // type of i is float64
  4913  } else if i, isFunc := v.(func(int) float64); isFunc {
  4914  	printFunction(i)                       // type of i is func(int) float64
  4915  } else {
  4916  	_, isBool := v.(bool)
  4917  	_, isString := v.(string)
  4918  	if isBool || isString {
  4919  		i := v                         // type of i is type of x (interface{})
  4920  		printString("type is bool or string")
  4921  	} else {
  4922  		i := v                         // type of i is type of x (interface{})
  4923  		printString("don't know the type")
  4924  	}
  4925  }
  4926  </pre>
  4927  
  4928  <p>
  4929  The type switch guard may be preceded by a simple statement, which
  4930  executes before the guard is evaluated.
  4931  </p>
  4932  
  4933  <p>
  4934  The "fallthrough" statement is not permitted in a type switch.
  4935  </p>
  4936  
  4937  <h3 id="For_statements">For statements</h3>
  4938  
  4939  <p>
  4940  A "for" statement specifies repeated execution of a block. There are three forms:
  4941  The iteration may be controlled by a single condition, a "for" clause, or a "range" clause.
  4942  </p>
  4943  
  4944  <pre class="ebnf">
  4945  ForStmt = "for" [ Condition | ForClause | RangeClause ] Block .
  4946  Condition = Expression .
  4947  </pre>
  4948  
  4949  <h4 id="For_condition">For statements with single condition</h4>
  4950  
  4951  <p>
  4952  In its simplest form, a "for" statement specifies the repeated execution of
  4953  a block as long as a boolean condition evaluates to true.
  4954  The condition is evaluated before each iteration.
  4955  If the condition is absent, it is equivalent to the boolean value
  4956  <code>true</code>.
  4957  </p>
  4958  
  4959  <pre>
  4960  for a &lt; b {
  4961  	a *= 2
  4962  }
  4963  </pre>
  4964  
  4965  <h4 id="For_clause">For statements with <code>for</code> clause</h4>
  4966  
  4967  <p>
  4968  A "for" statement with a ForClause is also controlled by its condition, but
  4969  additionally it may specify an <i>init</i>
  4970  and a <i>post</i> statement, such as an assignment,
  4971  an increment or decrement statement. The init statement may be a
  4972  <a href="#Short_variable_declarations">short variable declaration</a>, but the post statement must not.
  4973  Variables declared by the init statement are re-used in each iteration.
  4974  </p>
  4975  
  4976  <pre class="ebnf">
  4977  ForClause = [ InitStmt ] ";" [ Condition ] ";" [ PostStmt ] .
  4978  InitStmt = SimpleStmt .
  4979  PostStmt = SimpleStmt .
  4980  </pre>
  4981  
  4982  <pre>
  4983  for i := 0; i &lt; 10; i++ {
  4984  	f(i)
  4985  }
  4986  </pre>
  4987  
  4988  <p>
  4989  If non-empty, the init statement is executed once before evaluating the
  4990  condition for the first iteration;
  4991  the post statement is executed after each execution of the block (and
  4992  only if the block was executed).
  4993  Any element of the ForClause may be empty but the
  4994  <a href="#Semicolons">semicolons</a> are
  4995  required unless there is only a condition.
  4996  If the condition is absent, it is equivalent to the boolean value
  4997  <code>true</code>.
  4998  </p>
  4999  
  5000  <pre>
  5001  for cond { S() }    is the same as    for ; cond ; { S() }
  5002  for      { S() }    is the same as    for true     { S() }
  5003  </pre>
  5004  
  5005  <h4 id="For_range">For statements with <code>range</code> clause</h4>
  5006  
  5007  <p>
  5008  A "for" statement with a "range" clause
  5009  iterates through all entries of an array, slice, string or map,
  5010  or values received on a channel. For each entry it assigns <i>iteration values</i>
  5011  to corresponding <i>iteration variables</i> if present and then executes the block.
  5012  </p>
  5013  
  5014  <pre class="ebnf">
  5015  RangeClause = [ ExpressionList "=" | IdentifierList ":=" ] "range" Expression .
  5016  </pre>
  5017  
  5018  <p>
  5019  The expression on the right in the "range" clause is called the <i>range expression</i>,
  5020  which may be an array, pointer to an array, slice, string, map, or channel permitting
  5021  <a href="#Receive_operator">receive operations</a>.
  5022  As with an assignment, if present the operands on the left must be
  5023  <a href="#Address_operators">addressable</a> or map index expressions; they
  5024  denote the iteration variables. If the range expression is a channel, at most
  5025  one iteration variable is permitted, otherwise there may be up to two.
  5026  If the last iteration variable is the <a href="#Blank_identifier">blank identifier</a>,
  5027  the range clause is equivalent to the same clause without that identifier.
  5028  </p>
  5029  
  5030  <p>
  5031  The range expression is evaluated once before beginning the loop,
  5032  with one exception: if the range expression is an array or a pointer to an array
  5033  and at most one iteration variable is present, only the range expression's
  5034  length is evaluated; if that length is constant,
  5035  <a href="#Length_and_capacity">by definition</a>
  5036  the range expression itself will not be evaluated.
  5037  </p>
  5038  
  5039  <p>
  5040  Function calls on the left are evaluated once per iteration.
  5041  For each iteration, iteration values are produced as follows
  5042  if the respective iteration variables are present:
  5043  </p>
  5044  
  5045  <pre class="grammar">
  5046  Range expression                          1st value          2nd value
  5047  
  5048  array or slice  a  [n]E, *[n]E, or []E    index    i  int    a[i]       E
  5049  string          s  string type            index    i  int    see below  rune
  5050  map             m  map[K]V                key      k  K      m[k]       V
  5051  channel         c  chan E, &lt;-chan E       element  e  E
  5052  </pre>
  5053  
  5054  <ol>
  5055  <li>
  5056  For an array, pointer to array, or slice value <code>a</code>, the index iteration
  5057  values are produced in increasing order, starting at element index 0.
  5058  If at most one iteration variable is present, the range loop produces
  5059  iteration values from 0 up to <code>len(a)-1</code> and does not index into the array
  5060  or slice itself. For a <code>nil</code> slice, the number of iterations is 0.
  5061  </li>
  5062  
  5063  <li>
  5064  For a string value, the "range" clause iterates over the Unicode code points
  5065  in the string starting at byte index 0.  On successive iterations, the index value will be the
  5066  index of the first byte of successive UTF-8-encoded code points in the string,
  5067  and the second value, of type <code>rune</code>, will be the value of
  5068  the corresponding code point.  If the iteration encounters an invalid
  5069  UTF-8 sequence, the second value will be <code>0xFFFD</code>,
  5070  the Unicode replacement character, and the next iteration will advance
  5071  a single byte in the string.
  5072  </li>
  5073  
  5074  <li>
  5075  The iteration order over maps is not specified
  5076  and is not guaranteed to be the same from one iteration to the next.
  5077  If a map entry that has not yet been reached is removed during iteration,
  5078  the corresponding iteration value will not be produced. If a map entry is
  5079  created during iteration, that entry may be produced during the iteration or
  5080  may be skipped. The choice may vary for each entry created and from one
  5081  iteration to the next.
  5082  If the map is <code>nil</code>, the number of iterations is 0.
  5083  </li>
  5084  
  5085  <li>
  5086  For channels, the iteration values produced are the successive values sent on
  5087  the channel until the channel is <a href="#Close">closed</a>. If the channel
  5088  is <code>nil</code>, the range expression blocks forever.
  5089  </li>
  5090  </ol>
  5091  
  5092  <p>
  5093  The iteration values are assigned to the respective
  5094  iteration variables as in an <a href="#Assignments">assignment statement</a>.
  5095  </p>
  5096  
  5097  <p>
  5098  The iteration variables may be declared by the "range" clause using a form of
  5099  <a href="#Short_variable_declarations">short variable declaration</a>
  5100  (<code>:=</code>).
  5101  In this case their types are set to the types of the respective iteration values
  5102  and their <a href="#Declarations_and_scope">scope</a> is the block of the "for"
  5103  statement; they are re-used in each iteration.
  5104  If the iteration variables are declared outside the "for" statement,
  5105  after execution their values will be those of the last iteration.
  5106  </p>
  5107  
  5108  <pre>
  5109  var testdata *struct {
  5110  	a *[7]int
  5111  }
  5112  for i, _ := range testdata.a {
  5113  	// testdata.a is never evaluated; len(testdata.a) is constant
  5114  	// i ranges from 0 to 6
  5115  	f(i)
  5116  }
  5117  
  5118  var a [10]string
  5119  for i, s := range a {
  5120  	// type of i is int
  5121  	// type of s is string
  5122  	// s == a[i]
  5123  	g(i, s)
  5124  }
  5125  
  5126  var key string
  5127  var val interface {}  // value type of m is assignable to val
  5128  m := map[string]int{"mon":0, "tue":1, "wed":2, "thu":3, "fri":4, "sat":5, "sun":6}
  5129  for key, val = range m {
  5130  	h(key, val)
  5131  }
  5132  // key == last map key encountered in iteration
  5133  // val == map[key]
  5134  
  5135  var ch chan Work = producer()
  5136  for w := range ch {
  5137  	doWork(w)
  5138  }
  5139  
  5140  // empty a channel
  5141  for range ch {}
  5142  </pre>
  5143  
  5144  
  5145  <h3 id="Go_statements">Go statements</h3>
  5146  
  5147  <p>
  5148  A "go" statement starts the execution of a function call
  5149  as an independent concurrent thread of control, or <i>goroutine</i>,
  5150  within the same address space.
  5151  </p>
  5152  
  5153  <pre class="ebnf">
  5154  GoStmt = "go" Expression .
  5155  </pre>
  5156  
  5157  <p>
  5158  The expression must be a function or method call; it cannot be parenthesized.
  5159  Calls of built-in functions are restricted as for
  5160  <a href="#Expression_statements">expression statements</a>.
  5161  </p>
  5162  
  5163  <p>
  5164  The function value and parameters are
  5165  <a href="#Calls">evaluated as usual</a>
  5166  in the calling goroutine, but
  5167  unlike with a regular call, program execution does not wait
  5168  for the invoked function to complete.
  5169  Instead, the function begins executing independently
  5170  in a new goroutine.
  5171  When the function terminates, its goroutine also terminates.
  5172  If the function has any return values, they are discarded when the
  5173  function completes.
  5174  </p>
  5175  
  5176  <pre>
  5177  go Server()
  5178  go func(ch chan&lt;- bool) { for { sleep(10); ch &lt;- true }} (c)
  5179  </pre>
  5180  
  5181  
  5182  <h3 id="Select_statements">Select statements</h3>
  5183  
  5184  <p>
  5185  A "select" statement chooses which of a set of possible
  5186  <a href="#Send_statements">send</a> or
  5187  <a href="#Receive_operator">receive</a>
  5188  operations will proceed.
  5189  It looks similar to a
  5190  <a href="#Switch_statements">"switch"</a> statement but with the
  5191  cases all referring to communication operations.
  5192  </p>
  5193  
  5194  <pre class="ebnf">
  5195  SelectStmt = "select" "{" { CommClause } "}" .
  5196  CommClause = CommCase ":" StatementList .
  5197  CommCase   = "case" ( SendStmt | RecvStmt ) | "default" .
  5198  RecvStmt   = [ ExpressionList "=" | IdentifierList ":=" ] RecvExpr .
  5199  RecvExpr   = Expression .
  5200  </pre>
  5201  
  5202  <p>
  5203  A case with a RecvStmt may assign the result of a RecvExpr to one or
  5204  two variables, which may be declared using a
  5205  <a href="#Short_variable_declarations">short variable declaration</a>.
  5206  The RecvExpr must be a (possibly parenthesized) receive operation.
  5207  There can be at most one default case and it may appear anywhere
  5208  in the list of cases.
  5209  </p>
  5210  
  5211  <p>
  5212  Execution of a "select" statement proceeds in several steps:
  5213  </p>
  5214  
  5215  <ol>
  5216  <li>
  5217  For all the cases in the statement, the channel operands of receive operations
  5218  and the channel and right-hand-side expressions of send statements are
  5219  evaluated exactly once, in source order, upon entering the "select" statement.
  5220  The result is a set of channels to receive from or send to,
  5221  and the corresponding values to send.
  5222  Any side effects in that evaluation will occur irrespective of which (if any)
  5223  communication operation is selected to proceed.
  5224  Expressions on the left-hand side of a RecvStmt with a short variable declaration
  5225  or assignment are not yet evaluated.
  5226  </li>
  5227  
  5228  <li>
  5229  If one or more of the communications can proceed,
  5230  a single one that can proceed is chosen via a uniform pseudo-random selection.
  5231  Otherwise, if there is a default case, that case is chosen.
  5232  If there is no default case, the "select" statement blocks until
  5233  at least one of the communications can proceed.
  5234  </li>
  5235  
  5236  <li>
  5237  Unless the selected case is the default case, the respective communication
  5238  operation is executed.
  5239  </li>
  5240  
  5241  <li>
  5242  If the selected case is a RecvStmt with a short variable declaration or
  5243  an assignment, the left-hand side expressions are evaluated and the
  5244  received value (or values) are assigned.
  5245  </li>
  5246  
  5247  <li>
  5248  The statement list of the selected case is executed.
  5249  </li>
  5250  </ol>
  5251  
  5252  <p>
  5253  Since communication on <code>nil</code> channels can never proceed,
  5254  a select with only <code>nil</code> channels and no default case blocks forever.
  5255  </p>
  5256  
  5257  <pre>
  5258  var a []int
  5259  var c, c1, c2, c3, c4 chan int
  5260  var i1, i2 int
  5261  select {
  5262  case i1 = &lt;-c1:
  5263  	print("received ", i1, " from c1\n")
  5264  case c2 &lt;- i2:
  5265  	print("sent ", i2, " to c2\n")
  5266  case i3, ok := (&lt;-c3):  // same as: i3, ok := &lt;-c3
  5267  	if ok {
  5268  		print("received ", i3, " from c3\n")
  5269  	} else {
  5270  		print("c3 is closed\n")
  5271  	}
  5272  case a[f()] = &lt;-c4:
  5273  	// same as:
  5274  	// case t := &lt;-c4
  5275  	//	a[f()] = t
  5276  default:
  5277  	print("no communication\n")
  5278  }
  5279  
  5280  for {  // send random sequence of bits to c
  5281  	select {
  5282  	case c &lt;- 0:  // note: no statement, no fallthrough, no folding of cases
  5283  	case c &lt;- 1:
  5284  	}
  5285  }
  5286  
  5287  select {}  // block forever
  5288  </pre>
  5289  
  5290  
  5291  <h3 id="Return_statements">Return statements</h3>
  5292  
  5293  <p>
  5294  A "return" statement in a function <code>F</code> terminates the execution
  5295  of <code>F</code>, and optionally provides one or more result values.
  5296  Any functions <a href="#Defer_statements">deferred</a> by <code>F</code>
  5297  are executed before <code>F</code> returns to its caller.
  5298  </p>
  5299  
  5300  <pre class="ebnf">
  5301  ReturnStmt = "return" [ ExpressionList ] .
  5302  </pre>
  5303  
  5304  <p>
  5305  In a function without a result type, a "return" statement must not
  5306  specify any result values.
  5307  </p>
  5308  <pre>
  5309  func noResult() {
  5310  	return
  5311  }
  5312  </pre>
  5313  
  5314  <p>
  5315  There are three ways to return values from a function with a result
  5316  type:
  5317  </p>
  5318  
  5319  <ol>
  5320  	<li>The return value or values may be explicitly listed
  5321  		in the "return" statement. Each expression must be single-valued
  5322  		and <a href="#Assignability">assignable</a>
  5323  		to the corresponding element of the function's result type.
  5324  <pre>
  5325  func simpleF() int {
  5326  	return 2
  5327  }
  5328  
  5329  func complexF1() (re float64, im float64) {
  5330  	return -7.0, -4.0
  5331  }
  5332  </pre>
  5333  	</li>
  5334  	<li>The expression list in the "return" statement may be a single
  5335  		call to a multi-valued function. The effect is as if each value
  5336  		returned from that function were assigned to a temporary
  5337  		variable with the type of the respective value, followed by a
  5338  		"return" statement listing these variables, at which point the
  5339  		rules of the previous case apply.
  5340  <pre>
  5341  func complexF2() (re float64, im float64) {
  5342  	return complexF1()
  5343  }
  5344  </pre>
  5345  	</li>
  5346  	<li>The expression list may be empty if the function's result
  5347  		type specifies names for its <a href="#Function_types">result parameters</a>.
  5348  		The result parameters act as ordinary local variables
  5349  		and the function may assign values to them as necessary.
  5350  		The "return" statement returns the values of these variables.
  5351  <pre>
  5352  func complexF3() (re float64, im float64) {
  5353  	re = 7.0
  5354  	im = 4.0
  5355  	return
  5356  }
  5357  
  5358  func (devnull) Write(p []byte) (n int, _ error) {
  5359  	n = len(p)
  5360  	return
  5361  }
  5362  </pre>
  5363  	</li>
  5364  </ol>
  5365  
  5366  <p>
  5367  Regardless of how they are declared, all the result values are initialized to
  5368  the <a href="#The_zero_value">zero values</a> for their type upon entry to the
  5369  function. A "return" statement that specifies results sets the result parameters before
  5370  any deferred functions are executed.
  5371  </p>
  5372  
  5373  <p>
  5374  Implementation restriction: A compiler may disallow an empty expression list
  5375  in a "return" statement if a different entity (constant, type, or variable)
  5376  with the same name as a result parameter is in
  5377  <a href="#Declarations_and_scope">scope</a> at the place of the return.
  5378  </p>
  5379  
  5380  <pre>
  5381  func f(n int) (res int, err error) {
  5382  	if _, err := f(n-1); err != nil {
  5383  		return  // invalid return statement: err is shadowed
  5384  	}
  5385  	return
  5386  }
  5387  </pre>
  5388  
  5389  <h3 id="Break_statements">Break statements</h3>
  5390  
  5391  <p>
  5392  A "break" statement terminates execution of the innermost
  5393  <a href="#For_statements">"for"</a>,
  5394  <a href="#Switch_statements">"switch"</a>, or
  5395  <a href="#Select_statements">"select"</a> statement
  5396  within the same function.
  5397  </p>
  5398  
  5399  <pre class="ebnf">
  5400  BreakStmt = "break" [ Label ] .
  5401  </pre>
  5402  
  5403  <p>
  5404  If there is a label, it must be that of an enclosing
  5405  "for", "switch", or "select" statement,
  5406  and that is the one whose execution terminates.
  5407  </p>
  5408  
  5409  <pre>
  5410  OuterLoop:
  5411  	for i = 0; i &lt; n; i++ {
  5412  		for j = 0; j &lt; m; j++ {
  5413  			switch a[i][j] {
  5414  			case nil:
  5415  				state = Error
  5416  				break OuterLoop
  5417  			case item:
  5418  				state = Found
  5419  				break OuterLoop
  5420  			}
  5421  		}
  5422  	}
  5423  </pre>
  5424  
  5425  <h3 id="Continue_statements">Continue statements</h3>
  5426  
  5427  <p>
  5428  A "continue" statement begins the next iteration of the
  5429  innermost <a href="#For_statements">"for" loop</a> at its post statement.
  5430  The "for" loop must be within the same function.
  5431  </p>
  5432  
  5433  <pre class="ebnf">
  5434  ContinueStmt = "continue" [ Label ] .
  5435  </pre>
  5436  
  5437  <p>
  5438  If there is a label, it must be that of an enclosing
  5439  "for" statement, and that is the one whose execution
  5440  advances.
  5441  </p>
  5442  
  5443  <pre>
  5444  RowLoop:
  5445  	for y, row := range rows {
  5446  		for x, data := range row {
  5447  			if data == endOfRow {
  5448  				continue RowLoop
  5449  			}
  5450  			row[x] = data + bias(x, y)
  5451  		}
  5452  	}
  5453  </pre>
  5454  
  5455  <h3 id="Goto_statements">Goto statements</h3>
  5456  
  5457  <p>
  5458  A "goto" statement transfers control to the statement with the corresponding label
  5459  within the same function.
  5460  </p>
  5461  
  5462  <pre class="ebnf">
  5463  GotoStmt = "goto" Label .
  5464  </pre>
  5465  
  5466  <pre>
  5467  goto Error
  5468  </pre>
  5469  
  5470  <p>
  5471  Executing the "goto" statement must not cause any variables to come into
  5472  <a href="#Declarations_and_scope">scope</a> that were not already in scope at the point of the goto.
  5473  For instance, this example:
  5474  </p>
  5475  
  5476  <pre>
  5477  	goto L  // BAD
  5478  	v := 3
  5479  L:
  5480  </pre>
  5481  
  5482  <p>
  5483  is erroneous because the jump to label <code>L</code> skips
  5484  the creation of <code>v</code>.
  5485  </p>
  5486  
  5487  <p>
  5488  A "goto" statement outside a <a href="#Blocks">block</a> cannot jump to a label inside that block.
  5489  For instance, this example:
  5490  </p>
  5491  
  5492  <pre>
  5493  if n%2 == 1 {
  5494  	goto L1
  5495  }
  5496  for n &gt; 0 {
  5497  	f()
  5498  	n--
  5499  L1:
  5500  	f()
  5501  	n--
  5502  }
  5503  </pre>
  5504  
  5505  <p>
  5506  is erroneous because the label <code>L1</code> is inside
  5507  the "for" statement's block but the <code>goto</code> is not.
  5508  </p>
  5509  
  5510  <h3 id="Fallthrough_statements">Fallthrough statements</h3>
  5511  
  5512  <p>
  5513  A "fallthrough" statement transfers control to the first statement of the
  5514  next case clause in an <a href="#Expression_switches">expression "switch" statement</a>.
  5515  It may be used only as the final non-empty statement in such a clause.
  5516  </p>
  5517  
  5518  <pre class="ebnf">
  5519  FallthroughStmt = "fallthrough" .
  5520  </pre>
  5521  
  5522  
  5523  <h3 id="Defer_statements">Defer statements</h3>
  5524  
  5525  <p>
  5526  A "defer" statement invokes a function whose execution is deferred
  5527  to the moment the surrounding function returns, either because the
  5528  surrounding function executed a <a href="#Return_statements">return statement</a>,
  5529  reached the end of its <a href="#Function_declarations">function body</a>,
  5530  or because the corresponding goroutine is <a href="#Handling_panics">panicking</a>.
  5531  </p>
  5532  
  5533  <pre class="ebnf">
  5534  DeferStmt = "defer" Expression .
  5535  </pre>
  5536  
  5537  <p>
  5538  The expression must be a function or method call; it cannot be parenthesized.
  5539  Calls of built-in functions are restricted as for
  5540  <a href="#Expression_statements">expression statements</a>.
  5541  </p>
  5542  
  5543  <p>
  5544  Each time a "defer" statement
  5545  executes, the function value and parameters to the call are
  5546  <a href="#Calls">evaluated as usual</a>
  5547  and saved anew but the actual function is not invoked.
  5548  Instead, deferred functions are invoked immediately before
  5549  the surrounding function returns, in the reverse order
  5550  they were deferred.
  5551  If a deferred function value evaluates
  5552  to <code>nil</code>, execution <a href="#Handling_panics">panics</a>
  5553  when the function is invoked, not when the "defer" statement is executed.
  5554  </p>
  5555  
  5556  <p>
  5557  For instance, if the deferred function is
  5558  a <a href="#Function_literals">function literal</a> and the surrounding
  5559  function has <a href="#Function_types">named result parameters</a> that
  5560  are in scope within the literal, the deferred function may access and modify
  5561  the result parameters before they are returned.
  5562  If the deferred function has any return values, they are discarded when
  5563  the function completes.
  5564  (See also the section on <a href="#Handling_panics">handling panics</a>.)
  5565  </p>
  5566  
  5567  <pre>
  5568  lock(l)
  5569  defer unlock(l)  // unlocking happens before surrounding function returns
  5570  
  5571  // prints 3 2 1 0 before surrounding function returns
  5572  for i := 0; i &lt;= 3; i++ {
  5573  	defer fmt.Print(i)
  5574  }
  5575  
  5576  // f returns 1
  5577  func f() (result int) {
  5578  	defer func() {
  5579  		result++
  5580  	}()
  5581  	return 0
  5582  }
  5583  </pre>
  5584  
  5585  <h2 id="Built-in_functions">Built-in functions</h2>
  5586  
  5587  <p>
  5588  Built-in functions are
  5589  <a href="#Predeclared_identifiers">predeclared</a>.
  5590  They are called like any other function but some of them
  5591  accept a type instead of an expression as the first argument.
  5592  </p>
  5593  
  5594  <p>
  5595  The built-in functions do not have standard Go types,
  5596  so they can only appear in <a href="#Calls">call expressions</a>;
  5597  they cannot be used as function values.
  5598  </p>
  5599  
  5600  <h3 id="Close">Close</h3>
  5601  
  5602  <p>
  5603  For a channel <code>c</code>, the built-in function <code>close(c)</code>
  5604  records that no more values will be sent on the channel.
  5605  It is an error if <code>c</code> is a receive-only channel.
  5606  Sending to or closing a closed channel causes a <a href="#Run_time_panics">run-time panic</a>.
  5607  Closing the nil channel also causes a <a href="#Run_time_panics">run-time panic</a>.
  5608  After calling <code>close</code>, and after any previously
  5609  sent values have been received, receive operations will return
  5610  the zero value for the channel's type without blocking.
  5611  The multi-valued <a href="#Receive_operator">receive operation</a>
  5612  returns a received value along with an indication of whether the channel is closed.
  5613  </p>
  5614  
  5615  
  5616  <h3 id="Length_and_capacity">Length and capacity</h3>
  5617  
  5618  <p>
  5619  The built-in functions <code>len</code> and <code>cap</code> take arguments
  5620  of various types and return a result of type <code>int</code>.
  5621  The implementation guarantees that the result always fits into an <code>int</code>.
  5622  </p>
  5623  
  5624  <pre class="grammar">
  5625  Call      Argument type    Result
  5626  
  5627  len(s)    string type      string length in bytes
  5628            [n]T, *[n]T      array length (== n)
  5629            []T              slice length
  5630            map[K]T          map length (number of defined keys)
  5631            chan T           number of elements queued in channel buffer
  5632  
  5633  cap(s)    [n]T, *[n]T      array length (== n)
  5634            []T              slice capacity
  5635            chan T           channel buffer capacity
  5636  </pre>
  5637  
  5638  <p>
  5639  The capacity of a slice is the number of elements for which there is
  5640  space allocated in the underlying array.
  5641  At any time the following relationship holds:
  5642  </p>
  5643  
  5644  <pre>
  5645  0 &lt;= len(s) &lt;= cap(s)
  5646  </pre>
  5647  
  5648  <p>
  5649  The length of a <code>nil</code> slice, map or channel is 0.
  5650  The capacity of a <code>nil</code> slice or channel is 0.
  5651  </p>
  5652  
  5653  <p>
  5654  The expression <code>len(s)</code> is <a href="#Constants">constant</a> if
  5655  <code>s</code> is a string constant. The expressions <code>len(s)</code> and
  5656  <code>cap(s)</code> are constants if the type of <code>s</code> is an array
  5657  or pointer to an array and the expression <code>s</code> does not contain
  5658  <a href="#Receive_operator">channel receives</a> or (non-constant)
  5659  <a href="#Calls">function calls</a>; in this case <code>s</code> is not evaluated.
  5660  Otherwise, invocations of <code>len</code> and <code>cap</code> are not
  5661  constant and <code>s</code> is evaluated.
  5662  </p>
  5663  
  5664  <pre>
  5665  const (
  5666  	c1 = imag(2i)                    // imag(2i) = 2.0 is a constant
  5667  	c2 = len([10]float64{2})         // [10]float64{2} contains no function calls
  5668  	c3 = len([10]float64{c1})        // [10]float64{c1} contains no function calls
  5669  	c4 = len([10]float64{imag(2i)})  // imag(2i) is a constant and no function call is issued
  5670  	c5 = len([10]float64{imag(z)})   // invalid: imag(z) is a (non-constant) function call
  5671  )
  5672  var z complex128
  5673  </pre>
  5674  
  5675  <h3 id="Allocation">Allocation</h3>
  5676  
  5677  <p>
  5678  The built-in function <code>new</code> takes a type <code>T</code>,
  5679  allocates storage for a <a href="#Variables">variable</a> of that type
  5680  at run time, and returns a value of type <code>*T</code>
  5681  <a href="#Pointer_types">pointing</a> to it.
  5682  The variable is initialized as described in the section on
  5683  <a href="#The_zero_value">initial values</a>.
  5684  </p>
  5685  
  5686  <pre class="grammar">
  5687  new(T)
  5688  </pre>
  5689  
  5690  <p>
  5691  For instance
  5692  </p>
  5693  
  5694  <pre>
  5695  type S struct { a int; b float64 }
  5696  new(S)
  5697  </pre>
  5698  
  5699  <p>
  5700  allocates storage for a variable of type <code>S</code>,
  5701  initializes it (<code>a=0</code>, <code>b=0.0</code>),
  5702  and returns a value of type <code>*S</code> containing the address
  5703  of the location.
  5704  </p>
  5705  
  5706  <h3 id="Making_slices_maps_and_channels">Making slices, maps and channels</h3>
  5707  
  5708  <p>
  5709  The built-in function <code>make</code> takes a type <code>T</code>,
  5710  which must be a slice, map or channel type,
  5711  optionally followed by a type-specific list of expressions.
  5712  It returns a value of type <code>T</code> (not <code>*T</code>).
  5713  The memory is initialized as described in the section on
  5714  <a href="#The_zero_value">initial values</a>.
  5715  </p>
  5716  
  5717  <pre class="grammar">
  5718  Call             Type T     Result
  5719  
  5720  make(T, n)       slice      slice of type T with length n and capacity n
  5721  make(T, n, m)    slice      slice of type T with length n and capacity m
  5722  
  5723  make(T)          map        map of type T
  5724  make(T, n)       map        map of type T with initial space for approximately n elements
  5725  
  5726  make(T)          channel    unbuffered channel of type T
  5727  make(T, n)       channel    buffered channel of type T, buffer size n
  5728  </pre>
  5729  
  5730  
  5731  <p>
  5732  Each of the size arguments <code>n</code> and <code>m</code> must be of integer type
  5733  or an untyped <a href="#Constants">constant</a>.
  5734  A constant size argument must be non-negative and <a href="#Representability">representable</a>
  5735  by a value of type <code>int</code>; if it is an untyped constant it is given type <code>int</code>.
  5736  If both <code>n</code> and <code>m</code> are provided and are constant, then
  5737  <code>n</code> must be no larger than <code>m</code>.
  5738  If <code>n</code> is negative or larger than <code>m</code> at run time,
  5739  a <a href="#Run_time_panics">run-time panic</a> occurs.
  5740  </p>
  5741  
  5742  <pre>
  5743  s := make([]int, 10, 100)       // slice with len(s) == 10, cap(s) == 100
  5744  s := make([]int, 1e3)           // slice with len(s) == cap(s) == 1000
  5745  s := make([]int, 1&lt;&lt;63)         // illegal: len(s) is not representable by a value of type int
  5746  s := make([]int, 10, 0)         // illegal: len(s) > cap(s)
  5747  c := make(chan int, 10)         // channel with a buffer size of 10
  5748  m := make(map[string]int, 100)  // map with initial space for approximately 100 elements
  5749  </pre>
  5750  
  5751  <p>
  5752  Calling <code>make</code> with a map type and size hint <code>n</code> will
  5753  create a map with initial space to hold <code>n</code> map elements.
  5754  The precise behavior is implementation-dependent.
  5755  </p>
  5756  
  5757  
  5758  <h3 id="Appending_and_copying_slices">Appending to and copying slices</h3>
  5759  
  5760  <p>
  5761  The built-in functions <code>append</code> and <code>copy</code> assist in
  5762  common slice operations.
  5763  For both functions, the result is independent of whether the memory referenced
  5764  by the arguments overlaps.
  5765  </p>
  5766  
  5767  <p>
  5768  The <a href="#Function_types">variadic</a> function <code>append</code>
  5769  appends zero or more values <code>x</code>
  5770  to <code>s</code> of type <code>S</code>, which must be a slice type, and
  5771  returns the resulting slice, also of type <code>S</code>.
  5772  The values <code>x</code> are passed to a parameter of type <code>...T</code>
  5773  where <code>T</code> is the <a href="#Slice_types">element type</a> of
  5774  <code>S</code> and the respective
  5775  <a href="#Passing_arguments_to_..._parameters">parameter passing rules</a> apply.
  5776  As a special case, <code>append</code> also accepts a first argument
  5777  assignable to type <code>[]byte</code> with a second argument of
  5778  string type followed by <code>...</code>. This form appends the
  5779  bytes of the string.
  5780  </p>
  5781  
  5782  <pre class="grammar">
  5783  append(s S, x ...T) S  // T is the element type of S
  5784  </pre>
  5785  
  5786  <p>
  5787  If the capacity of <code>s</code> is not large enough to fit the additional
  5788  values, <code>append</code> allocates a new, sufficiently large underlying
  5789  array that fits both the existing slice elements and the additional values.
  5790  Otherwise, <code>append</code> re-uses the underlying array.
  5791  </p>
  5792  
  5793  <pre>
  5794  s0 := []int{0, 0}
  5795  s1 := append(s0, 2)                // append a single element     s1 == []int{0, 0, 2}
  5796  s2 := append(s1, 3, 5, 7)          // append multiple elements    s2 == []int{0, 0, 2, 3, 5, 7}
  5797  s3 := append(s2, s0...)            // append a slice              s3 == []int{0, 0, 2, 3, 5, 7, 0, 0}
  5798  s4 := append(s3[3:6], s3[2:]...)   // append overlapping slice    s4 == []int{3, 5, 7, 2, 3, 5, 7, 0, 0}
  5799  
  5800  var t []interface{}
  5801  t = append(t, 42, 3.1415, "foo")   //                             t == []interface{}{42, 3.1415, "foo"}
  5802  
  5803  var b []byte
  5804  b = append(b, "bar"...)            // append string contents      b == []byte{'b', 'a', 'r' }
  5805  </pre>
  5806  
  5807  <p>
  5808  The function <code>copy</code> copies slice elements from
  5809  a source <code>src</code> to a destination <code>dst</code> and returns the
  5810  number of elements copied.
  5811  Both arguments must have <a href="#Type_identity">identical</a> element type <code>T</code> and must be
  5812  <a href="#Assignability">assignable</a> to a slice of type <code>[]T</code>.
  5813  The number of elements copied is the minimum of
  5814  <code>len(src)</code> and <code>len(dst)</code>.
  5815  As a special case, <code>copy</code> also accepts a destination argument assignable
  5816  to type <code>[]byte</code> with a source argument of a string type.
  5817  This form copies the bytes from the string into the byte slice.
  5818  </p>
  5819  
  5820  <pre class="grammar">
  5821  copy(dst, src []T) int
  5822  copy(dst []byte, src string) int
  5823  </pre>
  5824  
  5825  <p>
  5826  Examples:
  5827  </p>
  5828  
  5829  <pre>
  5830  var a = [...]int{0, 1, 2, 3, 4, 5, 6, 7}
  5831  var s = make([]int, 6)
  5832  var b = make([]byte, 5)
  5833  n1 := copy(s, a[0:])            // n1 == 6, s == []int{0, 1, 2, 3, 4, 5}
  5834  n2 := copy(s, s[2:])            // n2 == 4, s == []int{2, 3, 4, 5, 4, 5}
  5835  n3 := copy(b, "Hello, World!")  // n3 == 5, b == []byte("Hello")
  5836  </pre>
  5837  
  5838  
  5839  <h3 id="Deletion_of_map_elements">Deletion of map elements</h3>
  5840  
  5841  <p>
  5842  The built-in function <code>delete</code> removes the element with key
  5843  <code>k</code> from a <a href="#Map_types">map</a> <code>m</code>. The
  5844  type of <code>k</code> must be <a href="#Assignability">assignable</a>
  5845  to the key type of <code>m</code>.
  5846  </p>
  5847  
  5848  <pre class="grammar">
  5849  delete(m, k)  // remove element m[k] from map m
  5850  </pre>
  5851  
  5852  <p>
  5853  If the map <code>m</code> is <code>nil</code> or the element <code>m[k]</code>
  5854  does not exist, <code>delete</code> is a no-op.
  5855  </p>
  5856  
  5857  
  5858  <h3 id="Complex_numbers">Manipulating complex numbers</h3>
  5859  
  5860  <p>
  5861  Three functions assemble and disassemble complex numbers.
  5862  The built-in function <code>complex</code> constructs a complex
  5863  value from a floating-point real and imaginary part, while
  5864  <code>real</code> and <code>imag</code>
  5865  extract the real and imaginary parts of a complex value.
  5866  </p>
  5867  
  5868  <pre class="grammar">
  5869  complex(realPart, imaginaryPart floatT) complexT
  5870  real(complexT) floatT
  5871  imag(complexT) floatT
  5872  </pre>
  5873  
  5874  <p>
  5875  The type of the arguments and return value correspond.
  5876  For <code>complex</code>, the two arguments must be of the same
  5877  floating-point type and the return type is the complex type
  5878  with the corresponding floating-point constituents:
  5879  <code>complex64</code> for <code>float32</code> arguments, and
  5880  <code>complex128</code> for <code>float64</code> arguments.
  5881  If one of the arguments evaluates to an untyped constant, it is first
  5882  <a href="#Conversions">converted</a> to the type of the other argument.
  5883  If both arguments evaluate to untyped constants, they must be non-complex
  5884  numbers or their imaginary parts must be zero, and the return value of
  5885  the function is an untyped complex constant.
  5886  </p>
  5887  
  5888  <p>
  5889  For <code>real</code> and <code>imag</code>, the argument must be
  5890  of complex type, and the return type is the corresponding floating-point
  5891  type: <code>float32</code> for a <code>complex64</code> argument, and
  5892  <code>float64</code> for a <code>complex128</code> argument.
  5893  If the argument evaluates to an untyped constant, it must be a number,
  5894  and the return value of the function is an untyped floating-point constant.
  5895  </p>
  5896  
  5897  <p>
  5898  The <code>real</code> and <code>imag</code> functions together form the inverse of
  5899  <code>complex</code>, so for a value <code>z</code> of a complex type <code>Z</code>,
  5900  <code>z&nbsp;==&nbsp;Z(complex(real(z),&nbsp;imag(z)))</code>.
  5901  </p>
  5902  
  5903  <p>
  5904  If the operands of these functions are all constants, the return
  5905  value is a constant.
  5906  </p>
  5907  
  5908  <pre>
  5909  var a = complex(2, -2)             // complex128
  5910  const b = complex(1.0, -1.4)       // untyped complex constant 1 - 1.4i
  5911  x := float32(math.Cos(math.Pi/2))  // float32
  5912  var c64 = complex(5, -x)           // complex64
  5913  var s uint = complex(1, 0)         // untyped complex constant 1 + 0i can be converted to uint
  5914  _ = complex(1, 2&lt;&lt;s)               // illegal: 2 assumes floating-point type, cannot shift
  5915  var rl = real(c64)                 // float32
  5916  var im = imag(a)                   // float64
  5917  const c = imag(b)                  // untyped constant -1.4
  5918  _ = imag(3 &lt;&lt; s)                   // illegal: 3 assumes complex type, cannot shift
  5919  </pre>
  5920  
  5921  <h3 id="Handling_panics">Handling panics</h3>
  5922  
  5923  <p> Two built-in functions, <code>panic</code> and <code>recover</code>,
  5924  assist in reporting and handling <a href="#Run_time_panics">run-time panics</a>
  5925  and program-defined error conditions.
  5926  </p>
  5927  
  5928  <pre class="grammar">
  5929  func panic(interface{})
  5930  func recover() interface{}
  5931  </pre>
  5932  
  5933  <p>
  5934  While executing a function <code>F</code>,
  5935  an explicit call to <code>panic</code> or a <a href="#Run_time_panics">run-time panic</a>
  5936  terminates the execution of <code>F</code>.
  5937  Any functions <a href="#Defer_statements">deferred</a> by <code>F</code>
  5938  are then executed as usual.
  5939  Next, any deferred functions run by <code>F's</code> caller are run,
  5940  and so on up to any deferred by the top-level function in the executing goroutine.
  5941  At that point, the program is terminated and the error
  5942  condition is reported, including the value of the argument to <code>panic</code>.
  5943  This termination sequence is called <i>panicking</i>.
  5944  </p>
  5945  
  5946  <pre>
  5947  panic(42)
  5948  panic("unreachable")
  5949  panic(Error("cannot parse"))
  5950  </pre>
  5951  
  5952  <p>
  5953  The <code>recover</code> function allows a program to manage behavior
  5954  of a panicking goroutine.
  5955  Suppose a function <code>G</code> defers a function <code>D</code> that calls
  5956  <code>recover</code> and a panic occurs in a function on the same goroutine in which <code>G</code>
  5957  is executing.
  5958  When the running of deferred functions reaches <code>D</code>,
  5959  the return value of <code>D</code>'s call to <code>recover</code> will be the value passed to the call of <code>panic</code>.
  5960  If <code>D</code> returns normally, without starting a new
  5961  <code>panic</code>, the panicking sequence stops. In that case,
  5962  the state of functions called between <code>G</code> and the call to <code>panic</code>
  5963  is discarded, and normal execution resumes.
  5964  Any functions deferred by <code>G</code> before <code>D</code> are then run and <code>G</code>'s
  5965  execution terminates by returning to its caller.
  5966  </p>
  5967  
  5968  <p>
  5969  The return value of <code>recover</code> is <code>nil</code> if any of the following conditions holds:
  5970  </p>
  5971  <ul>
  5972  <li>
  5973  <code>panic</code>'s argument was <code>nil</code>;
  5974  </li>
  5975  <li>
  5976  the goroutine is not panicking;
  5977  </li>
  5978  <li>
  5979  <code>recover</code> was not called directly by a deferred function.
  5980  </li>
  5981  </ul>
  5982  
  5983  <p>
  5984  The <code>protect</code> function in the example below invokes
  5985  the function argument <code>g</code> and protects callers from
  5986  run-time panics raised by <code>g</code>.
  5987  </p>
  5988  
  5989  <pre>
  5990  func protect(g func()) {
  5991  	defer func() {
  5992  		log.Println("done")  // Println executes normally even if there is a panic
  5993  		if x := recover(); x != nil {
  5994  			log.Printf("run time panic: %v", x)
  5995  		}
  5996  	}()
  5997  	log.Println("start")
  5998  	g()
  5999  }
  6000  </pre>
  6001  
  6002  
  6003  <h3 id="Bootstrapping">Bootstrapping</h3>
  6004  
  6005  <p>
  6006  Current implementations provide several built-in functions useful during
  6007  bootstrapping. These functions are documented for completeness but are not
  6008  guaranteed to stay in the language. They do not return a result.
  6009  </p>
  6010  
  6011  <pre class="grammar">
  6012  Function   Behavior
  6013  
  6014  print      prints all arguments; formatting of arguments is implementation-specific
  6015  println    like print but prints spaces between arguments and a newline at the end
  6016  </pre>
  6017  
  6018  <p>
  6019  Implementation restriction: <code>print</code> and <code>println</code> need not
  6020  accept arbitrary argument types, but printing of boolean, numeric, and string
  6021  <a href="#Types">types</a> must be supported.
  6022  </p>
  6023  
  6024  <h2 id="Packages">Packages</h2>
  6025  
  6026  <p>
  6027  Go programs are constructed by linking together <i>packages</i>.
  6028  A package in turn is constructed from one or more source files
  6029  that together declare constants, types, variables and functions
  6030  belonging to the package and which are accessible in all files
  6031  of the same package. Those elements may be
  6032  <a href="#Exported_identifiers">exported</a> and used in another package.
  6033  </p>
  6034  
  6035  <h3 id="Source_file_organization">Source file organization</h3>
  6036  
  6037  <p>
  6038  Each source file consists of a package clause defining the package
  6039  to which it belongs, followed by a possibly empty set of import
  6040  declarations that declare packages whose contents it wishes to use,
  6041  followed by a possibly empty set of declarations of functions,
  6042  types, variables, and constants.
  6043  </p>
  6044  
  6045  <pre class="ebnf">
  6046  SourceFile       = PackageClause ";" { ImportDecl ";" } { TopLevelDecl ";" } .
  6047  </pre>
  6048  
  6049  <h3 id="Package_clause">Package clause</h3>
  6050  
  6051  <p>
  6052  A package clause begins each source file and defines the package
  6053  to which the file belongs.
  6054  </p>
  6055  
  6056  <pre class="ebnf">
  6057  PackageClause  = "package" PackageName .
  6058  PackageName    = identifier .
  6059  </pre>
  6060  
  6061  <p>
  6062  The PackageName must not be the <a href="#Blank_identifier">blank identifier</a>.
  6063  </p>
  6064  
  6065  <pre>
  6066  package math
  6067  </pre>
  6068  
  6069  <p>
  6070  A set of files sharing the same PackageName form the implementation of a package.
  6071  An implementation may require that all source files for a package inhabit the same directory.
  6072  </p>
  6073  
  6074  <h3 id="Import_declarations">Import declarations</h3>
  6075  
  6076  <p>
  6077  An import declaration states that the source file containing the declaration
  6078  depends on functionality of the <i>imported</i> package
  6079  (<a href="#Program_initialization_and_execution">§Program initialization and execution</a>)
  6080  and enables access to <a href="#Exported_identifiers">exported</a> identifiers
  6081  of that package.
  6082  The import names an identifier (PackageName) to be used for access and an ImportPath
  6083  that specifies the package to be imported.
  6084  </p>
  6085  
  6086  <pre class="ebnf">
  6087  ImportDecl       = "import" ( ImportSpec | "(" { ImportSpec ";" } ")" ) .
  6088  ImportSpec       = [ "." | PackageName ] ImportPath .
  6089  ImportPath       = string_lit .
  6090  </pre>
  6091  
  6092  <p>
  6093  The PackageName is used in <a href="#Qualified_identifiers">qualified identifiers</a>
  6094  to access exported identifiers of the package within the importing source file.
  6095  It is declared in the <a href="#Blocks">file block</a>.
  6096  If the PackageName is omitted, it defaults to the identifier specified in the
  6097  <a href="#Package_clause">package clause</a> of the imported package.
  6098  If an explicit period (<code>.</code>) appears instead of a name, all the
  6099  package's exported identifiers declared in that package's
  6100  <a href="#Blocks">package block</a> will be declared in the importing source
  6101  file's file block and must be accessed without a qualifier.
  6102  </p>
  6103  
  6104  <p>
  6105  The interpretation of the ImportPath is implementation-dependent but
  6106  it is typically a substring of the full file name of the compiled
  6107  package and may be relative to a repository of installed packages.
  6108  </p>
  6109  
  6110  <p>
  6111  Implementation restriction: A compiler may restrict ImportPaths to
  6112  non-empty strings using only characters belonging to
  6113  <a href="http://www.unicode.org/versions/Unicode6.3.0/">Unicode's</a>
  6114  L, M, N, P, and S general categories (the Graphic characters without
  6115  spaces) and may also exclude the characters
  6116  <code>!"#$%&amp;'()*,:;&lt;=&gt;?[\]^`{|}</code>
  6117  and the Unicode replacement character U+FFFD.
  6118  </p>
  6119  
  6120  <p>
  6121  Assume we have compiled a package containing the package clause
  6122  <code>package math</code>, which exports function <code>Sin</code>, and
  6123  installed the compiled package in the file identified by
  6124  <code>"lib/math"</code>.
  6125  This table illustrates how <code>Sin</code> is accessed in files
  6126  that import the package after the
  6127  various types of import declaration.
  6128  </p>
  6129  
  6130  <pre class="grammar">
  6131  Import declaration          Local name of Sin
  6132  
  6133  import   "lib/math"         math.Sin
  6134  import m "lib/math"         m.Sin
  6135  import . "lib/math"         Sin
  6136  </pre>
  6137  
  6138  <p>
  6139  An import declaration declares a dependency relation between
  6140  the importing and imported package.
  6141  It is illegal for a package to import itself, directly or indirectly,
  6142  or to directly import a package without
  6143  referring to any of its exported identifiers. To import a package solely for
  6144  its side-effects (initialization), use the <a href="#Blank_identifier">blank</a>
  6145  identifier as explicit package name:
  6146  </p>
  6147  
  6148  <pre>
  6149  import _ "lib/math"
  6150  </pre>
  6151  
  6152  
  6153  <h3 id="An_example_package">An example package</h3>
  6154  
  6155  <p>
  6156  Here is a complete Go package that implements a concurrent prime sieve.
  6157  </p>
  6158  
  6159  <pre>
  6160  package main
  6161  
  6162  import "fmt"
  6163  
  6164  // Send the sequence 2, 3, 4, … to channel 'ch'.
  6165  func generate(ch chan&lt;- int) {
  6166  	for i := 2; ; i++ {
  6167  		ch &lt;- i  // Send 'i' to channel 'ch'.
  6168  	}
  6169  }
  6170  
  6171  // Copy the values from channel 'src' to channel 'dst',
  6172  // removing those divisible by 'prime'.
  6173  func filter(src &lt;-chan int, dst chan&lt;- int, prime int) {
  6174  	for i := range src {  // Loop over values received from 'src'.
  6175  		if i%prime != 0 {
  6176  			dst &lt;- i  // Send 'i' to channel 'dst'.
  6177  		}
  6178  	}
  6179  }
  6180  
  6181  // The prime sieve: Daisy-chain filter processes together.
  6182  func sieve() {
  6183  	ch := make(chan int)  // Create a new channel.
  6184  	go generate(ch)       // Start generate() as a subprocess.
  6185  	for {
  6186  		prime := &lt;-ch
  6187  		fmt.Print(prime, "\n")
  6188  		ch1 := make(chan int)
  6189  		go filter(ch, ch1, prime)
  6190  		ch = ch1
  6191  	}
  6192  }
  6193  
  6194  func main() {
  6195  	sieve()
  6196  }
  6197  </pre>
  6198  
  6199  <h2 id="Program_initialization_and_execution">Program initialization and execution</h2>
  6200  
  6201  <h3 id="The_zero_value">The zero value</h3>
  6202  <p>
  6203  When storage is allocated for a <a href="#Variables">variable</a>,
  6204  either through a declaration or a call of <code>new</code>, or when
  6205  a new value is created, either through a composite literal or a call
  6206  of <code>make</code>,
  6207  and no explicit initialization is provided, the variable or value is
  6208  given a default value.  Each element of such a variable or value is
  6209  set to the <i>zero value</i> for its type: <code>false</code> for booleans,
  6210  <code>0</code> for numeric types, <code>""</code>
  6211  for strings, and <code>nil</code> for pointers, functions, interfaces, slices, channels, and maps.
  6212  This initialization is done recursively, so for instance each element of an
  6213  array of structs will have its fields zeroed if no value is specified.
  6214  </p>
  6215  <p>
  6216  These two simple declarations are equivalent:
  6217  </p>
  6218  
  6219  <pre>
  6220  var i int
  6221  var i int = 0
  6222  </pre>
  6223  
  6224  <p>
  6225  After
  6226  </p>
  6227  
  6228  <pre>
  6229  type T struct { i int; f float64; next *T }
  6230  t := new(T)
  6231  </pre>
  6232  
  6233  <p>
  6234  the following holds:
  6235  </p>
  6236  
  6237  <pre>
  6238  t.i == 0
  6239  t.f == 0.0
  6240  t.next == nil
  6241  </pre>
  6242  
  6243  <p>
  6244  The same would also be true after
  6245  </p>
  6246  
  6247  <pre>
  6248  var t T
  6249  </pre>
  6250  
  6251  <h3 id="Package_initialization">Package initialization</h3>
  6252  
  6253  <p>
  6254  Within a package, package-level variables are initialized in
  6255  <i>declaration order</i> but after any of the variables
  6256  they <i>depend</i> on.
  6257  </p>
  6258  
  6259  <p>
  6260  More precisely, a package-level variable is considered <i>ready for
  6261  initialization</i> if it is not yet initialized and either has
  6262  no <a href="#Variable_declarations">initialization expression</a> or
  6263  its initialization expression has no dependencies on uninitialized variables.
  6264  Initialization proceeds by repeatedly initializing the next package-level
  6265  variable that is earliest in declaration order and ready for initialization,
  6266  until there are no variables ready for initialization.
  6267  </p>
  6268  
  6269  <p>
  6270  If any variables are still uninitialized when this
  6271  process ends, those variables are part of one or more initialization cycles,
  6272  and the program is not valid.
  6273  </p>
  6274  
  6275  <p>
  6276  The declaration order of variables declared in multiple files is determined
  6277  by the order in which the files are presented to the compiler: Variables
  6278  declared in the first file are declared before any of the variables declared
  6279  in the second file, and so on.
  6280  </p>
  6281  
  6282  <p>
  6283  Dependency analysis does not rely on the actual values of the
  6284  variables, only on lexical <i>references</i> to them in the source,
  6285  analyzed transitively. For instance, if a variable <code>x</code>'s
  6286  initialization expression refers to a function whose body refers to
  6287  variable <code>y</code> then <code>x</code> depends on <code>y</code>.
  6288  Specifically:
  6289  </p>
  6290  
  6291  <ul>
  6292  <li>
  6293  A reference to a variable or function is an identifier denoting that
  6294  variable or function.
  6295  </li>
  6296  
  6297  <li>
  6298  A reference to a method <code>m</code> is a
  6299  <a href="#Method_values">method value</a> or
  6300  <a href="#Method_expressions">method expression</a> of the form
  6301  <code>t.m</code>, where the (static) type of <code>t</code> is
  6302  not an interface type, and the method <code>m</code> is in the
  6303  <a href="#Method_sets">method set</a> of <code>t</code>.
  6304  It is immaterial whether the resulting function value
  6305  <code>t.m</code> is invoked.
  6306  </li>
  6307  
  6308  <li>
  6309  A variable, function, or method <code>x</code> depends on a variable
  6310  <code>y</code> if <code>x</code>'s initialization expression or body
  6311  (for functions and methods) contains a reference to <code>y</code>
  6312  or to a function or method that depends on <code>y</code>.
  6313  </li>
  6314  </ul>
  6315  
  6316  <p>
  6317  Dependency analysis is performed per package; only references referring
  6318  to variables, functions, and methods declared in the current package
  6319  are considered.
  6320  </p>
  6321  
  6322  <p>
  6323  For example, given the declarations
  6324  </p>
  6325  
  6326  <pre>
  6327  var (
  6328  	a = c + b
  6329  	b = f()
  6330  	c = f()
  6331  	d = 3
  6332  )
  6333  
  6334  func f() int {
  6335  	d++
  6336  	return d
  6337  }
  6338  </pre>
  6339  
  6340  <p>
  6341  the initialization order is <code>d</code>, <code>b</code>, <code>c</code>, <code>a</code>.
  6342  </p>
  6343  
  6344  <p>
  6345  Variables may also be initialized using functions named <code>init</code>
  6346  declared in the package block, with no arguments and no result parameters.
  6347  </p>
  6348  
  6349  <pre>
  6350  func init() { … }
  6351  </pre>
  6352  
  6353  <p>
  6354  Multiple such functions may be defined per package, even within a single
  6355  source file. In the package block, the <code>init</code> identifier can
  6356  be used only to declare <code>init</code> functions, yet the identifier
  6357  itself is not <a href="#Declarations_and_scope">declared</a>. Thus
  6358  <code>init</code> functions cannot be referred to from anywhere
  6359  in a program.
  6360  </p>
  6361  
  6362  <p>
  6363  A package with no imports is initialized by assigning initial values
  6364  to all its package-level variables followed by calling all <code>init</code>
  6365  functions in the order they appear in the source, possibly in multiple files,
  6366  as presented to the compiler.
  6367  If a package has imports, the imported packages are initialized
  6368  before initializing the package itself. If multiple packages import
  6369  a package, the imported package will be initialized only once.
  6370  The importing of packages, by construction, guarantees that there
  6371  can be no cyclic initialization dependencies.
  6372  </p>
  6373  
  6374  <p>
  6375  Package initialization&mdash;variable initialization and the invocation of
  6376  <code>init</code> functions&mdash;happens in a single goroutine,
  6377  sequentially, one package at a time.
  6378  An <code>init</code> function may launch other goroutines, which can run
  6379  concurrently with the initialization code. However, initialization
  6380  always sequences
  6381  the <code>init</code> functions: it will not invoke the next one
  6382  until the previous one has returned.
  6383  </p>
  6384  
  6385  <p>
  6386  To ensure reproducible initialization behavior, build systems are encouraged
  6387  to present multiple files belonging to the same package in lexical file name
  6388  order to a compiler.
  6389  </p>
  6390  
  6391  
  6392  <h3 id="Program_execution">Program execution</h3>
  6393  <p>
  6394  A complete program is created by linking a single, unimported package
  6395  called the <i>main package</i> with all the packages it imports, transitively.
  6396  The main package must
  6397  have package name <code>main</code> and
  6398  declare a function <code>main</code> that takes no
  6399  arguments and returns no value.
  6400  </p>
  6401  
  6402  <pre>
  6403  func main() { … }
  6404  </pre>
  6405  
  6406  <p>
  6407  Program execution begins by initializing the main package and then
  6408  invoking the function <code>main</code>.
  6409  When that function invocation returns, the program exits.
  6410  It does not wait for other (non-<code>main</code>) goroutines to complete.
  6411  </p>
  6412  
  6413  <h2 id="Errors">Errors</h2>
  6414  
  6415  <p>
  6416  The predeclared type <code>error</code> is defined as
  6417  </p>
  6418  
  6419  <pre>
  6420  type error interface {
  6421  	Error() string
  6422  }
  6423  </pre>
  6424  
  6425  <p>
  6426  It is the conventional interface for representing an error condition,
  6427  with the nil value representing no error.
  6428  For instance, a function to read data from a file might be defined:
  6429  </p>
  6430  
  6431  <pre>
  6432  func Read(f *File, b []byte) (n int, err error)
  6433  </pre>
  6434  
  6435  <h2 id="Run_time_panics">Run-time panics</h2>
  6436  
  6437  <p>
  6438  Execution errors such as attempting to index an array out
  6439  of bounds trigger a <i>run-time panic</i> equivalent to a call of
  6440  the built-in function <a href="#Handling_panics"><code>panic</code></a>
  6441  with a value of the implementation-defined interface type <code>runtime.Error</code>.
  6442  That type satisfies the predeclared interface type
  6443  <a href="#Errors"><code>error</code></a>.
  6444  The exact error values that
  6445  represent distinct run-time error conditions are unspecified.
  6446  </p>
  6447  
  6448  <pre>
  6449  package runtime
  6450  
  6451  type Error interface {
  6452  	error
  6453  	// and perhaps other methods
  6454  }
  6455  </pre>
  6456  
  6457  <h2 id="System_considerations">System considerations</h2>
  6458  
  6459  <h3 id="Package_unsafe">Package <code>unsafe</code></h3>
  6460  
  6461  <p>
  6462  The built-in package <code>unsafe</code>, known to the compiler,
  6463  provides facilities for low-level programming including operations
  6464  that violate the type system. A package using <code>unsafe</code>
  6465  must be vetted manually for type safety and may not be portable.
  6466  The package provides the following interface:
  6467  </p>
  6468  
  6469  <pre class="grammar">
  6470  package unsafe
  6471  
  6472  type ArbitraryType int  // shorthand for an arbitrary Go type; it is not a real type
  6473  type Pointer *ArbitraryType
  6474  
  6475  func Alignof(variable ArbitraryType) uintptr
  6476  func Offsetof(selector ArbitraryType) uintptr
  6477  func Sizeof(variable ArbitraryType) uintptr
  6478  </pre>
  6479  
  6480  <p>
  6481  A <code>Pointer</code> is a <a href="#Pointer_types">pointer type</a> but a <code>Pointer</code>
  6482  value may not be <a href="#Address_operators">dereferenced</a>.
  6483  Any pointer or value of <a href="#Types">underlying type</a> <code>uintptr</code> can be converted to
  6484  a type of underlying type <code>Pointer</code> and vice versa.
  6485  The effect of converting between <code>Pointer</code> and <code>uintptr</code> is implementation-defined.
  6486  </p>
  6487  
  6488  <pre>
  6489  var f float64
  6490  bits = *(*uint64)(unsafe.Pointer(&amp;f))
  6491  
  6492  type ptr unsafe.Pointer
  6493  bits = *(*uint64)(ptr(&amp;f))
  6494  
  6495  var p ptr = nil
  6496  </pre>
  6497  
  6498  <p>
  6499  The functions <code>Alignof</code> and <code>Sizeof</code> take an expression <code>x</code>
  6500  of any type and return the alignment or size, respectively, of a hypothetical variable <code>v</code>
  6501  as if <code>v</code> was declared via <code>var v = x</code>.
  6502  </p>
  6503  <p>
  6504  The function <code>Offsetof</code> takes a (possibly parenthesized) <a href="#Selectors">selector</a>
  6505  <code>s.f</code>, denoting a field <code>f</code> of the struct denoted by <code>s</code>
  6506  or <code>*s</code>, and returns the field offset in bytes relative to the struct's address.
  6507  If <code>f</code> is an <a href="#Struct_types">embedded field</a>, it must be reachable
  6508  without pointer indirections through fields of the struct.
  6509  For a struct <code>s</code> with field <code>f</code>:
  6510  </p>
  6511  
  6512  <pre>
  6513  uintptr(unsafe.Pointer(&amp;s)) + unsafe.Offsetof(s.f) == uintptr(unsafe.Pointer(&amp;s.f))
  6514  </pre>
  6515  
  6516  <p>
  6517  Computer architectures may require memory addresses to be <i>aligned</i>;
  6518  that is, for addresses of a variable to be a multiple of a factor,
  6519  the variable's type's <i>alignment</i>.  The function <code>Alignof</code>
  6520  takes an expression denoting a variable of any type and returns the
  6521  alignment of the (type of the) variable in bytes.  For a variable
  6522  <code>x</code>:
  6523  </p>
  6524  
  6525  <pre>
  6526  uintptr(unsafe.Pointer(&amp;x)) % unsafe.Alignof(x) == 0
  6527  </pre>
  6528  
  6529  <p>
  6530  Calls to <code>Alignof</code>, <code>Offsetof</code>, and
  6531  <code>Sizeof</code> are compile-time constant expressions of type <code>uintptr</code>.
  6532  </p>
  6533  
  6534  <h3 id="Size_and_alignment_guarantees">Size and alignment guarantees</h3>
  6535  
  6536  <p>
  6537  For the <a href="#Numeric_types">numeric types</a>, the following sizes are guaranteed:
  6538  </p>
  6539  
  6540  <pre class="grammar">
  6541  type                                 size in bytes
  6542  
  6543  byte, uint8, int8                     1
  6544  uint16, int16                         2
  6545  uint32, int32, float32                4
  6546  uint64, int64, float64, complex64     8
  6547  complex128                           16
  6548  </pre>
  6549  
  6550  <p>
  6551  The following minimal alignment properties are guaranteed:
  6552  </p>
  6553  <ol>
  6554  <li>For a variable <code>x</code> of any type: <code>unsafe.Alignof(x)</code> is at least 1.
  6555  </li>
  6556  
  6557  <li>For a variable <code>x</code> of struct type: <code>unsafe.Alignof(x)</code> is the largest of
  6558     all the values <code>unsafe.Alignof(x.f)</code> for each field <code>f</code> of <code>x</code>, but at least 1.
  6559  </li>
  6560  
  6561  <li>For a variable <code>x</code> of array type: <code>unsafe.Alignof(x)</code> is the same as
  6562  	the alignment of a variable of the array's element type.
  6563  </li>
  6564  </ol>
  6565  
  6566  <p>
  6567  A struct or array type has size zero if it contains no fields (or elements, respectively) that have a size greater than zero. Two distinct zero-size variables may have the same address in memory.
  6568  </p>