go_spec.html 149 KB
Newer Older
1
<!-- The Go Programming Language Specification -->
2

3
<!--
4 5
Todo
[ ] clarify: two equal lowercase identifiers from different packages denote different objects
6
[ ] need language about function/method calls and parameter passing rules
Rob Pike's avatar
Rob Pike committed
7 8
[ ] last paragraph of #Assignments (constant promotion) should be elsewhere
    and mention assignment to empty interface.
Robert Griesemer's avatar
Robert Griesemer committed
9
[ ] need to say something about "scope" of selectors?
10 11
[ ] clarify what a field name is in struct declarations
    (struct{T} vs struct {T T} vs struct {t T})
12 13
[ ] need explicit language about the result type of operations
[ ] may want to have some examples for the types of shift operations
14
[ ] should string(1<<s) and float(1<<s) be valid?
15 16
[ ] should probably write something about evaluation order of statements even
	though obvious
17 18
[ ] specify iteration direction for range clause
[ ] review language on implicit dereferencing
19 20
-->

21

22
<h2 id="Introduction">Introduction</h2>
23

24
<p>
Rob Pike's avatar
Rob Pike committed
25
This is a reference manual for the Go programming language. For
26
more information and other documents, see <a href="http://golang.org/">http://golang.org</a>.
Rob Pike's avatar
Rob Pike committed
27
</p>
28

29
<p>
Rob Pike's avatar
Rob Pike committed
30
Go is a general-purpose language designed with systems programming
Rob Pike's avatar
Rob Pike committed
31
in mind. It is strongly typed and garbage-collected and has explicit
Rob Pike's avatar
Rob Pike committed
32 33 34 35 36
support for concurrent programming.  Programs are constructed from
<i>packages</i>, whose properties allow efficient management of
dependencies. The existing implementations use a traditional
compile/link model to generate executable binaries.
</p>
37

38
<p>
Rob Pike's avatar
Rob Pike committed
39 40 41
The grammar is compact and regular, allowing for easy analysis by
automatic tools such as integrated development environments.
</p>
42

43
<h2 id="Notation">Notation</h2>
Rob Pike's avatar
Rob Pike committed
44
<p>
45
The syntax is specified using Extended Backus-Naur Form (EBNF):
Rob Pike's avatar
Rob Pike committed
46
</p>
47

Rob Pike's avatar
Rob Pike committed
48
<pre class="grammar">
Robert Griesemer's avatar
Robert Griesemer committed
49
Production  = production_name "=" Expression "." .
Rob Pike's avatar
Rob Pike committed
50
Expression  = Alternative { "|" Alternative } .
51
Alternative = Term { Term } .
Rob Pike's avatar
Rob Pike committed
52 53
Term        = production_name | token [ "..." token ] | Group | Option | Repetition .
Group       = "(" Expression ")" .
54
Option      = "[" Expression "]" .
Rob Pike's avatar
Rob Pike committed
55
Repetition  = "{" Expression "}" .
56
</pre>
Robert Griesemer's avatar
Robert Griesemer committed
57

Rob Pike's avatar
Rob Pike committed
58 59 60 61
<p>
Productions are expressions constructed from terms and the following
operators, in increasing precedence:
</p>
Rob Pike's avatar
Rob Pike committed
62
<pre class="grammar">
Rob Pike's avatar
Rob Pike committed
63 64 65 66
|   alternation
()  grouping
[]  option (0 or 1 times)
{}  repetition (0 to n times)
67
</pre>
68

69
<p>
Rob Pike's avatar
Rob Pike committed
70 71
Lower-case production names are used to identify lexical tokens.
Non-terminals are in CamelCase. Lexical symbols are enclosed in
Rob Pike's avatar
Rob Pike committed
72
double quotes <code>""</code> or back quotes <code>``</code>.
Rob Pike's avatar
Rob Pike committed
73 74
</p>

75
<p>
76
The form <code>a ... b</code> represents the set of characters from
77
<code>a</code> through <code>b</code> as alternatives.
Rob Pike's avatar
Rob Pike committed
78 79
</p>

80
<h2 id="Source_code_representation">Source code representation</h2>
81

82
<p>
Robert Griesemer's avatar
Robert Griesemer committed
83 84
Source code is Unicode text encoded in
<a href="http://en.wikipedia.org/wiki/UTF-8">UTF-8</a>. The text is not
Rob Pike's avatar
Rob Pike committed
85 86 87 88 89
canonicalized, so a single accented code point is distinct from the
same character constructed from combining an accent and a letter;
those are treated as two code points.  For simplicity, this document
will use the term <i>character</i> to refer to a Unicode code point.
</p>
90
<p>
Rob Pike's avatar
Rob Pike committed
91 92 93
Each code point is distinct; for instance, upper and lower case letters
are different characters.
</p>
Russ Cox's avatar
Russ Cox committed
94
<p>
95 96
Implementation restriction: For compatibility with other tools, a
compiler may disallow the NUL character (U+0000) in the source text.
Russ Cox's avatar
Russ Cox committed
97
</p>
98

99
<h3 id="Characters">Characters</h3>
100

101
<p>
Rob Pike's avatar
Rob Pike committed
102 103
The following terms are used to denote specific Unicode character classes:
</p>
104 105 106 107 108
<pre class="ebnf">
unicode_char   = /* an arbitrary Unicode code point */ .
unicode_letter = /* a Unicode code point classified as "Letter" */ .
unicode_digit  = /* a Unicode code point classified as "Digit" */ .
</pre>
109

Rob Pike's avatar
Rob Pike committed
110
<p>
Robert Griesemer's avatar
Robert Griesemer committed
111
In <a href="http://www.unicode.org/versions/Unicode5.2.0/">The Unicode Standard 5.2</a>,
Rob Pike's avatar
Rob Pike committed
112 113 114 115 116
Section 4.5 General Category-Normative
defines a set of character categories.  Go treats
those characters in category Lu, Ll, Lt, Lm, or Lo as Unicode letters,
and those in category Nd as Unicode digits.
</p>
117

118
<h3 id="Letters_and_digits">Letters and digits</h3>
Rob Pike's avatar
Rob Pike committed
119 120

<p>
121
The underscore character <code>_</code> (U+005F) is considered a letter.
122 123
</p>
<pre class="ebnf">
124 125 126 127 128
letter        = unicode_letter | "_" .
decimal_digit = "0" ... "9" .
octal_digit   = "0" ... "7" .
hex_digit     = "0" ... "9" | "A" ... "F" | "a" ... "f" .
</pre>
Rob Pike's avatar
Rob Pike committed
129

130
<h2 id="Lexical_elements">Lexical elements</h2>
131

132
<h3 id="Comments">Comments</h3>
133

Rob Pike's avatar
Rob Pike committed
134
<p>
135
There are two forms of comments:
Rob Pike's avatar
Rob Pike committed
136 137
</p>

138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155
<ol>
<li>
<i>Line comments</i> start with the character sequence <code>//</code>
and continue through the next newline. A line comment acts like a newline.
</li>
<li>
<i>General comments</i> start with the character sequence <code>/*</code>
and continue through the character sequence <code>*/</code>. A general
comment that spans multiple lines acts like a newline, otherwise it acts
like a space.
</li>
</ol>

<p>
Comments do not nest.
</p>


156
<h3 id="Tokens">Tokens</h3>
157

Rob Pike's avatar
Rob Pike committed
158 159
<p>
Tokens form the vocabulary of the Go language.
Robert Griesemer's avatar
Robert Griesemer committed
160 161
There are four classes: <i>identifiers</i>, <i>keywords</i>, <i>operators
and delimiters</i>, and <i>literals</i>.  <i>White space</i>, formed from
162 163 164
spaces (U+0020), horizontal tabs (U+0009),
carriage returns (U+000D), and newlines (U+000A),
is ignored except as it separates tokens
Robert Griesemer's avatar
Robert Griesemer committed
165 166
that would otherwise combine into a single token. Also, a newline
may trigger the insertion of a <a href="#Semicolons">semicolon</a>.
167
While breaking the input into tokens,
Rob Pike's avatar
Rob Pike committed
168 169 170
the next token is the longest sequence of characters that form a
valid token.
</p>
171

172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187
<h3 id="Semicolons">Semicolons</h3>

<p>
The formal grammar uses semicolons <code>";"</code> as terminators in
a number of productions. Go programs may omit most of these semicolons
using the following two rules:
</p>

<ol>
<li>
<p>
When the input is broken into tokens, a semicolon is automatically inserted
into the token stream at the end of a non-blank line if the line's final
token is
</p>
<ul>
188 189
	<li>an identifier
	<li>an integer, floating-point, character, or string literal
190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212
	<li>one of the keywords
	    <code>break</code>, <code>continue</code>, <code>fallthrough</code>,
	    or <code>return</code>
	</li>
	<li>one of the operators and delimiters
	    <code>++</code>, <code>--</code>, <code>)</code>, <code>]</code>,
	    or <code>}</code>
	</li>
</ul>
</li>

<li>
To allow complex statements to occupy a single line, a semicolon
may be omitted before a closing <code>")"</code> or <code>"}"</code>.
</li>
</ol>

<p>
To reflect idiomatic use, code examples in this document elide semicolons
using these rules.
</p>


213
<h3 id="Identifiers">Identifiers</h3>
214

Rob Pike's avatar
Rob Pike committed
215 216 217 218 219
<p>
Identifiers name program entities such as variables and types.
An identifier is a sequence of one or more letters and digits.
The first character in an identifier must be a letter.
</p>
220
<pre class="ebnf">
221
identifier = letter { letter | unicode_digit } .
222 223 224 225 226 227 228
</pre>
<pre>
a
_x9
ThisVariableIsExported
αβ
</pre>
229 230

<p>
Robert Griesemer's avatar
Robert Griesemer committed
231
Some identifiers are <a href="#Predeclared_identifiers">predeclared</a>.
232 233
</p>

234

235
<h3 id="Keywords">Keywords</h3>
236

Rob Pike's avatar
Rob Pike committed
237 238 239 240 241 242 243 244 245 246
<p>
The following keywords are reserved and may not be used as identifiers.
</p>
<pre class="grammar">
break        default      func         interface    select
case         defer        go           map          struct
chan         else         goto         package      switch
const        fallthrough  if           range        type
continue     for          import       return       var
</pre>
247

248
<h3 id="Operators_and_Delimiters">Operators and Delimiters</h3>
Rob Pike's avatar
Rob Pike committed
249 250

<p>
251
The following character sequences represent <a href="#Operators">operators</a>, delimiters, and other special tokens:
Rob Pike's avatar
Rob Pike committed
252 253 254 255 256
</p>
<pre class="grammar">
+    &amp;     +=    &amp;=     &amp;&amp;    ==    !=    (    )
-    |     -=    |=     ||    &lt;     &lt;=    [    ]
*    ^     *=    ^=     &lt;-    &gt;     &gt;=    {    }
Robert Griesemer's avatar
Robert Griesemer committed
257 258
/    &lt;&lt;    /=    &lt;&lt;=    ++    =     :=    ,    ;
%    &gt;&gt;    %=    &gt;&gt;=    --    !     ...   .    :
Rob Pike's avatar
Rob Pike committed
259
     &amp;^          &amp;^=
Rob Pike's avatar
Rob Pike committed
260 261
</pre>

262
<h3 id="Integer_literals">Integer literals</h3>
Rob Pike's avatar
Rob Pike committed
263 264

<p>
265 266 267
An integer literal is a sequence of digits representing an
<a href="#Constants">integer constant</a>.
An optional prefix sets a non-decimal base: <code>0</code> for octal, <code>0x</code> or
268 269
<code>0X</code> for hexadecimal.  In hexadecimal literals, letters
<code>a-f</code> and <code>A-F</code> represent values 10 through 15.
Rob Pike's avatar
Rob Pike committed
270
</p>
271
<pre class="ebnf">
272 273 274 275
int_lit     = decimal_lit | octal_lit | hex_lit .
decimal_lit = ( "1" ... "9" ) { decimal_digit } .
octal_lit   = "0" { octal_digit } .
hex_lit     = "0" ( "x" | "X" ) hex_digit { hex_digit } .
276 277 278 279 280 281 282 283
</pre>

<pre>
42
0600
0xBadFace
170141183460469231731687303715884105727
</pre>
284

285
<h3 id="Floating-point_literals">Floating-point literals</h3>
Rob Pike's avatar
Rob Pike committed
286
<p>
287 288 289
A floating-point literal is a decimal representation of a
<a href="#Constants">floating-point constant</a>.
It has an integer part, a decimal point, a fractional part,
Rob Pike's avatar
Rob Pike committed
290
and an exponent part.  The integer and fractional part comprise
291
decimal digits; the exponent part is an <code>e</code> or <code>E</code>
Rob Pike's avatar
Rob Pike committed
292 293 294 295
followed by an optionally signed decimal exponent.  One of the
integer part or the fractional part may be elided; one of the decimal
point or the exponent may be elided.
</p>
296
<pre class="ebnf">
297 298 299 300 301
float_lit = decimals "." [ decimals ] [ exponent ] |
            decimals exponent |
            "." decimals [ exponent ] .
decimals  = decimal_digit { decimal_digit } .
exponent  = ( "e" | "E" ) [ "+" | "-" ] decimals .
302 303 304 305
</pre>

<pre>
0.
Rob Pike's avatar
Rob Pike committed
306 307
72.40
072.40  // == 72.40
308 309 310 311 312 313 314
2.71828
1.e+0
6.67428e-11
1E6
.25
.12345E+5
</pre>
315

Rob Pike's avatar
Rob Pike committed
316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340
<h3 id="Imaginary_literals">Imaginary literals</h3>
<p>
An imaginary literal is a decimal representation of the imaginary part of a
<a href="#Constants">complex constant</a>.
It consists of a
<a href="#Floating-point_literals">floating-point literal</a>
or decimal integer followed
by the lower-case letter <code>i</code>.
</p>
<pre class="ebnf">
imaginary_lit = (decimals | float_lit) "i" .
</pre>

<pre>
0i
011i  // == 11i
0.i
2.71828i
1.e+0i
6.67428e-11i
1E6i
.25i
.12345E+5i
</pre>

341

342
<h3 id="Character_literals">Character literals</h3>
343

Rob Pike's avatar
Rob Pike committed
344
<p>
345 346
A character literal represents an <a href="#Constants">integer constant</a>,
typically a Unicode code point, as one or more characters enclosed in single
Rob Pike's avatar
Rob Pike committed
347 348 349 350
quotes.  Within the quotes, any character may appear except single
quote and newline. A single quoted character represents itself,
while multi-character sequences beginning with a backslash encode
values in various formats.
Rob Pike's avatar
Rob Pike committed
351
</p>
352
<p>
Rob Pike's avatar
Rob Pike committed
353 354 355
The simplest form represents the single character within the quotes;
since Go source text is Unicode characters encoded in UTF-8, multiple
UTF-8-encoded bytes may represent a single integer value.  For
356 357 358 359
instance, the literal <code>'a'</code> holds a single byte representing
a literal <code>a</code>, Unicode U+0061, value <code>0x61</code>, while
<code>'ä'</code> holds two bytes (<code>0xc3</code> <code>0xa4</code>) representing
a literal <code>a</code>-dieresis, U+00E4, value <code>0xe4</code>.
Rob Pike's avatar
Rob Pike committed
360
</p>
361
<p>
Rob Pike's avatar
Rob Pike committed
362 363
Several backslash escapes allow arbitrary values to be represented
as ASCII text.  There are four ways to represent the integer value
364 365 366 367
as a numeric constant: <code>\x</code> followed by exactly two hexadecimal
digits; <code>\u</code> followed by exactly four hexadecimal digits;
<code>\U</code> followed by exactly eight hexadecimal digits, and a
plain backslash <code>\</code> followed by exactly three octal digits.
Rob Pike's avatar
Rob Pike committed
368 369 370
In each case the value of the literal is the value represented by
the digits in the corresponding base.
</p>
371
<p>
Rob Pike's avatar
Rob Pike committed
372 373
Although these representations all result in an integer, they have
different valid ranges.  Octal escapes must represent a value between
Rob Pike's avatar
Rob Pike committed
374 375
0 and 255 inclusive.  Hexadecimal escapes satisfy this condition
by construction. The escapes <code>\u</code> and <code>\U</code>
Rob Pike's avatar
Rob Pike committed
376
represent Unicode code points so within them some values are illegal,
377
in particular those above <code>0x10FFFF</code> and surrogate halves.
Rob Pike's avatar
Rob Pike committed
378
</p>
379
<p>
Rob Pike's avatar
Rob Pike committed
380 381 382 383 384 385 386 387 388 389 390 391 392 393 394
After a backslash, certain single-character escapes represent special values:
</p>
<pre class="grammar">
\a   U+0007 alert or bell
\b   U+0008 backspace
\f   U+000C form feed
\n   U+000A line feed or newline
\r   U+000D carriage return
\t   U+0009 horizontal tab
\v   U+000b vertical tab
\\   U+005c backslash
\'   U+0027 single quote  (valid escape only within character literals)
\"   U+0022 double quote  (valid escape only within string literals)
</pre>
<p>
395
All other sequences starting with a backslash are illegal inside character literals.
Rob Pike's avatar
Rob Pike committed
396
</p>
397
<pre class="ebnf">
Rob Pike's avatar
Rob Pike committed
398 399 400
char_lit         = "'" ( unicode_value | byte_value ) "'" .
unicode_value    = unicode_char | little_u_value | big_u_value | escaped_char .
byte_value       = octal_byte_value | hex_byte_value .
401 402 403 404
octal_byte_value = `\` octal_digit octal_digit octal_digit .
hex_byte_value   = `\` "x" hex_digit hex_digit .
little_u_value   = `\` "u" hex_digit hex_digit hex_digit hex_digit .
big_u_value      = `\` "U" hex_digit hex_digit hex_digit hex_digit
Rob Pike's avatar
Rob Pike committed
405
                           hex_digit hex_digit hex_digit hex_digit .
406
escaped_char     = `\` ( "a" | "b" | "f" | "n" | "r" | "t" | "v" | `\` | "'" | `"` ) .
Rob Pike's avatar
Rob Pike committed
407
</pre>
408

409 410 411 412 413 414 415 416 417 418 419 420 421
<pre>
'a'
'ä'
'本'
'\t'
'\000'
'\007'
'\377'
'\x07'
'\xff'
'\u12e4'
'\U00101234'
</pre>
422 423


424
<h3 id="String_literals">String literals</h3>
Rob Pike's avatar
Rob Pike committed
425 426

<p>
427 428 429
A string literal represents a <a href="#Constants">string constant</a>
obtained from concatenating a sequence of characters. There are two forms:
raw string literals and interpreted string literals.
Rob Pike's avatar
Rob Pike committed
430 431 432
</p>
<p>
Raw string literals are character sequences between back quotes
433
<code>``</code>.  Within the quotes, any character is legal except
434 435 436 437
back quote. The value of a raw string literal is the
string composed of the uninterpreted characters between the quotes;
in particular, backslashes have no special meaning and the string may
span multiple lines.
Rob Pike's avatar
Rob Pike committed
438 439 440
</p>
<p>
Interpreted string literals are character sequences between double
441 442
quotes <code>&quot;&quot;</code>. The text between the quotes,
which may not span multiple lines, forms the
Rob Pike's avatar
Rob Pike committed
443
value of the literal, with backslash escapes interpreted as they
444
are in character literals (except that <code>\'</code> is illegal and
Robert Griesemer's avatar
Robert Griesemer committed
445 446
<code>\"</code> is legal).  The three-digit octal (<code>\</code><i>nnn</i>)
and two-digit hexadecimal (<code>\x</code><i>nn</i>) escapes represent individual
Rob Pike's avatar
Rob Pike committed
447 448
<i>bytes</i> of the resulting string; all other escapes represent
the (possibly multi-byte) UTF-8 encoding of individual <i>characters</i>.
449 450 451
Thus inside a string literal <code>\377</code> and <code>\xFF</code> represent
a single byte of value <code>0xFF</code>=255, while <code>ÿ</code>,
<code>\u00FF</code>, <code>\U000000FF</code> and <code>\xc3\xbf</code> represent
452
the two bytes <code>0xc3</code> <code>0xbf</code> of the UTF-8 encoding of character
Rob Pike's avatar
Rob Pike committed
453 454 455
U+00FF.
</p>

456
<pre class="ebnf">
Rob Pike's avatar
Rob Pike committed
457 458
string_lit             = raw_string_lit | interpreted_string_lit .
raw_string_lit         = "`" { unicode_char } "`" .
459
interpreted_string_lit = `"` { unicode_value | byte_value } `"` .
460
</pre>
461

462
<pre>
463 464 465
`abc`  // same as "abc"
`\n
\n`    // same as "\\n\n\\n"
466 467 468 469 470 471 472
"\n"
""
"Hello, world!\n"
"日本語"
"\u65e5本\U00008a9e"
"\xff\u00FF"
</pre>
473

Rob Pike's avatar
Rob Pike committed
474
<p>
475
These examples all represent the same string:
Rob Pike's avatar
Rob Pike committed
476
</p>
477

478
<pre>
Rob Pike's avatar
Rob Pike committed
479 480 481 482
"日本語"                                 // UTF-8 input text
`日本語`                                 // UTF-8 input text as a raw literal
"\u65e5\u672c\u8a9e"                    // The explicit Unicode code points
"\U000065e5\U0000672c\U00008a9e"        // The explicit Unicode code points
483 484
"\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e"  // The explicit UTF-8 bytes
</pre>
485

486
<p>
487 488 489 490 491
If the source code represents a character as two code points, such as
a combining form involving an accent and a letter, the result will be
an error if placed in a character literal (it is not a single code
point), and will appear as two code points if placed in a string
literal.
Rob Pike's avatar
Rob Pike committed
492
</p>
493

494 495 496

<h2 id="Constants">Constants</h2>

Rob Pike's avatar
Rob Pike committed
497 498 499 500
<p>There are <i>boolean constants</i>, <i>integer constants</i>,
<i>floating-point constants</i>, <i>complex constants</i>,
and <i>string constants</i>. Integer, floating-point,
and complex constants are
501 502 503 504 505 506 507
collectively called <i>numeric constants</i>.
</p>

<p>
A constant value is represented by an
<a href="#Integer_literals">integer</a>,
<a href="#Floating-point_literals">floating-point</a>,
Rob Pike's avatar
Rob Pike committed
508
<a href="#Imaginary_literals">imaginary</a>,
509 510 511 512 513 514
<a href="#Character_literals">character</a>, or
<a href="#String_literals">string</a> literal,
an identifier denoting a constant,
a <a href="#Constant_expressions">constant expression</a>, or
the result value of some built-in functions such as <code>unsafe.Sizeof</code>
and <code>cap</code> or <code>len</code> applied to an array,
Rob Pike's avatar
Rob Pike committed
515 516 517
<code>len</code> applied to a string constant,
<code>real</code> and <code>imag</code> applied to a complex constant
and <code>cmplx</code> applied to numeric constants.
518 519 520 521
The boolean truth values are represented by the predeclared constants
<code>true</code> and <code>false</code>. The predeclared identifier
<a href="#Iota">iota</a> denotes an integer constant.
</p>
Rob Pike's avatar
Rob Pike committed
522

Rob Pike's avatar
Rob Pike committed
523 524 525 526 527 528
<p>
In general, complex constants are a form of
<a href="#Constant_expressions">constant expression</a>
and are discussed in that section.
</p>

Rob Pike's avatar
Rob Pike committed
529
<p>
Robert Griesemer's avatar
Robert Griesemer committed
530
Numeric constants represent values of arbitrary precision and do not overflow.
Rob Pike's avatar
Rob Pike committed
531 532
</p>

533 534 535 536 537 538 539 540 541 542 543 544 545 546 547
<p>
Constants may be <a href="#Types">typed</a> or untyped.
Literal constants, <code>true</code>, <code>false</code>, <code>iota</code>,
and certain <a href="#Constant_expressions">constant expressions</a>
containing only untyped constant operands are untyped.
</p>

<p>
A constant may be given a type explicitly by a <a href="#Constant_declarations">constant declaration</a>
or <a href="#Conversions">conversion</a>, or implicitly when used in a
<a href="#Variable_declarations">variable declaration</a> or an
<a href="#Assignments">assignment</a> or as an
operand in an <a href="#Expressions">expression</a>.
It is an error if the constant value
cannot be accurately represented as a value of the respective type.
Robert Griesemer's avatar
Robert Griesemer committed
548
For instance, <code>3.0</code> can be given any integer or any
549 550 551
floating-point type, while <code>2147483648.0</code> (equal to <code>1&lt;&lt;31</code>)
can be given the types <code>float32</code>, <code>float64</code>, or <code>uint32</code> but
not <code>int32</code> or <code>string</code>.
552 553
</p>

554 555 556 557 558 559 560 561 562 563
<p>
There are no constants denoting the IEEE-754 infinity and not-a-number values,
but the <a href="/pkg/math/"><code>math</code> package</a>'s
<a href="/pkg/math/#Inf">Inf</a>,
<a href="/pkg/math/#NaN">NaN</a>,
<a href="/pkg/math/#IsInf">IsInf</a>, and
<a href="/pkg/math/#IsNaN">IsNaN</a>
functions return and test for those values at run time.
</p>

564 565 566 567 568 569 570
<p>
Implementation restriction: A compiler may implement numeric constants by choosing
an internal representation with at least twice as many bits as any machine type;
for floating-point values, both the mantissa and exponent must be twice as large.
</p>


571
<h2 id="Types">Types</h2>
572

573
<p>
Robert Griesemer's avatar
Robert Griesemer committed
574 575
A type determines the set of values and operations specific to values of that
type.  A type may be specified by a (possibly qualified) <i>type name</i>
576
<a href="#Qualified_identifier">Qualified identifier</a>, §<a href="#Type_declarations">Type declarations</a>) or a <i>type literal</i>,
Robert Griesemer's avatar
Robert Griesemer committed
577
which composes a new type from previously declared types.
Rob Pike's avatar
Rob Pike committed
578
</p>
579

580
<pre class="ebnf">
Rob Pike's avatar
Rob Pike committed
581 582 583 584
Type      = TypeName | TypeLit | "(" Type ")" .
TypeName  = QualifiedIdent.
TypeLit   = ArrayType | StructType | PointerType | FunctionType | InterfaceType |
	    SliceType | MapType | ChannelType .
585
</pre>
586

587
<p>
588 589 590 591 592
Named instances of the boolean, numeric, and string types are
<a href="#Predeclared_identifiers">predeclared</a>.
<i>Composite types</i>&mdash;array, struct, pointer, function,
interface, slice, map, and channel types&mdash;may be constructed using
type literals.
Rob Pike's avatar
Rob Pike committed
593
</p>
594

Rob Pike's avatar
Rob Pike committed
595
<p>
596
A type may have a <i>method set</i> associated with it
597
<a href="#Interface_types">Interface types</a>, §<a href="#Method_declarations">Method declarations</a>).
598
The method set of an <a href="#Interface_types">interface type</a> is its interface.
Robert Griesemer's avatar
Robert Griesemer committed
599
The method set of any other named type <code>T</code>
600
consists of all methods with receiver type <code>T</code>.
Robert Griesemer's avatar
Robert Griesemer committed
601 602 603 604
The method set of the corresponding pointer type <code>*T</code>
is the set of all methods with receiver <code>*T</code> or <code>T</code>
(that is, it also contains the method set of <code>T</code>).
Any other type has an empty method set.
605
In a method set, each method must have a unique name.
Rob Pike's avatar
Rob Pike committed
606 607 608 609
</p>
<p>
The <i>static type</i> (or just <i>type</i>) of a variable is the
type defined by its declaration.  Variables of interface type
610
also have a distinct <i>dynamic type</i>, which
Rob Pike's avatar
Rob Pike committed
611
is the actual type of the value stored in the variable at run-time.
612 613
The dynamic type may vary during execution but is always assignment compatible
to the static type of the interface variable.  For non-interface
Rob Pike's avatar
Rob Pike committed
614 615
types, the dynamic type is always the static type.
</p>
Robert Griesemer's avatar
Robert Griesemer committed
616

617

618 619 620 621 622 623
<h3 id="Boolean_types">Boolean types</h3>

A <i>boolean type</i> represents the set of Boolean truth values
denoted by the predeclared constants <code>true</code>
and <code>false</code>. The predeclared boolean type is <code>bool</code>.

624

625
<h3 id="Numeric_types">Numeric types</h3>
626

Rob Pike's avatar
Rob Pike committed
627
<p>
628 629
A <i>numeric type</i> represents sets of integer or floating-point values.
The predeclared architecture-independent numeric types are:
Rob Pike's avatar
Rob Pike committed
630
</p>
631

Rob Pike's avatar
Rob Pike committed
632
<pre class="grammar">
Rob Pike's avatar
Rob Pike committed
633 634 635 636 637 638 639 640 641
uint8       the set of all unsigned  8-bit integers (0 to 255)
uint16      the set of all unsigned 16-bit integers (0 to 65535)
uint32      the set of all unsigned 32-bit integers (0 to 4294967295)
uint64      the set of all unsigned 64-bit integers (0 to 18446744073709551615)

int8        the set of all signed  8-bit integers (-128 to 127)
int16       the set of all signed 16-bit integers (-32768 to 32767)
int32       the set of all signed 32-bit integers (-2147483648 to 2147483647)
int64       the set of all signed 64-bit integers (-9223372036854775808 to 9223372036854775807)
642

Rob Pike's avatar
Rob Pike committed
643 644
float32     the set of all IEEE-754 32-bit floating-point numbers
float64     the set of all IEEE-754 64-bit floating-point numbers
645

Rob Pike's avatar
Rob Pike committed
646 647
complex64   the set of all complex numbers with float32 real and imaginary parts
complex128  the set of all complex numbers with float64 real and imaginary parts
Rob Pike's avatar
Rob Pike committed
648

649
byte        familiar alias for uint8
650
</pre>
651

Rob Pike's avatar
Rob Pike committed
652
<p>
Robert Griesemer's avatar
Robert Griesemer committed
653 654
The value of an <i>n</i>-bit integer is <i>n</i> bits wide and represented using
<a href="http://en.wikipedia.org/wiki/Two's_complement">two's complement arithmetic</a>.
Rob Pike's avatar
Rob Pike committed
655
</p>
656

Rob Pike's avatar
Rob Pike committed
657
<p>
658
There is also a set of predeclared numeric types with implementation-specific sizes:
Rob Pike's avatar
Rob Pike committed
659
</p>
660

661
<pre class="grammar">
662 663 664
uint     either 32 or 64 bits
int      either 32 or 64 bits
float    either 32 or 64 bits
Rob Pike's avatar
Rob Pike committed
665
complex  real and imaginary parts have type float
666
uintptr  an unsigned integer large enough to store the uninterpreted bits of a pointer value
667
</pre>
668

669
<p>
670 671 672
To avoid portability issues all numeric types are distinct except
<code>byte</code>, which is an alias for <code>uint8</code>.
Conversions
673
are required when incompatible numeric types are mixed in an expression
Rob Pike's avatar
Rob Pike committed
674
or assignment. For instance, <code>int32</code> and <code>int</code>
675
are not the same type even though they may have the same size on a
Rob Pike's avatar
Rob Pike committed
676
particular architecture.
677

678

679
<h3 id="String_types">String types</h3>
680

681
<p>
682
A <i>string type</i> represents the set of string values.
Rob Pike's avatar
Rob Pike committed
683 684
Strings behave like arrays of bytes but are immutable: once created,
it is impossible to change the contents of a string.
685
The predeclared string type is <code>string</code>.
Rob Pike's avatar
Rob Pike committed
686 687 688

<p>
The elements of strings have type <code>byte</code> and may be
689
accessed using the usual <a href="#Indexes">indexing operations</a>.  It is
Rob Pike's avatar
Rob Pike committed
690 691
illegal to take the address of such an element; if
<code>s[i]</code> is the <i>i</i>th byte of a
692 693
string, <code>&amp;s[i]</code> is invalid.  The length of string
<code>s</code> can be discovered using the built-in function
694
<code>len</code>. The length is a compile-time constant if <code>s</code>
695
is a string literal.
Rob Pike's avatar
Rob Pike committed
696
</p>
697 698


699
<h3 id="Array_types">Array types</h3>
Russ Cox's avatar
Russ Cox committed
700 701 702

<p>
An array is a numbered sequence of elements of a single
703 704
type, called the element type.
The number of elements is called the length and is never
Russ Cox's avatar
Russ Cox committed
705 706 707
negative.
</p>

708
<pre class="ebnf">
Russ Cox's avatar
Russ Cox committed
709 710
ArrayType   = "[" ArrayLength "]" ElementType .
ArrayLength = Expression .
711
ElementType = Type .
Russ Cox's avatar
Russ Cox committed
712 713 714
</pre>

<p>
Robert Griesemer's avatar
Robert Griesemer committed
715
The length is part of the array's type and must be a
Robert Griesemer's avatar
Robert Griesemer committed
716
<a href="#Constant_expressions">constant expression</a> that evaluates to a non-negative
Russ Cox's avatar
Russ Cox committed
717 718 719
integer value.  The length of array <code>a</code> can be discovered
using the built-in function <code>len(a)</code>, which is a
compile-time constant.  The elements can be indexed by integer
720
indices 0 through the <code>len(a)-1</code><a href="#Indexes">Indexes</a>).
721 722
Array types are always one-dimensional but may be composed to form
multi-dimensional types.
Russ Cox's avatar
Russ Cox committed
723 724 725 726 727 728
</p>

<pre>
[32]byte
[2*N] struct { x, y int32 }
[1000]*float64
729 730
[3][5]int
[2][2][2]float64  // same as [2]([2]([2]float64))
Russ Cox's avatar
Russ Cox committed
731 732
</pre>

733
<h3 id="Slice_types">Slice types</h3>
Russ Cox's avatar
Russ Cox committed
734 735 736 737 738 739 740 741

<p>
A slice is a reference to a contiguous segment of an array and
contains a numbered sequence of elements from that array.  A slice
type denotes the set of all slices of arrays of its element type.
A slice value may be <code>nil</code>.
</p>

742
<pre class="ebnf">
Russ Cox's avatar
Russ Cox committed
743 744 745 746 747 748 749 750
SliceType = "[" "]" ElementType .
</pre>

<p>
Like arrays, slices are indexable and have a length.  The length of a
slice <code>s</code> can be discovered by the built-in function
<code>len(s)</code>; unlike with arrays it may change during
execution.  The elements can be addressed by integer indices 0
751
through <code>len(s)-1</code><a href="#Indexes">Indexes</a>).  The slice index of a
Russ Cox's avatar
Russ Cox committed
752 753 754 755 756
given element may be less than the index of the same element in the
underlying array.
</p>
<p>
A slice, once initialized, is always associated with an underlying
Rob Pike's avatar
Rob Pike committed
757
array that holds its elements.  A slice therefore shares storage
Russ Cox's avatar
Russ Cox committed
758 759 760 761 762
with its array and with other slices of the same array; by contrast,
distinct arrays always represent distinct storage.
</p>
<p>
The array underlying a slice may extend past the end of the slice.
763
The <i>capacity</i> is a measure of that extent: it is the sum of
Russ Cox's avatar
Russ Cox committed
764 765
the length of the slice and the length of the array beyond the slice;
a slice of length up to that capacity can be created by `slicing' a new
766
one from the original slice (§<a href="#Slices">Slices</a>).
Russ Cox's avatar
Russ Cox committed
767
The capacity of a slice <code>a</code> can be discovered using the
768 769
built-in function <code>cap(a)</code> and the relationship between
<code>len()</code> and <code>cap()</code> is:
Russ Cox's avatar
Russ Cox committed
770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787
</p>

<pre>
0 <= len(a) <= cap(a)
</pre>

<p>
The value of an uninitialized slice is <code>nil</code>.
The length and capacity of a <code>nil</code> slice
are 0. A new, initialized slice value for a given element type <code>T</code> is
made using the built-in function <code>make</code>, which takes a slice type
and parameters specifying the length and optionally the capacity:
</p>

<pre>
make([]T, length)
make([]T, length, capacity)
</pre>
788

Russ Cox's avatar
Russ Cox committed
789 790
<p>
The <code>make()</code> call allocates a new, hidden array to which the returned
Rob Pike's avatar
Rob Pike committed
791
slice value refers. That is, executing
Russ Cox's avatar
Russ Cox committed
792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807
</p>

<pre>
make([]T, length, capacity)
</pre>

<p>
produces the same slice as allocating an array and slicing it, so these two examples
result in the same slice:
</p>

<pre>
make([]int, 50, 100)
new([100]int)[0:50]
</pre>

808 809 810 811 812 813 814
<p>
Like arrays, slices are always one-dimensional but may be composed to construct
higher-dimensional objects.
With arrays of arrays, the inner arrays are, by construction, always the same length;
however with slices of slices (or arrays of slices), the lengths may vary dynamically.
Moreover, the inner slices must be allocated individually (with <code>make</code>).
</p>
Russ Cox's avatar
Russ Cox committed
815

816
<h3 id="Struct_types">Struct types</h3>
817

Rob Pike's avatar
Rob Pike committed
818
<p>
819 820 821 822 823
A struct is a sequence of named elements, called fields, each of which has a
name and a type. Field names may be specified explicitly (IdentifierList) or
implicitly (AnonymousField).
Within a struct, non-<a href="#Blank_identifier">blank</a> field names must
be unique.
Rob Pike's avatar
Rob Pike committed
824
</p>
825

826
<pre class="ebnf">
827
StructType     = "struct" "{" { FieldDecl ";" } "}" .
828 829
FieldDecl      = (IdentifierList Type | AnonymousField) [ Tag ] .
AnonymousField = [ "*" ] TypeName .
830
Tag            = string_lit .
831
</pre>
832

833
<pre>
834 835
// An empty struct.
struct {}
836

Robert Griesemer's avatar
Robert Griesemer committed
837
// A struct with 6 fields.
838
struct {
839 840 841 842 843
	x, y int
	u float
	_ float  // padding
	A *[]int
	F func()
844 845
}
</pre>
846

Rob Pike's avatar
Rob Pike committed
847
<p>
848
A field declared with a type but no explicit field name is an <i>anonymous field</i>.
Rob Pike's avatar
Rob Pike committed
849
Such a field type must be specified as
850
a type name <code>T</code> or as a pointer to a type name <code>*T</code>,
851
and <code>T</code> itself may not be
852
a pointer type. The unqualified type name acts as the field name.
Rob Pike's avatar
Rob Pike committed
853
</p>
854

855 856 857
<pre>
// A struct with four anonymous fields of type T1, *T2, P.T3 and *P.T4
struct {
858 859 860 861 862
	T1        // field name is T1
	*T2       // field name is T2
	P.T3      // field name is T3
	*P.T4     // field name is T4
	x, y int  // field names are x and y
863
}
864 865
</pre>

Rob Pike's avatar
Rob Pike committed
866
<p>
867 868
The following declaration is illegal because field names must be unique
in a struct type:
Rob Pike's avatar
Rob Pike committed
869
</p>
870

871
<pre>
872
struct {
873 874 875
	T         // conflicts with anonymous field *T and *P.T
	*T        // conflicts with anonymous field T and *P.T
	*P.T      // conflicts with anonymous field T and *T
876
}
877
</pre>
878

879
<p>
880 881
Fields and methods (§<a href="#Method_declarations">Method declarations</a>) of an anonymous field are
promoted to be ordinary fields and methods of the struct (§<a href="#Selectors">Selectors</a>).
Robert Griesemer's avatar
Robert Griesemer committed
882 883
The following rules apply for a struct type named <code>S</code> and
a type named <code>T</code>:
Rob Pike's avatar
Rob Pike committed
884
</p>
Robert Griesemer's avatar
Robert Griesemer committed
885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900
<ul>
	<li>If <code>S</code> contains an anonymous field <code>T</code>, the
	    method set of <code>S</code> includes the method set of <code>T</code>.
	</li>

	<li>If <code>S</code> contains an anonymous field <code>*T</code>, the
	    method set of <code>S</code> includes the method set of <code>*T</code>
	    (which itself includes the method set of <code>T</code>).
	</li>

	<li>If <code>S</code> contains an anonymous field <code>T</code> or
	    <code>*T</code>, the method set of <code>*S</code> includes the
	    method set of <code>*T</code> (which itself includes the method
	    set of <code>T</code>).
	</li>
</ul>
Rob Pike's avatar
Rob Pike committed
901
<p>
Robert Griesemer's avatar
Robert Griesemer committed
902
A field declaration may be followed by an optional string literal <i>tag</i>,
903
which becomes an attribute for all the fields in the corresponding
Rob Pike's avatar
Rob Pike committed
904
field declaration. The tags are made
905
visible through a <a href="#Package_unsafe">reflection interface</a>
Rob Pike's avatar
Rob Pike committed
906 907
but are otherwise ignored.
</p>
908

909
<pre>
Rob Pike's avatar
Rob Pike committed
910
// A struct corresponding to the TimeStamp protocol buffer.
Rob Pike's avatar
Rob Pike committed
911
// The tag strings define the protocol buffer field numbers.
912
struct {
913 914 915
	microsec  uint64 "field 1"
	serverIP6 uint64 "field 2"
	process   string "field 3"
916
}
917
</pre>
918

919
<h3 id="Pointer_types">Pointer types</h3>
920

Rob Pike's avatar
Rob Pike committed
921
<p>
922
A pointer type denotes the set of all pointers to variables of a given
923
type, called the <i>base type</i> of the pointer.
Rob Pike's avatar
Rob Pike committed
924
A pointer value may be <code>nil</code>.
Rob Pike's avatar
Rob Pike committed
925
</p>
926

927
<pre class="ebnf">
928 929
PointerType = "*" BaseType .
BaseType = Type .
930
</pre>
931

932
<pre>
933
*int
Rob Pike's avatar
Rob Pike committed
934
*map[string] *chan int
935
</pre>
936

937
<h3 id="Function_types">Function types</h3>
938

Rob Pike's avatar
Rob Pike committed
939
<p>
940
A function type denotes the set of all functions with the same parameter
Rob Pike's avatar
Rob Pike committed
941 942 943
and result types.
A function value may be <code>nil</code>.
</p>
944

945
<pre class="ebnf">
Rob Pike's avatar
Rob Pike committed
946 947
FunctionType   = "func" Signature .
Signature      = Parameters [ Result ] .
948
Result         = Parameters | Type .
949
Parameters     = "(" [ ParameterList [ "," ] ] ")" .
Rob Pike's avatar
Rob Pike committed
950
ParameterList  = ParameterDecl { "," ParameterDecl } .
951
ParameterDecl  = [ IdentifierList ] ( Type | "..." [ Type ] ) .
952 953 954
</pre>

<p>
Rob Pike's avatar
Rob Pike committed
955 956 957 958 959
Within a list of parameters or results, the names (IdentifierList)
must either all be present or all be absent. If present, each name
stands for one item (parameter or result) of the specified type; if absent, each
type stands for one item of that type.  Parameter and result
lists are always parenthesized except that if there is exactly
Russ Cox's avatar
Russ Cox committed
960
one unnamed result it may written as an unparenthesized type.
Rob Pike's avatar
Rob Pike committed
961 962 963
</p>
<p>
For the last parameter only, instead of a type one may write
964 965 966 967 968 969
<code>...</code> or <code>...  T</code> to indicate that the function
may be invoked with zero or more additional arguments.  If the type
<code>T</code> is present in the parameter declaration, the additional
arguments must all be
<a href="#Assignment_compatibility">assignment compatible</a>
with type <code>T</code>; otherwise they may be of any type.
Rob Pike's avatar
Rob Pike committed
970
</p>
971 972

<pre>
Russ Cox's avatar
Russ Cox committed
973 974 975 976
func()
func(x int)
func() int
func(string, float, ...)
977
func(prefix string, values ... int)
Russ Cox's avatar
Russ Cox committed
978 979 980 981 982
func(a, b int, z float) bool
func(a, b int, z float) (bool)
func(a, b int, z float, opt ...) (success bool)
func(int, int, float) (float, *[]int)
func(n int) func(p *T)
983 984 985
</pre>


986
<h3 id="Interface_types">Interface types</h3>
987

Rob Pike's avatar
Rob Pike committed
988
<p>
989
An interface type specifies a <a href="#Types">method set</a> called its <i>interface</i>.
Robert Griesemer's avatar
Robert Griesemer committed
990 991 992
A variable of interface type can store a value of any type with a method set
that is any superset of the interface. Such a type is said to
<i>implement the interface</i>. An interface value may be <code>nil</code>.
Rob Pike's avatar
Rob Pike committed
993
</p>
994

995
<pre class="ebnf">
996
InterfaceType      = "interface" "{" { MethodSpec ";" } "}" .
997 998
MethodSpec         = MethodName Signature | InterfaceTypeName .
MethodName         = identifier .
Rob Pike's avatar
Rob Pike committed
999
InterfaceTypeName  = TypeName .
1000
</pre>
1001

1002 1003 1004 1005
<p>
As with all method sets, in an interface type, each method must have a unique name.
</p>

1006
<pre>
Rob Pike's avatar
Rob Pike committed
1007
// A simple File interface
1008
interface {
1009 1010 1011
	Read(b Buffer) bool
	Write(b Buffer) bool
	Close()
1012 1013
}
</pre>
1014

Rob Pike's avatar
Rob Pike committed
1015
<p>
Robert Griesemer's avatar
Robert Griesemer committed
1016
More than one type may implement an interface.
Rob Pike's avatar
Rob Pike committed
1017
For instance, if two types <code>S1</code> and <code>S2</code>
Robert Griesemer's avatar
Robert Griesemer committed
1018
have the method set
Rob Pike's avatar
Rob Pike committed
1019
</p>
1020

1021
<pre>
1022 1023 1024
func (p T) Read(b Buffer) bool { return ... }
func (p T) Write(b Buffer) bool { return ... }
func (p T) Close() { ... }
1025
</pre>
1026

Rob Pike's avatar
Rob Pike committed
1027 1028 1029 1030 1031 1032
<p>
(where <code>T</code> stands for either <code>S1</code> or <code>S2</code>)
then the <code>File</code> interface is implemented by both <code>S1</code> and
<code>S2</code>, regardless of what other methods
<code>S1</code> and <code>S2</code> may have or share.
</p>
1033

Rob Pike's avatar
Rob Pike committed
1034 1035 1036 1037 1038
<p>
A type implements any interface comprising any subset of its methods
and may therefore implement several distinct interfaces. For
instance, all types implement the <i>empty interface</i>:
</p>
1039

1040
<pre>
1041
interface{}
1042
</pre>
1043

Rob Pike's avatar
Rob Pike committed
1044 1045
<p>
Similarly, consider this interface specification,
Robert Griesemer's avatar
Robert Griesemer committed
1046
which appears within a <a href="#Type_declarations">type declaration</a>
Rob Pike's avatar
Rob Pike committed
1047 1048
to define an interface called <code>Lock</code>:
</p>
1049 1050 1051

<pre>
type Lock interface {
1052 1053
	Lock()
	Unlock()
1054
}
1055
</pre>
1056

Rob Pike's avatar
Rob Pike committed
1057 1058 1059
<p>
If <code>S1</code> and <code>S2</code> also implement
</p>
Robert Griesemer's avatar
Robert Griesemer committed
1060

1061 1062 1063 1064 1065
<pre>
func (p T) Lock() { ... }
func (p T) Unlock() { ... }
</pre>

1066
<p>
Rob Pike's avatar
Rob Pike committed
1067 1068 1069 1070 1071 1072
they implement the <code>Lock</code> interface as well
as the <code>File</code> interface.
</p>
<p>
An interface may contain an interface type name <code>T</code>
in place of a method specification.
1073
The effect is equivalent to enumerating the methods of <code>T</code> explicitly
Rob Pike's avatar
Rob Pike committed
1074 1075
in the interface.
</p>
1076

1077 1078
<pre>
type ReadWrite interface {
1079 1080
	Read(b Buffer) bool
	Write(b Buffer) bool
1081
}
1082

1083
type File interface {
1084 1085 1086
	ReadWrite  // same as enumerating the methods in ReadWrite
	Lock       // same as enumerating the methods in Lock
	Close()
1087 1088
}
</pre>
1089

1090
<h3 id="Map_types">Map types</h3>
1091

Rob Pike's avatar
Rob Pike committed
1092 1093
<p>
A map is an unordered group of elements of one type, called the
1094
element type, indexed by a set of unique <i>keys</i> of another type,
1095
called the key type.
Rob Pike's avatar
Rob Pike committed
1096 1097 1098
A map value may be <code>nil</code>.

</p>
1099

1100
<pre class="ebnf">
1101
MapType     = "map" "[" KeyType "]" ElementType .
1102
KeyType     = Type .
1103
</pre>
1104

1105
<p>
Rob Pike's avatar
Rob Pike committed
1106
The comparison operators <code>==</code> and <code>!=</code>
1107
<a href="#Comparison_operators">Comparison operators</a>) must be fully defined for operands of the
1108
key type; thus the key type must be a boolean, numeric, string, pointer, function, interface,
Rob Pike's avatar
Rob Pike committed
1109 1110
map, or channel type. If the key type is an interface type, these
comparison operators must be defined for the dynamic key values;
Rob Pike's avatar
Rob Pike committed
1111
failure will cause a <a href="#Run_time_panics">run-time panic</a>.
Rob Pike's avatar
Rob Pike committed
1112 1113

</p>
1114

1115
<pre>
1116 1117 1118
map [string] int
map [*T] struct { x, y float }
map [string] interface {}
1119
</pre>
1120

Rob Pike's avatar
Rob Pike committed
1121 1122 1123 1124
<p>
The number of elements is called the length and is never negative.
The length of a map <code>m</code> can be discovered using the
built-in function <code>len(m)</code> and may change during execution.
Rob Pike's avatar
Rob Pike committed
1125 1126
Values may be added and removed
during execution using special forms of <a href="#Assignments">assignment</a>.
Rob Pike's avatar
Rob Pike committed
1127 1128
</p>
<p>
Rob Pike's avatar
Rob Pike committed
1129
The value of an uninitialized map is <code>nil</code>.
Rob Pike's avatar
Rob Pike committed
1130 1131
A new, empty map value is made using the built-in
function <code>make</code>, which takes the map type and an optional
1132
capacity hint as arguments:
Rob Pike's avatar
Rob Pike committed
1133
</p>
1134

1135
<pre>
1136 1137
make(map[string] int)
make(map[string] int, 100)
1138
</pre>
1139

1140 1141 1142 1143 1144 1145
<p>
The initial capacity does not bound its size:
maps grow to accommodate the number of items
stored in them.
</p>

1146
<h3 id="Channel_types">Channel types</h3>
1147

Rob Pike's avatar
Rob Pike committed
1148
<p>
1149
A channel provides a mechanism for two concurrently executing functions
Rob Pike's avatar
Rob Pike committed
1150
to synchronize execution and communicate by passing a value of a
1151
specified element type.
Robert Griesemer's avatar
Robert Griesemer committed
1152
A value of channel type may be <code>nil</code>.
Rob Pike's avatar
Rob Pike committed
1153
</p>
1154

1155
<pre class="ebnf">
Rob Pike's avatar
Rob Pike committed
1156
ChannelType   = Channel | SendChannel | RecvChannel .
1157 1158 1159
Channel       = "chan" ElementType .
SendChannel   = "chan" "&lt;-" ElementType .
RecvChannel   = "&lt;-" "chan" ElementType .
1160
</pre>
1161

1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174
<p>
To avoid a parsing ambiguity in cases such as <code>chan&lt;- chan int</code>,
the Channel production's ElementType cannot be a RecvChannel.
To construct such a type, parenthesize the RecvChannel first.
</p>

<pre>
chan&lt;- chan int     // same as chan&lt;- (chan int)
chan&lt;- &lt;-chan int   // same as chan&lt;- (&lt;-chan int)
&lt;-chan &lt;-chan int   // same as &lt;-chan (&lt;-chan int)
chan (&lt;-chan int)
</pre>

Rob Pike's avatar
Rob Pike committed
1175 1176
<p>
Upon creation, a channel can be used both to send and to receive values.
1177
By conversion or assignment, a channel may be constrained only to send or
Rob Pike's avatar
Rob Pike committed
1178 1179 1180
to receive. This constraint is called a channel's <i>direction</i>; either
<i>send</i>, <i>receive</i>, or <i>bi-directional</i> (unconstrained).
</p>
1181

1182
<pre>
1183
chan T         // can be used to send and receive values of type T
1184
chan&lt;- float   // can only be used to send floats
Rob Pike's avatar
Rob Pike committed
1185
&lt;-chan int     // can only be used to receive ints
1186
</pre>
1187

Rob Pike's avatar
Rob Pike committed
1188 1189
<p>
The value of an uninitialized channel is <code>nil</code>. A new, initialized channel
Robert Griesemer's avatar
Robert Griesemer committed
1190
value can be made using the built-in function <code>make</code>,
1191
which takes the channel type and an optional capacity as arguments:
Rob Pike's avatar
Rob Pike committed
1192
</p>
1193

1194
<pre>
1195
make(chan int, 100)
1196
</pre>
1197

Rob Pike's avatar
Rob Pike committed
1198 1199
<p>
The capacity, in number of elements, sets the size of the buffer in the channel. If the
Rob Pike's avatar
Rob Pike committed
1200
capacity is greater than zero, the channel is asynchronous: provided the
Rob Pike's avatar
Rob Pike committed
1201 1202 1203
buffer is not full, sends can succeed without blocking. If the capacity is zero
or absent, the communication succeeds only when both a sender and receiver are ready.
</p>
1204

1205
<p>
1206 1207
A channel may be closed and tested for closure with the built-in functions
<a href="#Close_and_closed"><code>close</code> and <code>closed</code></a>.
1208 1209
</p>

1210
<h2 id="Properties_of_types_and_values">Properties of types and values</h2>
1211 1212

<p>
1213 1214 1215
Two types are either <i>identical</i> or <i>different</i>, and they are
either <i>compatible</i> or <i>incompatible</i>.
Identical types are always compatible, but compatible types need not be identical.
1216
</p>
1217

1218
<h3 id="Type_identity_and_compatibility">Type identity and compatibility</h3>
Rob Pike's avatar
Rob Pike committed
1219

1220
<h4 id="Type_identity">Type identity</h4>
Rob Pike's avatar
Rob Pike committed
1221

1222
<p>
1223
Two named types are identical if their type names originate in the same
1224
type declaration (§<a href="#Declarations_and_scope">Declarations and scope</a>). A named and an unnamed type
1225 1226 1227
are never identical. Two unnamed types are identical if the corresponding
type literals have the same literal structure and corresponding components have
identical types. In detail:
1228
</p>
Rob Pike's avatar
Rob Pike committed
1229

1230
<ul>
1231 1232
	<li>Two array types are identical if they have identical element types and
	    the same array length.</li>
1233

1234
	<li>Two slice types are identical if they have identical element types.</li>
1235

1236 1237
	<li>Two struct types are identical if they have the same sequence of fields,
	    and if corresponding fields have the same names and identical types.
Robert Griesemer's avatar
Robert Griesemer committed
1238
	    Two anonymous fields are considered to have the same name.</li>
1239

1240
	<li>Two pointer types are identical if they have identical base types.</li>
1241

1242 1243
	<li>Two function types are identical if they have the same number of parameters
	    and result values and if corresponding parameter and result types are
1244 1245 1246
	    identical. All "..." parameters without a specified type are defined to have
	    identical type.  All "..." parameters with specified identical type
	    <code>T</code> are defined to have identical type.
1247
	    Parameter and result names are not required to match.</li>
1248

1249 1250 1251
	<li>Two interface types are identical if they have the same set of methods
	    with the same names and identical function types. The order
	    of the methods is irrelevant.</li>
1252

1253
	<li>Two map types are identical if they have identical key and value types.</li>
1254

1255 1256
	<li>Two channel types are identical if they have identical value types and
	    the same direction.</li>
1257 1258
</ul>

1259
<h4 id="Type_compatibility">Type compatibility</h4>
1260

1261
<p>
1262 1263 1264 1265 1266
Type compatibility is less stringent than type identity: a named and an unnamed
type are compatible if the respective type literals are compatible.
In all other respects, the definition of type compatibility is the
same as for type identity listed above but with ``compatible''
substituted for ``identical''.
1267
</p>
1268

1269
<p>
Rob Pike's avatar
Rob Pike committed
1270 1271
Given the declarations
</p>
1272 1273 1274

<pre>
type (
1275 1276 1277 1278
	T0 []string
	T1 []string
	T2 struct { a, b int }
	T3 struct { a, c int }
Russ Cox's avatar
Russ Cox committed
1279 1280
	T4 func(int, float) *T0
	T5 func(x int, y float) *[]string
1281
)
1282
</pre>
1283

Rob Pike's avatar
Rob Pike committed
1284
<p>
1285
these types are identical:
Rob Pike's avatar
Rob Pike committed
1286
</p>
1287

1288
<pre>
1289
T0 and T0
1290 1291
[]int and []int
struct { a, b *T5 } and struct { a, b *T5 }
Russ Cox's avatar
Russ Cox committed
1292
func(x int, y float) *[]string and func(int, float) (result *[]string)
1293
</pre>
1294

Rob Pike's avatar
Rob Pike committed
1295
<p>
1296 1297
<code>T0</code> and <code>T1</code> are neither identical nor compatible
because they are named types with distinct declarations.
Russ Cox's avatar
Russ Cox committed
1298 1299 1300
</p>

<p>
1301
These types are compatible:
Rob Pike's avatar
Rob Pike committed
1302
</p>
1303

1304
<pre>
1305
T0 and T0
1306 1307
T0 and []string
T3 and struct { a int; c int }
Russ Cox's avatar
Russ Cox committed
1308
T4 and func(x int, y float) *[]string
1309
</pre>
1310

Rob Pike's avatar
Rob Pike committed
1311
<p>
1312 1313
<code>T2</code> and <code>struct { a, c int }</code> are incompatible because
they have different field names.
Rob Pike's avatar
Rob Pike committed
1314
</p>
1315

1316
<h3 id="Assignment_compatibility">Assignment compatibility</h3>
Rob Pike's avatar
Rob Pike committed
1317 1318

<p>
1319
A value <code>v</code> of static type <code>V</code> is <i>assignment compatible</i>
1320
with a type <code>T</code> if one or more of the following conditions applies:
Rob Pike's avatar
Rob Pike committed
1321
</p>
1322

Rob Pike's avatar
Rob Pike committed
1323 1324
<ul>
<li>
1325
<code>V</code> is compatible with <code>T</code>.
Robert Griesemer's avatar
Robert Griesemer committed
1326 1327
</li>
<li>
1328 1329
<code>T</code> is an interface type and
<code>V</code> <a href="#Interface_types">implements</a> <code>T</code>.
Rob Pike's avatar
Rob Pike committed
1330 1331
</li>
<li>
1332 1333 1334 1335
<code>V</code> is a pointer to an array and <code>T</code> is a slice type
with compatible element type and at least one of <code>V</code> or <code>T</code> is unnamed.
After assignment, the slice variable refers to the original array; the elements are not
copied.
Rob Pike's avatar
Rob Pike committed
1336
</li>
Robert Griesemer's avatar
Robert Griesemer committed
1337
<li>
1338 1339
<code>V</code> is a bidirectional channel and <code>T</code> is a channel type
with compatible element type and at least one of <code>V</code> or <code>T</code> is unnamed.
Robert Griesemer's avatar
Robert Griesemer committed
1340
</li>
Rob Pike's avatar
Rob Pike committed
1341 1342
</ul>

1343 1344 1345 1346 1347 1348 1349 1350
<p>
If <code>T</code> is a struct type, either all fields of <code>T</code>
must be <a href="#Exported_identifiers">exported</a>, or the assignment must be in
the same package in which <code>T</code> is declared.
In other words, a struct value can be assigned to a struct variable only if
every field of the struct may be legally assigned individually by the program.
</p>

1351 1352 1353 1354 1355 1356 1357 1358 1359
<p>
An untyped <a href="#Constants">constant</a> <code>v</code>
is assignment compatible with type <code>T</code> if <code>v</code>
can be represented accurately as a value of type <code>T</code>.
</p>

<p>
The predeclared identifier <code>nil</code> is assignment compatible with any
pointer, function, slice, map, channel, or interface type and
1360
represents the <a href="#The_zero_value">zero value</a> for that type.
1361 1362 1363 1364 1365 1366
</p>

<p>
Any value may be assigned to the <a href="#Blank_identifier">blank identifier</a>.
</p>

1367
<h3 id="Comparison_compatibility">Comparison compatibility</h3>
Rob Pike's avatar
Rob Pike committed
1368 1369

<p>
Rob Pike's avatar
Rob Pike committed
1370 1371
Except as noted, values of any type may be compared to other values of
<a href="#Type_compatibility">compatible static type</a>.
1372
Values of integer, floating-point, and string type may be compared using the
Rob Pike's avatar
Rob Pike committed
1373
full range of <a href="#Comparison_operators;">comparison operators</a>;
1374
booleans and complex values may be compared only for equality or inequality.
Rob Pike's avatar
Rob Pike committed
1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386
</p>

<p>
Values of composite type may be
compared for equality or inequality using the <code>==</code> and
<code>!=</code> operators, with the following provisos:
</p>
<ul>
<li>
Arrays and structs may not be compared to anything.
</li>
<li>
1387 1388
A slice value may only be compared explicitly against <code>nil</code>.
A slice value is equal to <code>nil</code> if it has been assigned the explicit
Rob Pike's avatar
Rob Pike committed
1389 1390
value <code>nil</code>, if it is uninitialized, or if it has
been assigned another slice value equal to <code>nil</code>·
Rob Pike's avatar
Rob Pike committed
1391 1392
</li>
<li>
1393
An interface value is equal to <code>nil</code> if it has
Rob Pike's avatar
Rob Pike committed
1394 1395
been assigned the explicit value <code>nil</code>, if it is uninitialized,
or if it has been assigned another interface value equal to <code>nil</code>.
Rob Pike's avatar
Rob Pike committed
1396 1397 1398 1399 1400 1401 1402 1403 1404 1405
</li>
<li>
For types that can be compared to <code>nil</code>,
two values of the same type are equal if they both equal <code>nil</code>,
unequal if one equals <code>nil</code> and one does not.
</li>
<li>
Pointer values are equal if they point to the same location.
</li>
<li>
1406
Function values are equal if they refer to the same function.
Rob Pike's avatar
Rob Pike committed
1407 1408
</li>
<li>
1409
Channel and map values are equal if they were created by the same call to <code>make</code>
1410
<a href="#Making_slices">Making slices</a>, maps, and channels).
1411 1412
When comparing two values of channel type, the channel value types
must be compatible but the channel direction is ignored.
Rob Pike's avatar
Rob Pike committed
1413 1414
</li>
<li>
1415
Interface values may be compared if they have compatible static types.
1416
They will be equal only if they have the same dynamic type and the underlying values are equal.
Rob Pike's avatar
Rob Pike committed
1417 1418
</li>
</ul>
1419

1420
<h2 id="Blocks">Blocks</h2>
Robert Griesemer's avatar
Robert Griesemer committed
1421 1422 1423 1424 1425 1426 1427

<p>
A <i>block</i> is a sequence of declarations and statements within matching
brace brackets.
</p>

<pre class="ebnf">
1428
Block = "{" { Statement ";" } "}" .
Robert Griesemer's avatar
Robert Griesemer committed
1429 1430 1431 1432 1433 1434 1435 1436 1437
</pre>

<p>
In addition to explicit blocks in the source code, there are implicit blocks:
</p>

<ol>
	<li>The <i>universe block</i> encompasses all Go source text.</li>

Robert Griesemer's avatar
Robert Griesemer committed
1438
	<li>Each <a href="#Packages">package</a> has a <i>package block</i> containing all
Robert Griesemer's avatar
Robert Griesemer committed
1439 1440 1441 1442 1443 1444 1445 1446
	    Go source text for that package.</li>

	<li>Each file has a <i>file block</i> containing all Go source text
	    in that file.</li>

	<li>Each <code>if</code>, <code>for</code>, and <code>switch</code>
	    statement is considered to be in its own implicit block.</li>

Russ Cox's avatar
Russ Cox committed
1447
	<li>Each clause in a <code>switch</code> or <code>select</code> statement
Robert Griesemer's avatar
Robert Griesemer committed
1448 1449 1450 1451
	    acts as an implicit block.</li>
</ol>

<p>
Robert Griesemer's avatar
Robert Griesemer committed
1452
Blocks nest and influence <a href="#Declarations_and_scope">scoping</a>.
Robert Griesemer's avatar
Robert Griesemer committed
1453 1454 1455
</p>


1456
<h2 id="Declarations_and_scope">Declarations and scope</h2>
1457 1458

<p>
Robert Griesemer's avatar
Robert Griesemer committed
1459 1460
A declaration binds a non-<a href="#Blank_identifier">blank</a>
identifier to a constant, type, variable, function, or package.
1461
Every identifier in a program must be declared.
Robert Griesemer's avatar
Robert Griesemer committed
1462 1463
No identifier may be declared twice in the same block, and
no identifier may be declared in both the file and package block.
1464
</p>
1465

1466
<pre class="ebnf">
Robert Griesemer's avatar
Robert Griesemer committed
1467 1468
Declaration   = ConstDecl | TypeDecl | VarDecl .
TopLevelDecl  = Declaration | FunctionDecl | MethodDecl .
1469
</pre>
1470

1471
<p>
Robert Griesemer's avatar
Robert Griesemer committed
1472 1473
The <i>scope</i> of a declared identifier is the extent of source text in which
the identifier denotes the specified constant, type, variable, function, or package.
1474
</p>
Robert Griesemer's avatar
Robert Griesemer committed
1475

1476
<p>
Robert Griesemer's avatar
Robert Griesemer committed
1477
Go is lexically scoped using blocks:
1478
</p>
Robert Griesemer's avatar
Robert Griesemer committed
1479

1480
<ol>
Robert Griesemer's avatar
Robert Griesemer committed
1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497
	<li>The scope of a predeclared identifier is the universe block.</li>

	<li>The scope of an identifier denoting a constant, type, variable,
	    or function declared at top level (outside any function) is the
	    package block.</li>

	<li>The scope of an imported package identifier is the file block
	    of the file containing the import declaration.</li>

	<li>The scope of an identifier denoting a function parameter or
	    result variable is the function body.</li>

	<li>The scope of a constant or variable identifier declared
	    inside a function begins at the end of the ConstSpec or VarSpec
	    and ends at the end of the innermost containing block.</li>

	<li>The scope of a type identifier declared inside a function
Russ Cox's avatar
Russ Cox committed
1498
	    begins at the identifier in the TypeSpec
Robert Griesemer's avatar
Robert Griesemer committed
1499
	    and ends at the end of the innermost containing block.</li>
1500
</ol>
1501

1502
<p>
Robert Griesemer's avatar
Robert Griesemer committed
1503 1504 1505
An identifier declared in a block may be redeclared in an inner block.
While the identifier of the inner declaration is in scope, it denotes
the entity declared by the inner declaration.
1506
</p>
1507

Robert Griesemer's avatar
Robert Griesemer committed
1508
<p>
Robert Griesemer's avatar
Robert Griesemer committed
1509
The <a href="#Package_clause">package clause</a> is not a declaration; the package name
Robert Griesemer's avatar
Robert Griesemer committed
1510
does not appear in any scope. Its purpose is to identify the files belonging
1511
to the same <a href="#Packages">package</a> and to specify the default package name for import
Robert Griesemer's avatar
Robert Griesemer committed
1512 1513
declarations.
</p>
1514 1515


1516
<h3 id="Label_scopes">Label scopes</h3>
1517

Robert Griesemer's avatar
Robert Griesemer committed
1518
<p>
Robert Griesemer's avatar
Robert Griesemer committed
1519
Labels are declared by <a href="#Labeled_statements">labeled statements</a> and are
Robert Griesemer's avatar
Robert Griesemer committed
1520
used in the <code>break</code>, <code>continue</code>, and <code>goto</code>
1521
statements (§<a href="#Break_statements">Break statements</a>, §<a href="#Continue_statements">Continue statements</a>, §<a href="#Goto_statements">Goto statements</a>).
Robert Griesemer's avatar
Robert Griesemer committed
1522 1523 1524 1525 1526
In contrast to other identifiers, labels are not block scoped and do
not conflict with identifiers that are not labels. The scope of a label
is the body of the function in which it is declared and excludes
the body of any nested function.
</p>
1527 1528


1529
<h3 id="Predeclared_identifiers">Predeclared identifiers</h3>
1530

1531
<p>
Robert Griesemer's avatar
Robert Griesemer committed
1532
The following identifiers are implicitly declared in the universe block:
1533 1534 1535
</p>
<pre class="grammar">
Basic types:
1536 1537
	bool byte float32 float64 int8 int16 int32 int64
	string uint8 uint16 uint32 uint64
1538

Rob Pike's avatar
Rob Pike committed
1539
Architecture-specific convenience types:
1540
	float int uint uintptr
1541

1542
Constants:
1543 1544 1545 1546
	true false iota

Zero value:
	nil
1547

1548
Functions:
Rob Pike's avatar
Rob Pike committed
1549
	cap close closed cmplx copy imag len make
Rob Pike's avatar
Rob Pike committed
1550
	new panic print println real
1551
</pre>
1552

1553

1554
<h3 id="Exported_identifiers">Exported identifiers</h3>
Robert Griesemer's avatar
Robert Griesemer committed
1555

1556
<p>
1557 1558 1559
An identifier may be <i>exported</i> to permit access to it from another package
using a <a href="#Qualified_identifiers">qualified identifier</a>. An identifier
is exported if both:
1560 1561
</p>
<ol>
1562
	<li>the first character of the identifier's name is a Unicode upper case letter (Unicode class "Lu"); and
Rob Pike's avatar
Rob Pike committed
1563
	<li>the identifier is declared in the <a href="#Blocks">package block</a> or denotes a field or method of a type
1564
	    declared in that block.
1565
</ol>
1566
<p>
1567
All other identifiers are not exported.
1568
</p>
1569

1570

Robert Griesemer's avatar
Robert Griesemer committed
1571 1572 1573 1574 1575 1576 1577 1578
<h3 id="Blank_identifier">Blank identifier</h3>

<p>
The <i>blank identifier</i>, represented by the underscore character <code>_</code>, may be used in a declaration like
any other identifier but the declaration does not introduce a new binding.
</p>


1579
<h3 id="Constant_declarations">Constant declarations</h3>
1580

1581 1582
<p>
A constant declaration binds a list of identifiers (the names of
Robert Griesemer's avatar
Robert Griesemer committed
1583 1584 1585 1586
the constants) to the values of a list of <a href="#Constant_expressions">constant expressions</a>.
The number of identifiers must be equal
to the number of expressions, and the <i>n</i>th identifier on
the left is bound to the value of the <i>n</i>th expression on the
1587 1588
right.
</p>
1589

1590
<pre class="ebnf">
1591
ConstDecl      = "const" ( ConstSpec | "(" { ConstSpec ";" } ")" ) .
1592
ConstSpec      = IdentifierList [ [ Type ] "=" ExpressionList ] .
1593

1594 1595
IdentifierList = identifier { "," identifier } .
ExpressionList = Expression { "," Expression } .
1596
</pre>
1597

1598
<p>
1599 1600
If the type is present, all constants take the type specified, and
the expressions must be <a href="#Assignment_compatibility">assignment compatible</a> with that type.
1601
If the type is omitted, the constants take the
1602 1603 1604 1605 1606 1607
individual types of the corresponding expressions.
If the expression values are untyped <a href="#Constants">constants</a>,
the declared constants remain untyped and the constant identifiers
denote the constant values. For instance, if the expression is a
floating-point literal, the constant identifier denotes a floating-point
constant, even if the literal's fractional part is zero.
1608
</p>
1609

1610
<pre>
1611
const Pi float64 = 3.14159265358979323846
1612
const zero = 0.0             // untyped floating-point constant
1613
const (
1614 1615
	size int64 = 1024
	eof = -1             // untyped integer constant
1616
)
1617
const a, b, c = 3, 4, "foo"  // a = 3, b = 4, c = "foo", untyped integer and string constants
1618
const u, v float = 0, 3      // u = 0.0, v = 3.0
1619
</pre>
1620

1621 1622 1623 1624
<p>
Within a parenthesized <code>const</code> declaration list the
expression list may be omitted from any but the first declaration.
Such an empty list is equivalent to the textual substitution of the
Rob Pike's avatar
Rob Pike committed
1625
first preceding non-empty expression list and its type if any.
1626 1627 1628
Omitting the list of expressions is therefore equivalent to
repeating the previous list.  The number of identifiers must be equal
to the number of expressions in the previous list.
Robert Griesemer's avatar
Robert Griesemer committed
1629 1630
Together with the <a href="#Iota"><code>iota</code> constant generator</a>
this mechanism permits light-weight declaration of sequential values:
1631
</p>
Robert Griesemer's avatar
Robert Griesemer committed
1632

1633
<pre>
1634
const (
1635 1636 1637 1638 1639 1640 1641 1642
	Sunday = iota
	Monday
	Tuesday
	Wednesday
	Thursday
	Friday
	Partyday
	numberOfDays  // this constant is not exported
1643
)
1644
</pre>
Robert Griesemer's avatar
Robert Griesemer committed
1645 1646


1647
<h3 id="Iota">Iota</h3>
1648

1649
<p>
Robert Griesemer's avatar
Robert Griesemer committed
1650
Within a constant declaration, the predeclared identifier
1651 1652
<code>iota</code> represents successive untyped integer <a href="#Constants">
constants</a>. It is reset to 0 whenever the reserved word <code>const</code>
1653 1654
appears in the source and increments with each
<a href="#Semicolons">semicolon</a>. It can be used to construct a
1655 1656
set of related constants:
</p>
1657

1658
<pre>
Robert Griesemer's avatar
Robert Griesemer committed
1659
const (  // iota is reset to 0
1660 1661 1662
	c0 = iota  // c0 == 0
	c1 = iota  // c1 == 1
	c2 = iota  // c2 == 2
1663 1664 1665
)

const (
1666 1667 1668
	a = 1 &lt;&lt; iota  // a == 1 (iota has been reset)
	b = 1 &lt;&lt; iota  // b == 2
	c = 1 &lt;&lt; iota  // c == 4
1669 1670 1671
)

const (
1672 1673 1674
	u       = iota * 42  // u == 0     (untyped integer constant)
	v float = iota * 42  // v == 42.0  (float constant)
	w       = iota * 42  // w == 84    (untyped integer constant)
1675 1676
)

1677 1678
const x = iota  // x == 0 (iota has been reset)
const y = iota  // y == 0 (iota has been reset)
1679
</pre>
1680

1681
<p>
1682 1683 1684
Within an ExpressionList, the value of each <code>iota</code> is the same because
it is only incremented at a semicolon:
</p>
1685

1686
<pre>
1687
const (
1688 1689 1690 1691
	bit0, mask0 = 1 &lt;&lt; iota, 1 &lt;&lt; iota - 1  // bit0 == 1, mask0 == 0
	bit1, mask1                             // bit1 == 2, mask1 == 1
	_, _                                    // skips iota == 2
	bit3, mask3                             // bit3 == 8, mask3 == 7
1692
)
1693
</pre>
1694

1695
<p>
1696 1697 1698
This last example exploits the implicit repetition of the
last non-empty expression list.
</p>
1699 1700


1701
<h3 id="Type_declarations">Type declarations</h3>
1702

1703
<p>
1704 1705 1706 1707 1708
A type declaration binds an identifier, the <i>type name</i>, to a new type
that has the same definition (element, fields, channel direction, etc.) as
an existing type.  The new type is
<a href="#Properties_of_types_and_values">compatible</a> with, but
<a href="#Properties_of_types_and_values">different</a> from, the existing type.
1709
</p>
1710

1711
<pre class="ebnf">
1712
TypeDecl     = "type" ( TypeSpec | "(" { TypeSpec ";" } ")" ) .
1713
TypeSpec     = identifier Type .
1714
</pre>
1715

1716
<pre>
1717
type IntArray [16]int
1718

1719
type (
1720
	Point struct { x, y float }
1721 1722
	Polar Point
)
1723

1724
type TreeNode struct {
1725 1726
	left, right *TreeNode
	value *Comparable
1727 1728
}

Rob Pike's avatar
Rob Pike committed
1729
type Cipher interface {
1730 1731 1732
	BlockSize() int
	Encrypt(src, dst []byte)
	Decrypt(src, dst []byte)
1733
}
1734
</pre>
1735

1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750
<p>
The declared type does not inherit any <a href="#Method_declarations">methods</a>
bound to the existing type, but the <a href="#Types">method set</a>
of elements of a composite type is not changed:
</p>

<pre>
// A Mutex is a data type with two methods Lock and Unlock.
type Mutex struct         { /* Mutex fields */ }
func (m *Mutex) Lock()    { /* Lock implementation */ }
func (m *Mutex) Unlock()  { /* Unlock implementation */ }

// NewMutex has the same composition as Mutex but its method set is empty.
type NewMutex Mutex

1751 1752
// PrintableMutex's method set contains the methods
// Lock and Unlock bound to its anonymous field Mutex.
1753
type PrintableMutex struct {
1754
	Mutex
1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766
}
</pre>

<p>
A type declaration may be used to define a different boolean, numeric, or string
type and attach methods to it:
</p>

<pre>
type TimeZone int

const (
1767 1768 1769 1770
	EST TimeZone = -(5 + iota)
	CST
	MST
	PST
1771 1772 1773
)

func (tz TimeZone) String() string {
1774
	return fmt.Sprintf("GMT+%dh", tz)
1775 1776 1777 1778
}
</pre>


1779
<h3 id="Variable_declarations">Variable declarations</h3>
1780 1781 1782 1783 1784

<p>
A variable declaration creates a variable, binds an identifier to it and
gives it a type and optionally an initial value.
</p>
1785
<pre class="ebnf">
1786
VarDecl     = "var" ( VarSpec | "(" { VarSpec ";" } ")" ) .
1787
VarSpec     = IdentifierList ( Type [ "=" ExpressionList ] | "=" ExpressionList ) .
1788
</pre>
1789

1790
<pre>
1791 1792 1793
var i int
var U, V, W float
var k = 0
Rob Pike's avatar
Rob Pike committed
1794
var x, y float = -1, -2
1795
var (
1796
	i int
1797 1798
	u, v, s = 2.0, 3.0, "bar"
)
Robert Griesemer's avatar
Robert Griesemer committed
1799
var re, im = complexSqrt(-1)
1800
var _, found = entries[name]  // map lookup; only interested in "found"
1801
</pre>
1802

1803
<p>
1804
If a list of expressions is given, the variables are initialized
Rob Pike's avatar
Rob Pike committed
1805 1806
by assigning the expressions to the variables (§<a href="#Assignments">Assignments</a>)
in order; all expressions must be consumed and all variables initialized from them.
1807
Otherwise, each variable is initialized to its <a href="#The_zero_value">zero value</a>.
1808
</p>
1809

1810
<p>
1811 1812 1813
If the type is present, each variable is given that type.
Otherwise, the types are deduced from the assignment
of the expression list.
1814
</p>
1815

1816
<p>
1817 1818 1819 1820 1821
If the type is absent and the corresponding expression evaluates to an
untyped <a href="#Constants">constant</a>, the type of the declared variable
is <code>bool</code>, <code>int</code>, <code>float</code>, or <code>string</code>
respectively, depending on whether the value is a boolean, integer,
floating-point, or string constant:
1822
</p>
1823

1824
<pre>
1825
var b = true    // t has type bool
1826
var i = 0       // i has type int
1827
var f = 3.0     // f has type float
1828
var s = "OMDB"  // s has type string
1829
</pre>
1830

1831
<h3 id="Short_variable_declarations">Short variable declarations</h3>
1832

1833
<p>
1834
A <i>short variable declaration</i> uses the syntax:
1835
</p>
1836

1837
<pre class="ebnf">
1838
ShortVarDecl = IdentifierList ":=" ExpressionList .
1839
</pre>
1840

1841
<p>
1842 1843
It is a shorthand for a regular variable declaration with
initializer expressions but no types:
1844
</p>
1845

1846 1847
<pre class="grammar">
"var" IdentifierList = ExpressionList .
1848
</pre>
1849

1850
<pre>
1851 1852 1853 1854 1855
i, j := 0, 10
f := func() int { return 7 }
ch := make(chan int)
r, w := os.Pipe(fd)  // os.Pipe() returns two values
_, y, _ := coord(p)  // coord() returns three values; only interested in y coordinate
1856
</pre>
1857

Rob Pike's avatar
Rob Pike committed
1858
<p>
1859
Unlike regular variable declarations, a short variable declaration may redeclare variables provided they
Rob Pike's avatar
Rob Pike committed
1860
were originally declared in the same block with the same type, and at
Robert Griesemer's avatar
Robert Griesemer committed
1861
least one of the non-<a href="#Blank_identifier">blank</a> variables is new.  As a consequence, redeclaration
Rob Pike's avatar
Rob Pike committed
1862 1863 1864 1865 1866 1867
can only appear in a multi-variable short declaration.
Redeclaration does not introduce a new
variable; it just assigns a new value to the original.
</p>

<pre>
1868 1869
field1, offset := nextField(str, 0)
field2, offset := nextField(str, offset)  // redeclares offset
Rob Pike's avatar
Rob Pike committed
1870 1871
</pre>

Rob Pike's avatar
Rob Pike committed
1872
<p>
1873 1874 1875
Short variable declarations may appear only inside functions.
In some contexts such as the initializers for <code>if</code>,
<code>for</code>, or <code>switch</code> statements,
1876
they can be used to declare local temporary variables (§<a href="#Statements">Statements</a>).
Rob Pike's avatar
Rob Pike committed
1877
</p>
1878

1879
<h3 id="Function_declarations">Function declarations</h3>
1880

1881
<p>
1882
A function declaration binds an identifier to a function (§<a href="#Function_types">Function types</a>).
1883
</p>
1884

1885
<pre class="ebnf">
Robert Griesemer's avatar
Robert Griesemer committed
1886 1887
FunctionDecl = "func" identifier Signature [ Body ] .
Body         = Block.
1888
</pre>
1889

1890 1891 1892 1893 1894
<p>
A function declaration may omit the body. Such a declaration provides the
signature for a function implemented outside Go, such as an assembly routine.
</p>

1895 1896 1897
<pre>
func min(x int, y int) int {
	if x &lt; y {
1898
		return x
1899
	}
1900
	return y
1901
}
1902 1903

func flushICache(begin, end uintptr)  // implemented externally
1904
</pre>
1905

1906
<h3 id="Method_declarations">Method declarations</h3>
1907

1908
<p>
Robert Griesemer's avatar
Robert Griesemer committed
1909 1910
A method is a function with a <i>receiver</i>.
A method declaration binds an identifier to a method.
Rob Pike's avatar
Rob Pike committed
1911
</p>
1912
<pre class="ebnf">
1913 1914
MethodDecl   = "func" Receiver MethodName Signature [ Body ] .
Receiver     = "(" [ identifier ] [ "*" ] BaseTypeName ")" .
1915
BaseTypeName = identifier .
1916 1917
</pre>

1918
<p>
Robert Griesemer's avatar
Robert Griesemer committed
1919 1920 1921 1922
The receiver type must be of the form <code>T</code> or <code>*T</code> where
<code>T</code> is a type name. <code>T</code> is called the
<i>receiver base type</i> or just <i>base type</i>.
The base type must not be a pointer or interface type and must be
1923
declared in the same package as the method.
1924 1925
The method is said to be <i>bound</i> to the base type
and is visible only within selectors for that type
1926
<a href="#Type_declarations">Type declarations</a>, §<a href="#Selectors">Selectors</a>).
Rob Pike's avatar
Rob Pike committed
1927
</p>
1928

1929 1930 1931
<p>
Given type <code>Point</code>, the declarations
</p>
1932

1933 1934
<pre>
func (p *Point) Length() float {
1935
	return Math.sqrt(p.x * p.x + p.y * p.y)
1936
}
1937

1938
func (p *Point) Scale(factor float) {
1939 1940
	p.x = p.x * factor
	p.y = p.y * factor
1941 1942
}
</pre>
1943

1944
<p>
Rob Pike's avatar
Rob Pike committed
1945 1946
bind the methods <code>Length</code> and <code>Scale</code>,
with receiver type <code>*Point</code>,
1947 1948
to the base type <code>Point</code>.
</p>
1949

1950
<p>
Robert Griesemer's avatar
Robert Griesemer committed
1951
If the receiver's value is not referenced inside the body of the method,
1952 1953 1954
its identifier may be omitted in the declaration. The same applies in
general to parameters of functions and methods.
</p>
1955

Rob Pike's avatar
Rob Pike committed
1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968
<p>
The type of a method is the type of a function with the receiver as first
argument.  For instance, the method <code>Scale</code> has type
</p>

<pre>
(p *Point, factor float)
</pre>

<p>
However, a function declared this way is not a method.
</p>

1969

1970
<h2 id="Expressions">Expressions</h2>
1971

1972
<p>
Rob Pike's avatar
Rob Pike committed
1973
An expression specifies the computation of a value by applying
1974
operators and functions to operands.
Rob Pike's avatar
Rob Pike committed
1975
</p>
1976

1977
<h3 id="Operands">Operands</h3>
1978

1979
<p>
1980
Operands denote the elementary values in an expression.
1981
</p>
1982

1983
<pre class="ebnf">
Rob Pike's avatar
Rob Pike committed
1984
Operand    = Literal | QualifiedIdent | MethodExpr | "(" Expression ")" .
Rob Pike's avatar
Rob Pike committed
1985
Literal    = BasicLit | CompositeLit | FunctionLit .
Rob Pike's avatar
Rob Pike committed
1986
BasicLit   = int_lit | float_lit | imaginary_lit | char_lit | string_lit .
1987
</pre>
1988 1989


1990
<h3 id="Qualified_identifiers">Qualified identifiers</h3>
1991

1992
<p>
Robert Griesemer's avatar
Robert Griesemer committed
1993
A qualified identifier is a non-<a href="#Blank_identifier">blank</a> identifier qualified by a package name prefix.
Rob Pike's avatar
Rob Pike committed
1994
</p>
1995

1996
<pre class="ebnf">
Russ Cox's avatar
Russ Cox committed
1997
QualifiedIdent = [ PackageName "." ] identifier .
1998
</pre>
1999

Rob Pike's avatar
Rob Pike committed
2000
<p>
2001 2002 2003
A qualified identifier accesses an identifier in a separate package.
The identifier must be <a href="#Exported_identifiers">exported</a> by that
package, which means that it must begin with a Unicode upper case letter.
Rob Pike's avatar
Rob Pike committed
2004 2005 2006
</p>

<pre>
Rob Pike's avatar
Rob Pike committed
2007
math.Sin
Rob Pike's avatar
Rob Pike committed
2008
</pre>
2009

2010
<!---
Robert Griesemer's avatar
Robert Griesemer committed
2011
<p>
Robert Griesemer's avatar
Robert Griesemer committed
2012
<span class="alert">TODO: Unify this section with Selectors - it's the same syntax.</span>
Robert Griesemer's avatar
Robert Griesemer committed
2013
</p>
2014
--->
Robert Griesemer's avatar
Robert Griesemer committed
2015

2016
<h3 id="Composite_literals">Composite literals</h3>
2017

Rob Pike's avatar
Rob Pike committed
2018 2019 2020 2021
<p>
Composite literals construct values for structs, arrays, slices, and maps
and create a new value each time they are evaluated.
They consist of the type of the value
2022 2023
followed by a brace-bound list of composite elements. An element may be
a single expression or a key-value pair.
Rob Pike's avatar
Rob Pike committed
2024
</p>
Robert Griesemer's avatar
Robert Griesemer committed
2025

2026
<pre class="ebnf">
2027
CompositeLit  = LiteralType "{" [ ElementList [ "," ] ] "}" .
Rob Pike's avatar
Rob Pike committed
2028
LiteralType   = StructType | ArrayType | "[" "..." "]" ElementType |
2029
                SliceType | MapType | TypeName | "(" LiteralType ")" .
2030
ElementList   = Element { "," Element } .
2031
Element       = [ Key ":" ] Value .
2032
Key           = FieldName | ElementIndex .
Rob Pike's avatar
Rob Pike committed
2033
FieldName     = identifier .
2034
ElementIndex  = Expression .
2035
Value         = Expression .
2036
</pre>
Robert Griesemer's avatar
Robert Griesemer committed
2037

Rob Pike's avatar
Rob Pike committed
2038
<p>
2039 2040 2041
The LiteralType must be a struct, array, slice, or map type
(the grammar enforces this constraint except when the type is given
as a TypeName).
2042
The types of the expressions must be <a href="#Assignment_compatibility">assignment compatible</a> with
2043 2044
the respective field, element, and key types of the LiteralType;
there is no additional conversion.
2045
The key is interpreted as a field name for struct literals,
Rob Pike's avatar
Rob Pike committed
2046
an index expression for array and slice literals, and a key for map literals.
2047 2048 2049
For map literals, all elements must have a key. It is an error
to specify multiple elements with the same field name or
constant key value.
Rob Pike's avatar
Rob Pike committed
2050
</p>
2051

2052 2053
<p>
For struct literals the following rules apply:
2054
</p>
2055
<ul>
2056 2057
	<li>A key must be a field name declared in the LiteralType.
	</li>
Rob Pike's avatar
Rob Pike committed
2058
	<li>A literal that does not contain any keys must
2059 2060 2061 2062 2063
	    list an element for each struct field in the
	    order in which the fields are declared.
	</li>
	<li>If any element has a key, every element must have a key.
	</li>
Rob Pike's avatar
Rob Pike committed
2064
	<li>A literal that contains keys does not need to
2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078
	    have an element for each struct field. Omitted fields
	    get the zero value for that field.
	</li>
	<li>A literal may omit the element list; such a literal evaluates
		to the zero value for its type.
	</li>
	<li>It is an error to specify an element for a non-exported
	    field of a struct belonging to a different package.
	</li>
</ul>

<p>
Given the declarations
</p>
2079
<pre>
2080 2081
type Point struct { x, y, z float }
type Line struct { p, q Point }
2082
</pre>
2083

Rob Pike's avatar
Rob Pike committed
2084 2085 2086
<p>
one may write
</p>
2087

2088
<pre>
2089 2090
origin := Point{}                            // zero value for Point
line := Line{origin, Point{y: -4, z: 12.3}}  // zero value for line.q.x
2091 2092
</pre>

2093 2094 2095
<p>
For array and slice literals the following rules apply:
</p>
2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107
<ul>
	<li>Each element has an associated integer index marking
	    its position in the array.
	</li>
	<li>An element with a key uses the key as its index; the
	    key must be a constant integer expression.
	</li>
	<li>An element without a key uses the previous element's index plus one.
	    If the first element has no key, its index is zero.
	</li>
</ul>

2108
<p>
2109
Taking the address of a composite literal (§<a href="#Address_operators">Address operators</a>)
Rob Pike's avatar
Rob Pike committed
2110
generates a unique pointer to an instance of the literal's value.
2111 2112
</p>
<pre>
2113
var pointer *Point = &amp;Point{y: 1000}
2114
</pre>
2115

Rob Pike's avatar
Rob Pike committed
2116
<p>
2117 2118
The length of an array literal is the length specified in the LiteralType.
If fewer elements than the length are provided in the literal, the missing
Rob Pike's avatar
Rob Pike committed
2119
elements are set to the zero value for the array element type.
2120 2121 2122
It is an error to provide elements with index values outside the index range
of the array. The notation <code>...</code> specifies an array length equal
to the maximum element index plus one.
Rob Pike's avatar
Rob Pike committed
2123
</p>
2124

2125
<pre>
2126 2127 2128
buffer := [10]string{}               // len(buffer) == 10
intSet := [6]int{1, 2, 3, 5}         // len(intSet) == 6
days := [...]string{"Sat", "Sun"}    // len(days) == 2
2129
</pre>
2130

Rob Pike's avatar
Rob Pike committed
2131 2132
<p>
A slice literal describes the entire underlying array literal.
Rob Pike's avatar
Rob Pike committed
2133
Thus, the length and capacity of a slice literal are the maximum
2134
element index plus one. A slice literal has the form
Rob Pike's avatar
Rob Pike committed
2135
</p>
2136

2137
<pre>
2138
[]T{x1, x2, ... xn}
2139
</pre>
2140

Rob Pike's avatar
Rob Pike committed
2141 2142 2143
<p>
and is a shortcut for a slice operation applied to an array literal:
</p>
2144

2145
<pre>
2146
[n]T{x1, x2, ... xn}[0 : n]
2147
</pre>
2148

2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163
<p>
A parsing ambiguity arises when a composite literal using the
TypeName form of the LiteralType appears in the condition of an
"if", "for", or "switch" statement, because the braces surrounding
the expressions in the literal are confused with those introducing
a block of statements. To resolve the ambiguity in this rare case,
the composite literal must appear within
parentheses.
</p>

<pre>
if x == (T{a,b,c}[i]) { ... }
if (x == T{a,b,c}[i]) { ... }
</pre>

2164 2165 2166 2167 2168 2169
<p>
Examples of valid array, slice, and map literals:
</p>

<pre>
// list of prime numbers
2170
primes := []int{2, 3, 5, 7, 9, 11, 13, 17, 19, 991}
2171 2172

// vowels[ch] is true if ch is a vowel
2173
vowels := [128]bool{'a': true, 'e': true, 'i': true, 'o': true, 'u': true, 'y': true}
2174

2175 2176
// the array [10]float{-1, 0, 0, 0, -0.1, -0.1, 0, 0, 0, -1}
filter := [10]float{-1, 4: -0.1, -0.1, 9: -1}
2177 2178 2179 2180 2181 2182 2183 2184 2185

// frequencies in Hz for equal-tempered scale (A4 = 440Hz)
noteFrequency := map[string]float{
	"C0": 16.35, "D0": 18.35, "E0": 20.60, "F0": 21.83,
	"G0": 24.50, "A0": 27.50, "B0": 30.87,
}
</pre>


2186
<h3 id="Function_literals">Function literals</h3>
2187

Rob Pike's avatar
Rob Pike committed
2188 2189 2190 2191
<p>
A function literal represents an anonymous function.
It consists of a specification of the function type and a function body.
</p>
2192

2193
<pre class="ebnf">
Robert Griesemer's avatar
Robert Griesemer committed
2194
FunctionLit = FunctionType Body .
2195
</pre>
2196

2197
<pre>
Russ Cox's avatar
Russ Cox committed
2198
func(a, b int, z float) bool { return a*b &lt; int(z) }
2199
</pre>
2200

Rob Pike's avatar
Rob Pike committed
2201 2202 2203
<p>
A function literal can be assigned to a variable or invoked directly.
</p>
2204

2205
<pre>
Rob Pike's avatar
Rob Pike committed
2206 2207
f := func(x, y int) int { return x + y }
func(ch chan int) { ch &lt;- ACK } (reply_chan)
2208
</pre>
2209

Rob Pike's avatar
Rob Pike committed
2210 2211
<p>
Function literals are <i>closures</i>: they may refer to variables
2212 2213
defined in a surrounding function. Those variables are then shared between
the surrounding function and the function literal, and they survive as long
Rob Pike's avatar
Rob Pike committed
2214 2215
as they are accessible.
</p>
2216

2217

2218
<h3 id="Primary_expressions">Primary expressions</h3>
2219

2220 2221 2222 2223
<p>
Primary expressions are the operands for unary and binary expressions.
</p>

2224
<pre class="ebnf">
2225 2226
PrimaryExpr =
	Operand |
2227
	Conversion |
2228
	BuiltinCall |
2229 2230 2231
	PrimaryExpr Selector |
	PrimaryExpr Index |
	PrimaryExpr Slice |
2232
	PrimaryExpr TypeAssertion |
2233 2234
	PrimaryExpr Call .

2235 2236
Selector       = "." identifier .
Index          = "[" Expression "]" .
2237
Slice          = "[" Expression ":" [ Expression ] "]" .
2238
TypeAssertion  = "." "(" Type ")" .
2239
Call           = "(" [ ExpressionList [ "," ] ] ")" .
2240 2241 2242 2243 2244 2245 2246 2247
</pre>


<pre>
x
2
(s + ".txt")
f(3.1415, true)
2248
Point{1, 2}
2249 2250 2251 2252 2253 2254 2255 2256
m["foo"]
s[i : j + 1]
obj.color
Math.sin
f.p[i].x()
</pre>


2257
<h3 id="Selectors">Selectors</h3>
2258

Rob Pike's avatar
Rob Pike committed
2259
<p>
Robert Griesemer's avatar
Robert Griesemer committed
2260
A primary expression of the form
Rob Pike's avatar
Rob Pike committed
2261
</p>
Robert Griesemer's avatar
Robert Griesemer committed
2262

2263 2264 2265
<pre>
x.f
</pre>
Robert Griesemer's avatar
Robert Griesemer committed
2266

2267
<p>
Rob Pike's avatar
Rob Pike committed
2268 2269 2270 2271
denotes the field or method <code>f</code> of the value denoted by <code>x</code>
(or of <code>*x</code> if
<code>x</code> is of pointer type). The identifier <code>f</code>
is called the (field or method)
Robert Griesemer's avatar
Robert Griesemer committed
2272
<i>selector</i>; it must not be the <a href="#Blank_identifier">blank identifier</a>.
Rob Pike's avatar
Rob Pike committed
2273 2274
The type of the expression is the type of <code>f</code>.
</p>
2275
<p>
Rob Pike's avatar
Rob Pike committed
2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287
A selector <code>f</code> may denote a field or method <code>f</code> of
a type <code>T</code>, or it may refer
to a field or method <code>f</code> of a nested anonymous field of
<code>T</code>.
The number of anonymous fields traversed
to reach <code>f</code> is called its <i>depth</i> in <code>T</code>.
The depth of a field or method <code>f</code>
declared in <code>T</code> is zero.
The depth of a field or method <code>f</code> declared in
an anonymous field <code>A</code> in <code>T</code> is the
depth of <code>f</code> in <code>A</code> plus one.
</p>
2288
<p>
2289
The following rules apply to selectors:
Rob Pike's avatar
Rob Pike committed
2290 2291 2292 2293 2294 2295 2296 2297 2298
</p>
<ol>
<li>
For a value <code>x</code> of type <code>T</code> or <code>*T</code>
where <code>T</code> is not an interface type,
<code>x.f</code> denotes the field or method at the shallowest depth
in <code>T</code> where there
is such an <code>f</code>.
If there is not exactly one <code>f</code> with shallowest depth, the selector
2299
expression is illegal.
Rob Pike's avatar
Rob Pike committed
2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310
</li>
<li>
For a variable <code>x</code> of type <code>I</code> or <code>*I</code>
where <code>I</code> is an interface type,
<code>x.f</code> denotes the actual method with name <code>f</code> of the value assigned
to <code>x</code> if there is such a method.
If no value or <code>nil</code> was assigned to <code>x</code>, <code>x.f</code> is illegal.
</li>
<li>
In all other cases, <code>x.f</code> is illegal.
</ol>
2311
<p>
Rob Pike's avatar
Rob Pike committed
2312
Selectors automatically dereference pointers.
Rob Pike's avatar
Rob Pike committed
2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323
If <code>x</code> is of pointer type, <code>x.y</code>
is shorthand for <code>(*x).y</code>; if <code>y</code>
is also of pointer type, <code>x.y.z</code> is shorthand
for <code>(*(*x).y).z</code>, and so on.
If <code>*x</code> is of pointer type, dereferencing
must be explicit;
only one level of automatic dereferencing is provided.
For an <code>x</code> of type <code>T</code> containing an
anonymous field declared as <code>*A</code>,
<code>x.f</code> is a shortcut for <code>(*x.A).f</code>.
</p>
2324
<p>
Rob Pike's avatar
Rob Pike committed
2325 2326
For example, given the declarations:
</p>
2327

2328 2329
<pre>
type T0 struct {
2330
	x int
2331
}
2332

2333
func (recv *T0) M0()
2334

2335
type T1 struct {
2336
	y int
2337
}
2338

2339
func (recv T1) M1()
2340

2341
type T2 struct {
2342 2343 2344
	z int
	T1
	*T0
2345
}
Robert Griesemer's avatar
Robert Griesemer committed
2346

2347
func (recv *T2) M2()
Robert Griesemer's avatar
Robert Griesemer committed
2348

2349
var p *T2  // with p != nil and p.T1 != nil
2350
</pre>
Robert Griesemer's avatar
Robert Griesemer committed
2351

Rob Pike's avatar
Rob Pike committed
2352 2353 2354
<p>
one may write:
</p>
Robert Griesemer's avatar
Robert Griesemer committed
2355

2356 2357 2358 2359
<pre>
p.z         // (*p).z
p.y         // ((*p).T1).y
p.x         // (*(*p).T0).x
Robert Griesemer's avatar
Robert Griesemer committed
2360

2361 2362 2363 2364
p.M2        // (*p).M2
p.M1        // ((*p).T1).M1
p.M0        // ((*p).T0).M0
</pre>
Robert Griesemer's avatar
Robert Griesemer committed
2365 2366


2367
<!---
Robert Griesemer's avatar
Robert Griesemer committed
2368
<span class="alert">
2369
TODO: Specify what happens to receivers.
Robert Griesemer's avatar
Robert Griesemer committed
2370
</span>
2371
--->
Robert Griesemer's avatar
Robert Griesemer committed
2372

2373

2374
<h3 id="Indexes">Indexes</h3>
2375

Rob Pike's avatar
Rob Pike committed
2376
<p>
Robert Griesemer's avatar
Robert Griesemer committed
2377
A primary expression of the form
Rob Pike's avatar
Rob Pike committed
2378
</p>
Robert Griesemer's avatar
Robert Griesemer committed
2379

2380 2381 2382
<pre>
a[x]
</pre>
Robert Griesemer's avatar
Robert Griesemer committed
2383

Rob Pike's avatar
Rob Pike committed
2384
<p>
Rob Pike's avatar
Rob Pike committed
2385
denotes the element of the array, slice, string or map <code>a</code> indexed by <code>x</code>.
Rob Pike's avatar
Rob Pike committed
2386
The value <code>x</code> is called the
Rob Pike's avatar
Rob Pike committed
2387
<i>index</i> or <i>map key</i>, respectively. The following
Robert Griesemer's avatar
Robert Griesemer committed
2388
rules apply:
Rob Pike's avatar
Rob Pike committed
2389
</p>
2390

2391
<p>
Rob Pike's avatar
Rob Pike committed
2392
For <code>a</code> of type <code>A</code> or <code>*A</code>
Robert Griesemer's avatar
Robert Griesemer committed
2393 2394
where <code>A</code> is an <a href="#Array_types">array type</a>,
or for <code>a</code> of type <code>S</code> where <code>S</code> is a <a href="#Slice_types">slice type</a>:
Rob Pike's avatar
Rob Pike committed
2395
</p>
2396
<ul>
2397
	<li><code>x</code> must be an integer value and <code>0 &lt;= x &lt; len(a)</code></li>
Rob Pike's avatar
Rob Pike committed
2398
	<li><code>a[x]</code> is the array element at index <code>x</code> and the type of
2399
	  <code>a[x]</code> is the element type of <code>A</code></li>
Rob Pike's avatar
Rob Pike committed
2400 2401
	<li>if the index <code>x</code> is out of range,
	a <a href="#Run_time_panics">run-time panic</a> occurs</li>
2402
</ul>
2403 2404 2405

<p>
For <code>a</code> of type <code>T</code>
2406
where <code>T</code> is a <a href="#String_types">string type</a>:
2407 2408
</p>
<ul>
2409
	<li><code>x</code> must be an integer value and <code>0 &lt;= x &lt; len(a)</code></li>
2410
	<li><code>a[x]</code> is the byte at index <code>x</code> and the type of
2411
	  <code>a[x]</code> is <code>byte</code></li>
2412
	<li><code>a[x]</code> may not be assigned to
Rob Pike's avatar
Rob Pike committed
2413 2414
	<li>if the index <code>x</code> is out of range,
	a <a href="#Run_time_panics">run-time panic</a> occurs</li>
2415 2416
</ul>

2417
<p>
2418
For <code>a</code> of type <code>M</code>
Robert Griesemer's avatar
Robert Griesemer committed
2419
where <code>M</code> is a <a href="#Map_types">map type</a>:
Rob Pike's avatar
Rob Pike committed
2420
</p>
2421
<ul>
2422 2423 2424 2425 2426 2427 2428 2429 2430
	<li><code>x</code>'s type must be
	<a href="#Assignment_compatibility">assignment compatible</a>
	with the key type of <code>M</code></li>
	<li>if the map contains an entry with key <code>x</code>,
	  <code>a[x]</code> is the map value with key <code>x</code>
	  and the type of <code>a[x]</code> is the value type of <code>M</code></li>
	<li>if the map does not contain such an entry,
	  <code>a[x]</code> is the <a href="#The_zero_value">zero value</a>
	  for the value type of <code>M</code></li>
2431
</ul>
Robert Griesemer's avatar
Robert Griesemer committed
2432

2433
<p>
2434
Otherwise <code>a[x]</code> is illegal.
Rob Pike's avatar
Rob Pike committed
2435 2436 2437
</p>

<p>
2438 2439
An index expression on a map <code>a</code> of type <code>map[K]V</code>
may be used in an assignment or initialization of the special form
Rob Pike's avatar
Rob Pike committed
2440 2441 2442
</p>

<pre>
2443 2444 2445
v, ok = a[x]
v, ok := a[x]
var v, ok = a[x]
Rob Pike's avatar
Rob Pike committed
2446 2447 2448
</pre>

<p>
2449 2450 2451 2452 2453
where the result of the index expression is a pair of values with types
<code>(V, bool)</code>. In this form, the value of <code>ok</code> is
<code>true</code> if the key <code>x</code> is present in the map, and
<code>false</code> otherwise. The value of <code>v</code> is the value
<code>a[x]</code> as in the single-result form.
Rob Pike's avatar
Rob Pike committed
2454 2455 2456 2457 2458
</p>

<p>
Similarly, if an assignment to a map has the special form
</p>
Robert Griesemer's avatar
Robert Griesemer committed
2459

Rob Pike's avatar
Rob Pike committed
2460
<pre>
2461
a[x] = v, ok
Rob Pike's avatar
Rob Pike committed
2462 2463 2464 2465 2466 2467 2468 2469
</pre>

<p>
and boolean <code>ok</code> has the value <code>false</code>,
the entry for key <code>x</code> is deleted from the map; if
<code>ok</code> is <code>true</code>, the construct acts like
a regular assignment to an element of the map.
</p>
2470

2471

2472
<h3 id="Slices">Slices</h3>
2473

Rob Pike's avatar
Rob Pike committed
2474
<p>
2475
For a string, array, or slice <code>a</code>, the primary expression
Rob Pike's avatar
Rob Pike committed
2476
</p>
2477

2478
<pre>
2479
a[lo : hi]
2480
</pre>
2481

Rob Pike's avatar
Rob Pike committed
2482
<p>
2483 2484 2485 2486 2487 2488 2489 2490
constructs a substring or slice. The index expressions <code>lo</code> and
<code>hi</code> select which elements appear in the result. The result has
indexes starting at 0 and length equal to
<code>hi</code>&nbsp;-&nbsp;<code>lo</code>.
After slicing the array <code>a</code>
</p>

<pre>
2491 2492
a := [5]int{1, 2, 3, 4, 5}
s := a[1:4]
2493 2494 2495 2496
</pre>

<p>
the slice <code>s</code> has type <code>[]int</code>, length 3, capacity 4, and elements
Rob Pike's avatar
Rob Pike committed
2497
</p>
2498

2499 2500 2501
<pre>
s[0] == 2
s[1] == 3
2502
s[2] == 4
2503
</pre>
2504

Rob Pike's avatar
Rob Pike committed
2505
<p>
2506 2507
For convenience, the <code>hi</code> expression may be omitted; the notation
<code>a[lo :]</code> is shorthand for <code>a[lo : len(a)]</code>.
2508
For arrays or strings, the indexes
Rob Pike's avatar
Rob Pike committed
2509 2510
<code>lo</code> and <code>hi</code> must satisfy
0 &lt;= <code>lo</code> &lt;= <code>hi</code> &lt;= length;
2511
for slices, the upper bound is the capacity rather than the length.
2512 2513
</p>

2514
<p>
2515 2516 2517 2518
If the sliced operand is a string or slice, the result of the slice operation
is a string or slice of the same type.
If the sliced operand is an array, the result of the slice operation is a slice
with the same element type as the array.
Rob Pike's avatar
Rob Pike committed
2519
</p>
2520 2521


2522
<h3 id="Type_assertions">Type assertions</h3>
2523

Rob Pike's avatar
Rob Pike committed
2524
<p>
Robert Griesemer's avatar
Robert Griesemer committed
2525 2526
For an expression <code>x</code> of <a href="#Interface_types">interface type</a>
and a type <code>T</code>, the primary expression
Rob Pike's avatar
Rob Pike committed
2527
</p>
2528

2529 2530 2531
<pre>
x.(T)
</pre>
2532

2533
<p>
Robert Griesemer's avatar
Robert Griesemer committed
2534
asserts that <code>x</code> is not <code>nil</code>
Russ Cox's avatar
Russ Cox committed
2535
and that the value stored in <code>x</code> is of type <code>T</code>.
2536
The notation <code>x.(T)</code> is called a <i>type assertion</i>.
Rob Pike's avatar
Rob Pike committed
2537 2538
</p>
<p>
2539
More precisely, if <code>T</code> is not an interface type, <code>x.(T)</code> asserts
Rob Pike's avatar
Rob Pike committed
2540
that the dynamic type of <code>x</code> is identical to the type <code>T</code>
2541
<a href="#Type_identity_and_compatibility">Type identity and compatibility</a>).
2542
If <code>T</code> is an interface type, <code>x.(T)</code> asserts that the dynamic type
Rob Pike's avatar
Rob Pike committed
2543
of <code>x</code> implements the interface <code>T</code><a href="#Interface_types">Interface types</a>).
Rob Pike's avatar
Rob Pike committed
2544
</p>
2545
<p>
2546
If the type assertion holds, the value of the expression is the value
Rob Pike's avatar
Rob Pike committed
2547 2548 2549
stored in <code>x</code> and its type is <code>T</code>. If the type assertion is false,
a <a href="#Run_time_panics">run-time panic</a> occurs.
In other words, even though the dynamic type of <code>x</code>
2550
is known only at run-time, the type of <code>x.(T)</code> is
Rob Pike's avatar
Rob Pike committed
2551 2552
known to be <code>T</code> in a correct program.
</p>
2553
<p>
Rob Pike's avatar
Rob Pike committed
2554
If a type assertion is used in an assignment or initialization of the form
Rob Pike's avatar
Rob Pike committed
2555
</p>
2556

2557 2558 2559
<pre>
v, ok = x.(T)
v, ok := x.(T)
Rob Pike's avatar
Rob Pike committed
2560
var v, ok = x.(T)
2561
</pre>
2562

2563
<p>
2564 2565
the result of the assertion is a pair of values with types <code>(T, bool)</code>.
If the assertion holds, the expression returns the pair <code>(x.(T), true)</code>;
Rob Pike's avatar
Rob Pike committed
2566
otherwise, the expression returns <code>(Z, false)</code> where <code>Z</code>
Robert Griesemer's avatar
Robert Griesemer committed
2567
is the <a href="#The_zero_value">zero value</a> for type <code>T</code>.
Rob Pike's avatar
Rob Pike committed
2568
No run-time panic occurs in this case.
2569
The type assertion in this construct thus acts like a function call
2570
returning a value and a boolean indicating success.  (§<a href="#Assignments">Assignments</a>)
Rob Pike's avatar
Rob Pike committed
2571
</p>
2572

2573

2574
<h3 id="Calls">Calls</h3>
2575

2576
<p>
Rob Pike's avatar
Rob Pike committed
2577 2578
Given an expression <code>f</code> of function type
<code>F</code>,
Rob Pike's avatar
Rob Pike committed
2579
</p>
2580

2581
<pre>
Rob Pike's avatar
Rob Pike committed
2582
f(a1, a2, ... an)
2583
</pre>
2584

2585
<p>
Rob Pike's avatar
Rob Pike committed
2586
calls <code>f</code> with arguments <code>a1, a2, ... an</code>.
2587
Except for one special case, arguments must be single-valued expressions
2588
<a href="#Assignment_compatibility">assignment compatible</a> with the parameter types of
Rob Pike's avatar
Rob Pike committed
2589 2590 2591 2592 2593 2594 2595
<code>F</code> and are evaluated before the function is called.
The type of the expression is the result type
of <code>F</code>.
A method invocation is similar but the method itself
is specified as a selector upon a value of the receiver type for
the method.
</p>
2596

2597
<pre>
Robert Griesemer's avatar
Robert Griesemer committed
2598
math.Atan2(x, y)    // function call
2599
var pt *Point
Rob Pike's avatar
Rob Pike committed
2600
pt.Scale(3.5)  // method call with receiver pt
2601
</pre>
2602

2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617
<p>
As a special case, if the return parameters of a function or method
<code>g</code> are equal in number and individually assignment
compatible with the parameters of another function or method
<code>f</code>, then the call <code>f(g(<i>parameters_of_g</i>))</code>
will invoke <code>f</code> after binding the return values of
<code>g</code> to the parameters of <code>f</code> in order.  The call
of <code>f</code> must contain no parameters other than the call of <code>g</code>.
If <code>f</code> has a final <code>...</code> parameter, it is
assigned the return values of <code>g</code> that remain after
assignment of regular parameters.
</p>

<pre>
func Split(s string, pos int) (string, string) {
2618
	return s[0:pos], s[pos:]
2619 2620 2621 2622 2623 2624 2625
}

func Join(s, t string) string {
	return s + t
}

if Join(Split(value, len(value)/2)) != value {
2626
	log.Crash("test fails")
2627 2628 2629
}
</pre>

Rob Pike's avatar
Rob Pike committed
2630
<p>
Robert Griesemer's avatar
Robert Griesemer committed
2631
A method call <code>x.m()</code> is valid if the method set of
Rob Pike's avatar
Rob Pike committed
2632 2633 2634
(the type of) <code>x</code> contains <code>m</code> and the
argument list is compatible with the parameter list of <code>m</code>.
If <code>x</code> is <a href="#Address_operators">addressable</a> and <code>&amp;x</code>'s method
Robert Griesemer's avatar
Robert Griesemer committed
2635 2636
set contains <code>m</code>, <code>x.m()</code> is shorthand
for <code>(&amp;x).m()</code>:
Rob Pike's avatar
Rob Pike committed
2637
</p>
2638

2639
<pre>
2640
var p Point
Rob Pike's avatar
Rob Pike committed
2641
p.Scale(3.5)
2642
</pre>
2643

2644
<p>
2645
There is no distinct method type and there are no method literals.
Rob Pike's avatar
Rob Pike committed
2646
</p>
2647

2648
<h3 id="Passing_arguments_to_..._parameters">Passing arguments to <code>...</code> parameters</h3>
2649

Rob Pike's avatar
Rob Pike committed
2650 2651 2652 2653 2654 2655 2656 2657
<p>
When a function <code>f</code> has a <code>...</code> parameter,
it is always the last formal parameter. Within calls to <code>f</code>,
the arguments before the <code>...</code> are treated normally.
After those, an arbitrary number (including zero) of trailing
arguments may appear in the call and are bound to the <code>...</code>
parameter.
</p>
2658

2659
<p>
2660 2661 2662 2663 2664 2665 2666 2667 2668
Within <code>f</code>, a <code>...</code> parameter with no
specified type has static type <code>interface{}</code> (the empty
interface). For each call, its dynamic type is a structure whose
sequential fields are the trailing arguments of the call.  That is,
the actual arguments provided for a <code>...</code> parameter are
wrapped into a struct that is passed to the function instead of the
actual arguments.  Using the <a href="#Package_unsafe">reflection</a>
interface, <code>f</code> may unpack the elements of the dynamic
type to recover the actual arguments.
Rob Pike's avatar
Rob Pike committed
2669
</p>
2670

Rob Pike's avatar
Rob Pike committed
2671 2672 2673
<p>
Given the function and call
</p>
2674
<pre>
Rob Pike's avatar
Rob Pike committed
2675
func Fprintf(f io.Writer, format string, args ...)
2676
Fprintf(os.Stdout, "%s %d", "hello", 23)
2677
</pre>
2678

Rob Pike's avatar
Rob Pike committed
2679 2680 2681 2682 2683
<p>
Within <code>Fprintf</code>, the dynamic type of <code>args</code> for this
call will be, schematically,
<code> struct { string; int }</code>.
</p>
2684

2685 2686 2687 2688 2689 2690 2691 2692 2693 2694
<p>
If the final parameter of <code>f</code> has type <code>... T</code>,
within the function it is equivalent to a parameter of type
<code>[]T</code>.  At each call of <code>f</code>, the actual
arguments provided for the <code>... T</code> parameter are placed
into a new slice of type <code>[]T</code> whose successive elements are
the actual arguments.  The length of the slice is therefore the
number of arguments bound to the <code>... T</code> parameter and
may differ for each call site.
</p>
2695

Rob Pike's avatar
Rob Pike committed
2696
<p>
2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714
Given the function and call
</p>
<pre>
func Greeting(prefix string, who ... string)
Greeting("hello:", "Joe", "Anna", "Eileen")
</pre>

<p>
Within <code>Greeting</code>, <code>who</code> will have value
<code>[]string{"Joe", "Anna", "Eileen")</code>
</p>


<p>
As a special case, if a function passes its own <code>...</code> parameter,
with or without specified type, as the argument
for a <code>...</code> in a call to another function with a <code>...</code> parameter
of identical type,
Rob Pike's avatar
Rob Pike committed
2715
the parameter is not wrapped again but passed directly. In short, a formal <code>...</code>
2716 2717 2718
parameter is passed unchanged as an actual <code>...</code> parameter provided the
types match.
</p>
2719

2720
<h3 id="Operators">Operators</h3>
2721

Rob Pike's avatar
Rob Pike committed
2722
<p>
2723
Operators combine operands into expressions.
Rob Pike's avatar
Rob Pike committed
2724
</p>
2725

2726
<pre class="ebnf">
2727
Expression = UnaryExpr | Expression binary_op UnaryExpr .
Rob Pike's avatar
Rob Pike committed
2728
UnaryExpr  = PrimaryExpr | unary_op UnaryExpr .
2729

Rob Pike's avatar
Rob Pike committed
2730 2731 2732 2733 2734
binary_op  = log_op | com_op | rel_op | add_op | mul_op .
log_op     = "||" | "&amp;&amp;" .
com_op     = "&lt;-" .
rel_op     = "==" | "!=" | "&lt;" | "&lt;=" | ">" | ">=" .
add_op     = "+" | "-" | "|" | "^" .
Robert Griesemer's avatar
Robert Griesemer committed
2735
mul_op     = "*" | "/" | "%" | "&lt;&lt;" | "&gt;&gt;" | "&amp;" | "&amp;^" .
2736

Rob Pike's avatar
Rob Pike committed
2737
unary_op   = "+" | "-" | "!" | "^" | "*" | "&amp;" | "&lt;-" .
2738
</pre>
2739

2740
<p>
2741 2742
Comparisons are discussed <a href="#Comparison_operators">elsewhere</a>.
For other binary operators, the operand types must be identical
2743
<a href="#Properties_of_types_and_values">Properties of types and values</a>)
2744 2745 2746
unless the operation involves channels, shifts, or untyped <a href="#Constants">constants</a>.
For operations involving constants only, see the section on
<a href="#Constant_expressions">constant expressions</a>.
Rob Pike's avatar
Rob Pike committed
2747
</p>
2748

2749
<p>
2750 2751 2752
In a channel send, the first operand is always a channel and the second
must be a value <a href="#Assignment_compatibility">assignment compatible</a>
with the channel's element type.
2753
</p>
2754

2755 2756
<p>
Except for shift operations,
2757 2758 2759
if one operand is an untyped <a href="#Constants">constant</a>
and the other operand is not, the constant is <a href="#Conversions">converted</a>
to the type of the other operand.
2760
</p>
2761

2762 2763
<p>
The right operand in a shift operation must have unsigned integer type
2764
or be an untyped constant that can be converted to unsigned integer type.
2765
</p>
Rob Pike's avatar
Rob Pike committed
2766

2767
<p>
2768 2769 2770
If the left operand of a non-constant shift operation is an untyped constant,
the type of constant is what it would be if the shift operation were replaced by
the left operand alone.
2771
</p>
2772

2773
<pre>
2774 2775 2776 2777 2778 2779
var s uint = 33
var i = 1&lt;&lt;s          // 1 has type int
var j = int32(1&lt;&lt;s)   // 1 has type int32; j == 0
var u = uint64(1&lt;&lt;s)  // 1 has type uint64; u == 1&lt;&lt;33
var f = float(1&lt;&lt;s)   // illegal: 1 has type float, cannot shift
var g = float(1&lt;&lt;33)  // legal; 1&lt;&lt;33 is a constant shift operation; g == 1&lt;&lt;33
2780
</pre>
2781

2782
<h3 id="Operator_precedence">Operator precedence</h3>
2783
<p>
Russ Cox's avatar
Russ Cox committed
2784 2785
Unary operators have the highest precedence.
As the  <code>++</code> and <code>--</code> operators form
Rob Pike's avatar
Rob Pike committed
2786
statements, not expressions, they fall
Russ Cox's avatar
Russ Cox committed
2787
outside the operator hierarchy.
Rob Pike's avatar
Rob Pike committed
2788 2789 2790 2791
As a consequence, statement <code>*p++</code> is the same as <code>(*p)++</code>.
<p>
There are six precedence levels for binary operators.
Multiplication operators bind strongest, followed by addition
2792
operators, comparison operators, <code>&lt;-</code> (channel send),
Rob Pike's avatar
Rob Pike committed
2793 2794
<code>&amp;&amp;</code> (logical and), and finally <code>||</code> (logical or):
</p>
2795

Rob Pike's avatar
Rob Pike committed
2796
<pre class="grammar">
2797
Precedence    Operator
Robert Griesemer's avatar
Robert Griesemer committed
2798
    6             *  /  %  &lt;&lt;  &gt;&gt;  &amp;  &amp;^
2799 2800 2801 2802 2803 2804
    5             +  -  |  ^
    4             ==  !=  &lt;  &lt;=  >  >=
    3             &lt;-
    2             &amp;&amp;
    1             ||
</pre>
2805

Rob Pike's avatar
Rob Pike committed
2806
<p>
2807
Binary operators of the same precedence associate from left to right.
2808
For instance, <code>x / y * z</code> is the same as <code>(x / y) * z</code>.
Rob Pike's avatar
Rob Pike committed
2809
</p>
2810

2811 2812 2813 2814
<pre>
+x
23 + 3*x[i]
x &lt;= f()
Robert Griesemer's avatar
Robert Griesemer committed
2815
^a &gt;&gt; b
2816
f() || g()
2817
x == y+1 &amp;&amp; &lt;-chan_ptr > 0
2818
</pre>
2819 2820


2821
<h3 id="Arithmetic_operators">Arithmetic operators</h3>
2822
<p>
2823
Arithmetic operators apply to numeric values and yield a result of the same
Rob Pike's avatar
Rob Pike committed
2824
type as the first operand. The four standard arithmetic operators (<code>+</code>,
Rob Pike's avatar
Rob Pike committed
2825 2826
<code>-</code>,  <code>*</code>, <code>/</code>) apply to integer,
floating-point, and complex types; <code>+</code> also applies
2827
to strings. All other arithmetic operators apply to integers only.
Rob Pike's avatar
Rob Pike committed
2828
</p>
2829

Rob Pike's avatar
Rob Pike committed
2830
<pre class="grammar">
Rob Pike's avatar
Rob Pike committed
2831 2832 2833 2834
+    sum                    integers, floats, complex values, strings
-    difference             integers, floats, complex values
*    product                integers, floats, complex values
/    quotient               integers, floats, complex values
2835
%    remainder              integers
2836

2837 2838 2839 2840
&amp;    bitwise and            integers
|    bitwise or             integers
^    bitwise xor            integers
&amp;^   bit clear (and not)    integers
2841

Robert Griesemer's avatar
Robert Griesemer committed
2842 2843
&lt;&lt;   left shift             integer &lt;&lt; unsigned integer
&gt;&gt;   right shift            integer &gt;&gt; unsigned integer
2844
</pre>
2845

Rob Pike's avatar
Rob Pike committed
2846 2847 2848 2849
<p>
Strings can be concatenated using the <code>+</code> operator
or the <code>+=</code> assignment operator:
</p>
2850

2851
<pre>
2852 2853
s := "hi" + string(c)
s += " and good bye"
2854
</pre>
2855

2856
<p>
Rob Pike's avatar
Rob Pike committed
2857 2858 2859 2860 2861
String addition creates a new string by concatenating the operands.
</p>
<p>
For integer values, <code>/</code> and <code>%</code> satisfy the following relationship:
</p>
2862

2863 2864 2865
<pre>
(a / b) * b + a % b == a
</pre>
2866

Rob Pike's avatar
Rob Pike committed
2867 2868
<p>
with <code>(a / b)</code> truncated towards zero.
2869
Examples:
Rob Pike's avatar
Rob Pike committed
2870
</p>
2871

2872 2873 2874 2875 2876 2877 2878
<pre>
 x     y     x / y     x % y
 5     3       1         2
-5     3      -1        -2
 5    -3      -1         2
-5    -3       1        -2
</pre>
2879

Rob Pike's avatar
Rob Pike committed
2880 2881
<p>
If the dividend is positive and the divisor is a constant power of 2,
2882
the division may be replaced by a right shift, and computing the remainder may
2883
be replaced by a bitwise "and" operation:
Rob Pike's avatar
Rob Pike committed
2884
</p>
2885

2886
<pre>
Robert Griesemer's avatar
Robert Griesemer committed
2887
 x     x / 4     x % 4     x &gt;&gt; 2     x &amp; 3
2888 2889 2890
 11      2         3         2          3
-11     -2        -3        -3          1
</pre>
2891

Rob Pike's avatar
Rob Pike committed
2892
<p>
2893 2894
The shift operators shift the left operand by the shift count specified by the
right operand. They implement arithmetic shifts if the left operand is a signed
Rob Pike's avatar
Rob Pike committed
2895 2896 2897 2898
integer and logical shifts if it is an unsigned integer. The shift count must
be an unsigned integer. There is no upper limit on the shift count. Shifts behave
as if the left operand is shifted <code>n</code> times by 1 for a shift
count of <code>n</code>.
Robert Griesemer's avatar
Robert Griesemer committed
2899 2900
As a result, <code>x &lt;&lt; 1</code> is the same as <code>x*2</code>
and <code>x &gt;&gt; 1</code> is the same as
Robert Griesemer's avatar
Robert Griesemer committed
2901
<code>x/2</code> but truncated towards negative infinity.
Rob Pike's avatar
Rob Pike committed
2902
</p>
2903

Rob Pike's avatar
Rob Pike committed
2904 2905 2906
<p>
For integer operands, the unary operators
<code>+</code>, <code>-</code>, and <code>^</code> are defined as
Robert Griesemer's avatar
Robert Griesemer committed
2907
follows:
Rob Pike's avatar
Rob Pike committed
2908
</p>
2909

Rob Pike's avatar
Rob Pike committed
2910
<pre class="grammar">
2911 2912
+x                          is 0 + x
-x    negation              is 0 - x
Russ Cox's avatar
Russ Cox committed
2913 2914
^x    bitwise complement    is m ^ x  with m = "all bits set to 1" for unsigned x
                                      and  m = -1 for signed x
2915
</pre>
Robert Griesemer's avatar
Robert Griesemer committed
2916

2917
<p>
2918
For floating-point numbers,
2919 2920 2921
<code>+x</code> is the same as <code>x</code>,
while <code>-x</code> is the negation of <code>x</code>.
</p>
Robert Griesemer's avatar
Robert Griesemer committed
2922

2923
<h3 id="Integer_overflow">Integer overflow</h3>
Robert Griesemer's avatar
Robert Griesemer committed
2924

Rob Pike's avatar
Rob Pike committed
2925 2926 2927 2928 2929
<p>
For unsigned integer values, the operations <code>+</code>,
<code>-</code>, <code>*</code>, and <code>&lt;&lt;</code> are
computed modulo 2<sup><i>n</i></sup>, where <i>n</i> is the bit width of
the unsigned integer's type
2930
<a href="#Numeric_types">Numeric types</a>). Loosely speaking, these unsigned integer operations
Robert Griesemer's avatar
Robert Griesemer committed
2931
discard high bits upon overflow, and programs may rely on ``wrap around''.
Rob Pike's avatar
Rob Pike committed
2932
</p>
2933
<p>
Rob Pike's avatar
Rob Pike committed
2934 2935
For signed integers, the operations <code>+</code>,
<code>-</code>, <code>*</code>, and <code>&lt;&lt;</code> may legally
Robert Griesemer's avatar
Robert Griesemer committed
2936 2937
overflow and the resulting value exists and is deterministically defined
by the signed integer representation, the operation, and its operands.
Rob Pike's avatar
Rob Pike committed
2938
No exception is raised as a result of overflow. A
Robert Griesemer's avatar
Robert Griesemer committed
2939
compiler may not optimize code under the assumption that overflow does
Rob Pike's avatar
Rob Pike committed
2940 2941
not occur. For instance, it may not assume that <code>x &lt; x + 1</code> is always true.
</p>
2942 2943


2944
<h3 id="Comparison_operators">Comparison operators</h3>
2945

Rob Pike's avatar
Rob Pike committed
2946
<p>
2947
Comparison operators yield a value of type <code>bool</code>.
Rob Pike's avatar
Rob Pike committed
2948
The operators <code>==</code> and <code>!=</code> apply
2949
to operands of all types except arrays and structs.
Rob Pike's avatar
Rob Pike committed
2950 2951
All other comparison operators apply only to integer, floating-point
and string values.
Rob Pike's avatar
Rob Pike committed
2952
</p>
2953

Rob Pike's avatar
Rob Pike committed
2954
<pre class="grammar">
2955 2956 2957 2958 2959 2960 2961
==    equal
!=    not equal
<     less
<=    less or equal
>     greater
>=    greater or equal
</pre>
2962

Rob Pike's avatar
Rob Pike committed
2963
<p>
2964
Operands of numeric type are compared in the usual way.
Rob Pike's avatar
Rob Pike committed
2965 2966
</p>
<p>
2967
Operands of string type are compared byte-wise (lexically).
Rob Pike's avatar
Rob Pike committed
2968
</p>
2969
<p>
2970 2971
Operands of boolean type are equal if they are either both <code>true</code>
or both <code>false</code>.
Rob Pike's avatar
Rob Pike committed
2972
</p>
2973
<p>
Rob Pike's avatar
Rob Pike committed
2974
The rules for comparison of composite types are described in the
2975
section on §<a href="#Comparison_compatibility">Comparison compatibility</a>.
Rob Pike's avatar
Rob Pike committed
2976
</p>
2977

2978

2979
<h3 id="Logical_operators">Logical operators</h3>
2980

Rob Pike's avatar
Rob Pike committed
2981
<p>
2982 2983
Logical operators apply to <a href="#Boolean_types">boolean</a> values
and yield a result of the same type as the operands.
2984
The right operand is evaluated conditionally.
Rob Pike's avatar
Rob Pike committed
2985
</p>
2986

Rob Pike's avatar
Rob Pike committed
2987
<pre class="grammar">
2988 2989 2990 2991
&amp;&amp;    conditional and    p &amp;&amp; q  is  "if p then q else false"
||    conditional or     p || q  is  "if p then true else q"
!     not                !p      is  "not p"
</pre>
2992 2993


2994
<h3 id="Address_operators">Address operators</h3>
2995

Rob Pike's avatar
Rob Pike committed
2996
<p>
Rob Pike's avatar
Rob Pike committed
2997 2998 2999 3000 3001 3002 3003
The address-of operator <code>&amp;</code> generates the address of its operand,
which must be <i>addressable</i>,
that is, either a variable, pointer indirection, array or slice indexing
operation,
or a field selector of an addressable struct operand.
Given an operand of pointer type, the pointer indirection
operator <code>*</code> retrieves the value pointed
Rob Pike's avatar
Rob Pike committed
3004 3005 3006 3007 3008 3009 3010 3011 3012 3013
to by the operand.
</p>

<pre>
&amp;x
&amp;a[f(2)]
*p
*pf(x)
</pre>

Rob Pike's avatar
Rob Pike committed
3014 3015
<h3 id="Communication_operators">Communication operators</h3>

3016
<p>
Rob Pike's avatar
Rob Pike committed
3017
The term <i>channel</i> means "value of <a href="#Channel_types">channel type</a>".
Rob Pike's avatar
Rob Pike committed
3018
</p>
3019
<p>
Rob Pike's avatar
Rob Pike committed
3020 3021
The send operation uses the binary operator "&lt;-", which operates on
a channel and a value (expression):
Rob Pike's avatar
Rob Pike committed
3022
</p>
3023

3024
<pre>
3025
ch &lt;- 3
3026
</pre>
3027

Rob Pike's avatar
Rob Pike committed
3028
<p>
Rob Pike's avatar
Rob Pike committed
3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042
The send operation sends the value on the channel.  Both the channel
and the expression are evaluated before communication begins.
Communication blocks until the send can proceed, at which point the
value is transmitted on the channel.
A send on an unbuffered channel can proceed if a receiver is ready.
A send on a buffered channel can proceed if there is room in the buffer.
</p>
<p>
If the send operation appears in an expression context, the value
of the expression is a boolean and the operation is non-blocking.
The value of the boolean reports true if the communication succeeded,
false if it did not. (The channel and
the expression to be sent are evaluated regardless.)
These two examples are equivalent:
Rob Pike's avatar
Rob Pike committed
3043
</p>
3044

3045
<pre>
3046
ok := ch &lt;- 3
Rob Pike's avatar
Rob Pike committed
3047 3048
if ok { print("sent") } else { print("not sent") }

3049
if ch &lt;- 3 { print("sent") } else { print("not sent") }
3050
</pre>
3051

Rob Pike's avatar
Rob Pike committed
3052
<p>
Rob Pike's avatar
Rob Pike committed
3053 3054 3055 3056
In other words, if the program tests the value of a send operation,
the send is non-blocking and the value of the expression is the
success of the operation.  If the program does not test the value,
the operation blocks until it succeeds.
Rob Pike's avatar
Rob Pike committed
3057 3058
</p>
<p>
Rob Pike's avatar
Rob Pike committed
3059 3060 3061
The receive operation uses the prefix unary operator "&lt;-".
The value of the expression is the value received, whose type
is the element type of the channel.
Rob Pike's avatar
Rob Pike committed
3062
</p>
3063

3064
<pre>
3065
&lt;-ch
3066
</pre>
3067

Rob Pike's avatar
Rob Pike committed
3068
<p>
Rob Pike's avatar
Rob Pike committed
3069 3070 3071 3072
The expression blocks until a value is available, which then can
be assigned to a variable or used like any other expression.
If the receive expression does not save the value, the value is
discarded.
Rob Pike's avatar
Rob Pike committed
3073
</p>
3074

3075
<pre>
3076 3077 3078 3079
v1 := &lt;-ch
v2 = &lt;-ch
f(&lt;-ch)
&lt;-strobe  // wait until clock pulse
3080
</pre>
3081

Rob Pike's avatar
Rob Pike committed
3082
<p>
Rob Pike's avatar
Rob Pike committed
3083
If a receive expression is used in an assignment or initialization of the form
Rob Pike's avatar
Rob Pike committed
3084
</p>
3085

3086
<pre>
3087 3088 3089
x, ok = &lt;-ch
x, ok := &lt;-ch
var x, ok = &lt;-ch
3090
</pre>
3091

Rob Pike's avatar
Rob Pike committed
3092
<p>
Rob Pike's avatar
Rob Pike committed
3093 3094 3095 3096 3097 3098 3099
the receive operation becomes non-blocking.
If the operation can proceed, the boolean variable
<code>ok</code> will be set to <code>true</code>
and the value stored in <code>x</code>; otherwise
<code>ok</code> is set
to <code>false</code> and <code>x</code> is set to the
zero value for its type (§<a href="#The_zero_value">The zero value</a>).
Rob Pike's avatar
Rob Pike committed
3100
</p>
3101

3102
<!---
Rob Pike's avatar
Rob Pike committed
3103
<p>
Robert Griesemer's avatar
Robert Griesemer committed
3104 3105
<span class="alert">TODO: Probably in a separate section, communication semantics
need to be presented regarding send, receive, select, and goroutines.</span>
Rob Pike's avatar
Rob Pike committed
3106
</p>
3107
--->
Rob Pike's avatar
Rob Pike committed
3108 3109 3110

<h3 id="Method_expressions">Method expressions</h3>

3111
<p>
Rob Pike's avatar
Rob Pike committed
3112 3113 3114 3115
If <code>M</code> is in the method set of type <code>T</code>,
<code>T.M</code> is a function that is callable as a regular function
with the same arguments as <code>M</code> prefixed by an additional
argument that is the receiver of the method.
Rob Pike's avatar
Rob Pike committed
3116
</p>
3117

3118
<pre class="ebnf">
Rob Pike's avatar
Rob Pike committed
3119 3120
MethodExpr    = ReceiverType "." MethodName .
ReceiverType  = TypeName | "(" "*" TypeName ")" .
3121
</pre>
3122

Rob Pike's avatar
Rob Pike committed
3123
<p>
Rob Pike's avatar
Rob Pike committed
3124 3125 3126
Consider a struct type <code>T</code> with two methods,
<code>Mv</code>, whose receiver is of type <code>T</code>, and
<code>Mp</code>, whose receiver is of type <code>*T</code>.
Rob Pike's avatar
Rob Pike committed
3127
</p>
3128

3129
<pre>
Rob Pike's avatar
Rob Pike committed
3130
type T struct {
3131
	a int
3132
}
Rob Pike's avatar
Rob Pike committed
3133 3134
func (tv  T) Mv(a int)   int   { return 0 }  // value receiver
func (tp *T) Mp(f float) float { return 1 }  // pointer receiver
3135
var t T
3136
</pre>
3137

Rob Pike's avatar
Rob Pike committed
3138
<p>
Rob Pike's avatar
Rob Pike committed
3139
The expression
Rob Pike's avatar
Rob Pike committed
3140
</p>
3141

Rob Pike's avatar
Rob Pike committed
3142 3143 3144
<pre>
T.Mv
</pre>
3145

3146
<p>
Rob Pike's avatar
Rob Pike committed
3147 3148
yields a function equivalent to <code>Mv</code> but
with an explicit receiver as its first argument; it has signature
Rob Pike's avatar
Rob Pike committed
3149
</p>
3150

3151
<pre>
Russ Cox's avatar
Russ Cox committed
3152
func(tv T, a int) int
3153
</pre>
3154

Rob Pike's avatar
Rob Pike committed
3155
<p>
Rob Pike's avatar
Rob Pike committed
3156 3157
That function may be called normally with an explicit receiver, so
these three invocations are equivalent:
Rob Pike's avatar
Rob Pike committed
3158
</p>
3159

3160
<pre>
Rob Pike's avatar
Rob Pike committed
3161 3162 3163
t.Mv(7)
T.Mv(t, 7)
f := T.Mv; f(t, 7)
3164
</pre>
3165

Rob Pike's avatar
Rob Pike committed
3166
<p>
Rob Pike's avatar
Rob Pike committed
3167
Similarly, the expression
Rob Pike's avatar
Rob Pike committed
3168
</p>
Rob Pike's avatar
Rob Pike committed
3169 3170 3171 3172 3173

<pre>
(*T).Mp
</pre>

3174
<p>
Rob Pike's avatar
Rob Pike committed
3175
yields a function value representing <code>Mp</code> with signature
Rob Pike's avatar
Rob Pike committed
3176
</p>
3177

3178
<pre>
Russ Cox's avatar
Russ Cox committed
3179
func(tp *T, f float) float
3180
</pre>
3181

Rob Pike's avatar
Rob Pike committed
3182
<p>
Rob Pike's avatar
Rob Pike committed
3183 3184
For a method with a value receiver, one can derive a function
with an explicit pointer receiver, so
Rob Pike's avatar
Rob Pike committed
3185
</p>
3186

3187
<pre>
Rob Pike's avatar
Rob Pike committed
3188
(*T).Mv
3189
</pre>
3190

Rob Pike's avatar
Rob Pike committed
3191
<p>
Rob Pike's avatar
Rob Pike committed
3192
yields a function value representing <code>Mv</code> with signature
Rob Pike's avatar
Rob Pike committed
3193
</p>
3194

3195
<pre>
Russ Cox's avatar
Russ Cox committed
3196
func(tv *T, a int) int
3197
</pre>
3198

Rob Pike's avatar
Rob Pike committed
3199
<p>
Rob Pike's avatar
Rob Pike committed
3200 3201 3202 3203
Such a function indirects through the receiver to create a value
to pass as the receiver to the underlying method;
the method does not overwrite the value whose address is passed in
the function call.
Rob Pike's avatar
Rob Pike committed
3204
</p>
3205

Rob Pike's avatar
Rob Pike committed
3206
<p>
Rob Pike's avatar
Rob Pike committed
3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217
The final case, a value-receiver function for a pointer-receiver method,
is illegal because pointer-receiver methods are not in the method set
of the value type.
</p>

<p>
Function values derived from methods are called with function call syntax;
the receiver is provided as the first argument to the call.
That is, given <code>f := T.Mv</code>, <code>f</code> is invoked
as <code>f(t, 7)</code> not <code>t.f(7)</code>.
To construct a function that binds the receiver, use a
3218
<a href="#Function_literals">closure</a>.
Rob Pike's avatar
Rob Pike committed
3219 3220 3221 3222 3223
</p>

<p>
It is legal to derive a function value from a method of an interface type.
The resulting function takes an explicit receiver of that interface type.
Rob Pike's avatar
Rob Pike committed
3224
</p>
3225

3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238
<h3 id="Conversions">Conversions</h3>

<p>
Conversions are expressions of the form <code>T(x)</code>
where <code>T</code> is a type and <code>x</code> is an expression
that can be converted to type <code>T</code>.
</p>

<pre class="ebnf">
Conversion = LiteralType "(" Expression ")" .
</pre>

<p>
3239 3240 3241 3242 3243 3244
In general, a conversion succeeds if the value of <code>x</code> is
<a href="#Assignment_compatibility">assignment compatible</a> with type <code>T</code>,
or if the value would be assignment compatible with type <code>T</code> if the
value's type, or <code>T</code>, or any of their component types were unnamed.
Usually, such a conversion changes the type but not the representation of the value
of <code>x</code> and thus has no run-time cost.
3245
</p>
3246 3247 3248 3249 3250 3251 3252 3253 3254

<p>
Specific rules apply to conversions where <code>T</code> is a numeric or string type.
These conversions may change the representation of a value and incur a run-time cost.
</p>

<h4>Conversions between integer types</h4>
<p>
If the value is a signed quantity, it is
3255 3256 3257 3258
sign extended to implicit infinite precision; otherwise it is zero
extended.  It is then truncated to fit in the result type's size.
For example, if <code>x := uint16(0x10F0)</code>, then <code>uint32(int8(x)) == 0xFFFFFFF0</code>.
The conversion always yields a valid value; there is no indication of overflow.
3259 3260
</p>

Rob Pike's avatar
Rob Pike committed
3261
<h4>Conversions involving floating point and complex types</h4>
3262
<ol>
3263 3264 3265 3266 3267
<li>
When converting a floating-point number to an integer, the fraction is discarded
(truncation towards zero).
</li>
<li>
Rob Pike's avatar
Rob Pike committed
3268
A value of complex type may be converted to a different complex type,
3269
but there is no conversion between complex and any other type.
Rob Pike's avatar
Rob Pike committed
3270 3271 3272 3273
<li>
When converting a number to a floating-point or complex type,
the result value is rounded
to the precision specified by the destination type.
3274 3275 3276 3277 3278
For instance, the value of a variable <code>x</code> of type <code>float32</code>
may be stored using additional precision beyond that of an IEEE-754 32-bit number,
but float32(x) represents the result of rounding <code>x</code>'s value to
32-bit precision. Similarly, <code>x + 0.1</code> may use more than 32 bits
of precision, <code>but float32(x + 0.1)</code> does not.
3279
</li>
3280 3281 3282
</ol>

<p>
Rob Pike's avatar
Rob Pike committed
3283 3284 3285
In all conversions involving floating-point or complex values,
if the result type cannot represent the value the conversion
succeeds but the result value is
3286 3287 3288
implementation-dependent.
</p>

3289 3290
<h4>Conversions to and from a string type</h4>

3291
<ol>
3292
<li>
3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310
Converting a signed or unsigned integer value to a string type yields a
string containing the UTF-8 representation of the integer.
Negative values are converted to <code>"\uFFFD"</code>.

<pre>
string('a')  // "a"
string(-1)  // "\ufffd" == "\xef\xbf\xbd "
string(0xf8)  // "\u00f8" == "ø" == "\xc3\xb8"
type MyString string
MyString(0x65e5)  // "\u65e5" == "日" == "\xe6\x97\xa5"
</pre>
</li>

<li>
Converting a value of type <code>[]byte</code> (or
the equivalent <code>[]uint8</code>) to a string type yields a
string whose successive bytes are the elements of the slice.  If
the slice value is <code>nil</code>, the result is the empty string.
3311 3312

<pre>
3313
string([]byte{'h', 'e', 'l', 'l', '\xc3', '\xb8'})  // "hellø"
3314 3315
</pre>
</li>
3316

3317
<li>
3318 3319 3320 3321
Converting a value of type <code>[]int</code> to a string type yields
a string that is the concatenation of the individual integers
converted to strings.  If the slice value is <code>nil</code>, the
result is the empty string.
3322
<pre>
3323 3324
string([]int{0x767d, 0x9d6c, 0x7fd4})  // "\u767d\u9d6c\u7fd4" == "白鵬翔"
</pre>
3325 3326 3327
</li>

<li>
3328 3329 3330 3331 3332 3333 3334 3335
Converting a value of a string type to <code>[]byte</code> (or <code>[]uint8</code>)
yields a slice whose successive elements are the bytes of the string.
If the string is empty, the result is <code>[]byte(nil)</code>.

<pre>
[]byte("hellø")  // []byte{'h', 'e', 'l', 'l', '\xc3', '\xb8'}
</pre>
</li>
3336

3337 3338 3339 3340
<li>
Converting a value of a string type to <code>[]int</code> yields a
slice containing the individual Unicode code points of the string.
If the string is empty, the result is <code>[]int(nil)</code>.
3341
<pre>
3342
[]int(MyString("白鵬翔"))  // []int{0x767d, 0x9d6c, 0x7fd4}
3343 3344
</pre>
</li>
3345
</ol>
3346 3347 3348 3349 3350 3351 3352 3353

<p>
There is no linguistic mechanism to convert between pointers and integers.
The package <a href="#Package_unsafe"><code>unsafe</code></a>
implements this functionality under
restricted circumstances.
</p>

3354
<h3 id="Constant_expressions">Constant expressions</h3>
Robert Griesemer's avatar
Robert Griesemer committed
3355

3356
<p>
3357 3358
Constant expressions may contain only <a href="#Constants">constant</a>
operands and are evaluated at compile-time.
3359
</p>
Robert Griesemer's avatar
Robert Griesemer committed
3360

3361
<p>
3362 3363 3364 3365 3366 3367
Untyped boolean, numeric, and string constants may be used as operands
wherever it is legal to use an operand of boolean, numeric, or string type,
respectively. Except for shift operations, if the operands of a binary operation
are an untyped integer constant and an untyped floating-point constant,
the integer constant is converted to an untyped floating-point constant
(relevant for <code>/</code> and <code>%</code>).
Rob Pike's avatar
Rob Pike committed
3368 3369 3370 3371 3372
Similarly,
untyped integer or floating-point constants may be used as operands
wherever it is legal to use an operand of complex type;
the integer or floating point constant is converted to a
complex constant with a zero imaginary part.
3373
</p>
3374 3375

<p>
3376
Applying an operator to untyped constants results in an untyped
Rob Pike's avatar
Rob Pike committed
3377 3378 3379
constant of the same kind (that is, a boolean, integer, floating-point,
complex, or string constant), except for
<a href="#Comparison_operators">comparison operators</a>, which result in
3380
a constant of type <code>bool</code>.
3381 3382
</p>

Rob Pike's avatar
Rob Pike committed
3383 3384 3385 3386 3387 3388 3389
<p>
Imaginary literals are untyped complex constants (with zero real part)
and may be combined in binary
operations with untyped integer and floating-point constants; the
result is an untyped complex constant.
Complex constants are always constructed from
constant expressions involving imaginary
3390 3391
literals or constants derived from them, or calls of the built-in function
<a href="#Complex_numbers"><code>cmplx</code></a>.
Rob Pike's avatar
Rob Pike committed
3392 3393 3394 3395
</p>

<pre>
const Σ = 1 - 0.707i
3396
const Δ = Σ + 2.0e-4 - 1/1i
Rob Pike's avatar
Rob Pike committed
3397 3398 3399 3400
const Φ = iota * 1i
const iΓ = cmplx(0, Γ)
</pre>

3401
<p>
3402 3403 3404
Constant expressions are always evaluated exactly; intermediate values and the
constants themselves may require precision significantly larger than supported
by any predeclared type in the language. The following are legal declarations:
3405 3406 3407
</p>

<pre>
3408 3409
const Huge = 1 &lt;&lt; 100
const Four int8 = Huge &gt;&gt; 98
3410
</pre>
Robert Griesemer's avatar
Robert Griesemer committed
3411

3412
<p>
3413 3414
The values of <i>typed</i> constants must always be accurately representable as values
of the constant type. The following constant expressions are illegal:
3415 3416 3417
</p>

<pre>
Robert Griesemer's avatar
Robert Griesemer committed
3418 3419 3420 3421 3422
uint(-1)       // -1 cannot be represented as a uint
int(3.14)      // 3.14 cannot be represented as an int
int64(Huge)    // 1&lt;&lt;100 cannot be represented as an int64
Four * 300     // 300 cannot be represented as an int8
Four * 100     // 400 cannot be represented as an int8
3423 3424 3425
</pre>

<p>
3426
The mask used by the unary bitwise complement operator <code>^</code> matches
Rob Pike's avatar
Rob Pike committed
3427
the rule for non-constants: the mask is all 1s for unsigned constants
3428
and -1 for signed and untyped constants.
3429 3430 3431
</p>

<pre>
3432
^1          // untyped integer constant, equal to -2
3433 3434 3435
uint8(^1)   // error, same as uint8(-2), out of range
^uint8(1)   // typed uint8 constant, same as 0xFF ^ uint8(1) = uint8(0xFE)
int8(^1)    // same as int8(-2)
Russ Cox's avatar
Russ Cox committed
3436
^int8(1)    // same as -1 ^ int8(1) = -2
3437 3438
</pre>

3439
<!---
3440
<p>
Robert Griesemer's avatar
Robert Griesemer committed
3441
<span class="alert">
3442 3443 3444
TODO: perhaps ^ should be disallowed on non-uints instead of assuming twos complement.
Also it may be possible to make typed constants more like variables, at the cost of fewer
overflow etc. errors being caught.
Robert Griesemer's avatar
Robert Griesemer committed
3445
</span>
3446
</p>
3447
--->
3448

3449
<h3 id="Order_of_evaluation">Order of evaluation</h3>
3450 3451 3452 3453 3454

<p>
When evaluating the elements of an assignment or expression,
all function calls, method calls and
communication operations are evaluated in lexical left-to-right
3455 3456 3457
order.
</p>

3458
<p>
3459
For example, in the assignment
3460 3461
</p>
<pre>
3462
y[f()], ok = g(h(), i() + x[j()], &lt;-c), k()
3463 3464
</pre>
<p>
3465 3466
the function calls and communication happen in the order
<code>f()</code>, <code>h()</code>, <code>i()</code>, <code>j()</code>,
3467
<code>&lt;-c</code>, <code>g()</code>, and <code>k()</code>.
3468 3469 3470
However, the order of those events compared to the evaluation
and indexing of <code>x</code> and the evaluation
of <code>y</code> is not specified.
3471 3472
</p>

3473 3474 3475 3476 3477 3478 3479 3480
<p>
Floating-point operations within a single expression are evaluated according to
the associativity of the operators.  Explicit parentheses affect the evaluation
by overriding the default associativity.
In the expression <code>x + (y + z)</code> the addition <code>y + z</code>
is performed before adding <code>x</code>.
</p>

3481
<h2 id="Statements">Statements</h2>
3482

Rob Pike's avatar
Rob Pike committed
3483
<p>
3484
Statements control execution.
Rob Pike's avatar
Rob Pike committed
3485
</p>
3486

3487
<pre class="ebnf">
3488
Statement =
3489 3490
	Declaration | LabeledStmt | SimpleStmt |
	GoStmt | ReturnStmt | BreakStmt | ContinueStmt | GotoStmt |
3491 3492
	FallthroughStmt | Block | IfStmt | SwitchStmt | SelectStmt | ForStmt |
	DeferStmt .
Robert Griesemer's avatar
Robert Griesemer committed
3493

3494
SimpleStmt = EmptyStmt | ExpressionStmt | IncDecStmt | Assignment | ShortVarDecl .
3495
</pre>
3496

3497

3498
<h3 id="Empty_statements">Empty statements</h3>
3499

Rob Pike's avatar
Rob Pike committed
3500
<p>
3501
The empty statement does nothing.
Rob Pike's avatar
Rob Pike committed
3502
</p>
3503

3504
<pre class="ebnf">
3505
EmptyStmt = .
3506
</pre>
3507 3508


3509
<h3 id="Labeled_statements">Labeled statements</h3>
3510 3511 3512 3513 3514 3515

<p>
A labeled statement may be the target of a <code>goto</code>,
<code>break</code> or <code>continue</code> statement.
</p>

3516
<pre class="ebnf">
3517
LabeledStmt = Label ":" Statement .
3518 3519 3520 3521
Label       = identifier .
</pre>

<pre>
3522
Error: log.Crash("error encountered")
3523 3524 3525
</pre>


3526
<h3 id="Expression_statements">Expression statements</h3>
3527

Rob Pike's avatar
Rob Pike committed
3528 3529 3530 3531 3532 3533
<p>
Function calls, method calls, and channel operations
can appear in statement context.
</p>


3534
<pre class="ebnf">
3535
ExpressionStmt = Expression .
3536
</pre>
3537

3538 3539
<pre>
f(x+y)
3540
&lt;-ch
3541
</pre>
3542 3543


3544
<h3 id="IncDec_statements">IncDec statements</h3>
3545

Rob Pike's avatar
Rob Pike committed
3546
<p>
3547
The "++" and "--" statements increment or decrement their operands
3548 3549 3550
by the untyped <a href="#Constants">constant</a> <code>1</code>.
As with an assignment, the operand must be a variable, pointer indirection,
field selector or index expression.
Rob Pike's avatar
Rob Pike committed
3551
</p>
3552

3553
<pre class="ebnf">
3554
IncDecStmt = Expression ( "++" | "--" ) .
3555
</pre>
3556

Rob Pike's avatar
Rob Pike committed
3557
<p>
Robert Griesemer's avatar
Robert Griesemer committed
3558
The following <a href="#Assignments">assignment statements</a> are semantically
3559
equivalent:
Rob Pike's avatar
Rob Pike committed
3560
</p>
3561

Rob Pike's avatar
Rob Pike committed
3562
<pre class="grammar">
3563 3564 3565 3566
IncDec statement    Assignment
x++                 x += 1
x--                 x -= 1
</pre>
3567

3568
<h3 id="Assignments">Assignments</h3>
3569

3570
<pre class="ebnf">
3571
Assignment = ExpressionList assign_op ExpressionList .
Rob Pike's avatar
Rob Pike committed
3572

3573 3574
assign_op = [ add_op | mul_op ] "=" .
</pre>
3575

Rob Pike's avatar
Rob Pike committed
3576
<p>
Rob Pike's avatar
Rob Pike committed
3577
Each left-hand side operand must be <a href="#Address_operators">addressable</a>,
3578
a map index expression,
Rob Pike's avatar
Rob Pike committed
3579
or the <a href="#Blank_identifier">blank identifier</a>.
Rob Pike's avatar
Rob Pike committed
3580
</p>
3581

3582 3583 3584 3585
<pre>
x = 1
*p = f()
a[i] = 23
3586
k = &lt;-ch
3587
</pre>
3588

Rob Pike's avatar
Rob Pike committed
3589 3590 3591 3592
<p>
An <i>assignment operation</i> <code>x</code> <i>op</i><code>=</code>
<code>y</code> where <i>op</i> is a binary arithmetic operation is equivalent
to <code>x</code> <code>=</code> <code>x</code> <i>op</i>
3593
<code>y</code> but evaluates <code>x</code>
Rob Pike's avatar
Rob Pike committed
3594
only once.  The <i>op</i><code>=</code> construct is a single token.
Rob Pike's avatar
Rob Pike committed
3595 3596
In assignment operations, both the left- and right-hand expression lists
must contain exactly one single-valued expression.
Rob Pike's avatar
Rob Pike committed
3597
</p>
3598

3599
<pre>
Robert Griesemer's avatar
Robert Griesemer committed
3600
a[i] &lt;&lt;= 2
Rob Pike's avatar
Rob Pike committed
3601
i &amp;^= 1&lt;&lt;n
3602
</pre>
3603

Rob Pike's avatar
Rob Pike committed
3604 3605 3606 3607
<p>
A tuple assignment assigns the individual elements of a multi-valued
operation to a list of variables.  There are two forms.  In the
first, the right hand operand is a single multi-valued expression
Robert Griesemer's avatar
Robert Griesemer committed
3608 3609
such as a function evaluation or <a href="#Channel_types">channel</a> or
<a href="#Map_types">map</a> operation or a <a href="#Type_assertions">type assertion</a>.
3610
The number of operands on the left
Robert Griesemer's avatar
Robert Griesemer committed
3611
hand side must match the number of values.  For instance, if
Rob Pike's avatar
Rob Pike committed
3612 3613
<code>f</code> is a function returning two values,
</p>
3614

3615 3616 3617
<pre>
x, y = f()
</pre>
3618

Rob Pike's avatar
Rob Pike committed
3619 3620
<p>
assigns the first value to <code>x</code> and the second to <code>y</code>.
Rob Pike's avatar
Rob Pike committed
3621
The <a href="#Blank_identifier">blank identifier</a> provides a
Robert Griesemer's avatar
Robert Griesemer committed
3622
way to ignore values returned by a multi-valued expression:
Rob Pike's avatar
Rob Pike committed
3623
</p>
3624

Robert Griesemer's avatar
Robert Griesemer committed
3625 3626 3627 3628
<pre>
x, _ = f()  // ignore second value returned by f()
</pre>

Rob Pike's avatar
Rob Pike committed
3629 3630
<p>
In the second form, the number of operands on the left must equal the number
3631 3632 3633
of expressions on the right, each of which must be single-valued, and the
<i>n</i>th expression on the right is assigned to the <i>n</i>th
operand on the left.
3634 3635
The expressions on the right are evaluated before assigning to
any of the operands on the left, but otherwise the evaluation
Rob Pike's avatar
Rob Pike committed
3636
order is unspecified beyond <a href="#Order_of_evaluation">the usual rules</a>.
Rob Pike's avatar
Rob Pike committed
3637
</p>
3638

3639
<pre>
Rob Pike's avatar
Rob Pike committed
3640
a, b = b, a  // exchange a and b
3641
</pre>
Rob Pike's avatar
Rob Pike committed
3642 3643

<p>
3644
In assignments, each value must be
Robert Griesemer's avatar
Robert Griesemer committed
3645
<a href="#Assignment_compatibility">assignment compatible</a> with the type of the
3646 3647
operand to which it is assigned. If an untyped <a href="#Constants">constant</a>
is assigned to a variable of interface type, the constant is <a href="#Conversions">converted</a>
Rob Pike's avatar
Rob Pike committed
3648 3649
to type <code>bool</code>, <code>int</code>, <code>float</code>,
<code>complex</code> or <code>string</code>
3650
respectively, depending on whether the value is a boolean, integer, floating-point,
Rob Pike's avatar
Rob Pike committed
3651
complex, or string constant.
Rob Pike's avatar
Rob Pike committed
3652
</p>
3653 3654


3655
<h3 id="If_statements">If statements</h3>
3656

Rob Pike's avatar
Rob Pike committed
3657 3658 3659 3660 3661 3662 3663
<p>
"If" statements specify the conditional execution of two branches
according to the value of a boolean expression.  If the expression
evaluates to true, the "if" branch is executed, otherwise, if
present, the "else" branch is executed.  A missing condition
is equivalent to <code>true</code>.
</p>
3664

3665
<pre class="ebnf">
3666
IfStmt    = "if" [ SimpleStmt ";" ] [ Expression ] Block [ "else" Statement ] .
3667
</pre>
3668

3669 3670 3671 3672 3673
<pre>
if x > 0 {
	return true;
}
</pre>
3674

3675
<p>
Russ Cox's avatar
Russ Cox committed
3676 3677
The expression may be preceded by a simple statement, which
executes before the expression is evaluated.
3678
</p>
3679

3680
<pre>
3681 3682
if x := f(); x &lt; y {
	return x
3683
} else if x > z {
3684
	return z
3685
} else {
3686
	return y
3687 3688
}
</pre>
3689 3690


3691
<h3 id="Switch_statements">Switch statements</h3>
3692

Rob Pike's avatar
Rob Pike committed
3693 3694
<p>
"Switch" statements provide multi-way execution.
Rob Pike's avatar
Rob Pike committed
3695 3696 3697
An expression or type specifier is compared to the "cases"
inside the "switch" to determine which branch
to execute.
Rob Pike's avatar
Rob Pike committed
3698
</p>
3699

3700
<pre class="ebnf">
3701
SwitchStmt = ExprSwitchStmt | TypeSwitchStmt .
3702 3703
</pre>

Rob Pike's avatar
Rob Pike committed
3704
<p>
Rob Pike's avatar
Rob Pike committed
3705 3706 3707 3708 3709 3710 3711
There are two forms: expression switches and type switches.
In an expression switch, the cases contain expressions that are compared
against the value of the switch expression.
In a type switch, the cases contain types that are compared against the
type of a specially annotated switch expression.
</p>

3712
<h4 id="Expression_switches">Expression switches</h4>
Rob Pike's avatar
Rob Pike committed
3713 3714 3715 3716 3717

<p>
In an expression switch,
the switch expression is evaluated and
the case expressions, which need not be constants,
3718
are evaluated left-to-right and top-to-bottom; the first one that equals the
Rob Pike's avatar
Rob Pike committed
3719
switch expression
Rob Pike's avatar
Rob Pike committed
3720 3721
triggers execution of the statements of the associated case;
the other cases are skipped.
Rob Pike's avatar
Rob Pike committed
3722 3723
If no case matches and there is a "default" case,
its statements are executed.
Rob Pike's avatar
Rob Pike committed
3724 3725
There can be at most one default case and it may appear anywhere in the
"switch" statement.
Robert Griesemer's avatar
Robert Griesemer committed
3726
A missing switch expression is equivalent to
3727
the expression <code>true</code>.
Rob Pike's avatar
Rob Pike committed
3728
</p>
3729

3730
<pre class="ebnf">
3731
ExprSwitchStmt = "switch" [ SimpleStmt ";" ] [ Expression ] "{" { ExprCaseClause } "}" .
3732
ExprCaseClause = ExprSwitchCase ":" { Statement ";" } .
3733
ExprSwitchCase = "case" ExpressionList | "default" .
3734 3735
</pre>

Rob Pike's avatar
Rob Pike committed
3736 3737 3738
<p>
In a case or default clause,
the last statement only may be a "fallthrough" statement
3739
<a href="#Fallthrough_statement">Fallthrough statement</a>) to
Rob Pike's avatar
Rob Pike committed
3740
indicate that control should flow from the end of this clause to
3741
the first statement of the next clause.
Rob Pike's avatar
Rob Pike committed
3742 3743
Otherwise control flows to the end of the "switch" statement.
</p>
Robert Griesemer's avatar
Robert Griesemer committed
3744

3745
<p>
Russ Cox's avatar
Russ Cox committed
3746 3747
The expression may be preceded by a simple statement, which
executes before the expression is evaluated.
Rob Pike's avatar
Rob Pike committed
3748
</p>
3749

3750 3751
<pre>
switch tag {
3752 3753 3754
default: s3()
case 0, 1, 2, 3: s1()
case 4, 5, 6, 7: s2()
3755
}
3756

3757
switch x := f() {  // missing switch expression means "true"
3758 3759
case x &lt; 0: return -x
default: return x
3760
}
3761

Robert Griesemer's avatar
Robert Griesemer committed
3762
switch {
3763 3764 3765
case x &lt; y: f1()
case x &lt; z: f2()
case x == 4: f3()
3766 3767
}
</pre>
3768

3769
<h4 id="Type_switches">Type switches</h4>
Rob Pike's avatar
Rob Pike committed
3770 3771

<p>
3772
A type switch compares types rather than values. It is otherwise similar
Robert Griesemer's avatar
tweaks  
Robert Griesemer committed
3773
to an expression switch. It is marked by a special switch expression that
3774
has the form of a <a href="#Type_assertions">type assertion</a>
3775 3776
using the reserved word <code>type</code> rather than an actual type.
Cases then match literal types against the dynamic type of the expression
3777
in the type assertion.
Rob Pike's avatar
Rob Pike committed
3778 3779
</p>

3780
<pre class="ebnf">
3781
TypeSwitchStmt  = "switch" [ SimpleStmt ";" ] TypeSwitchGuard "{" { TypeCaseClause } "}" .
3782
TypeSwitchGuard = [ identifier ":=" ] PrimaryExpr "." "(" "type" ")" .
3783
TypeCaseClause  = TypeSwitchCase ":" { Statement ";" } .
Rob Pike's avatar
Rob Pike committed
3784 3785
TypeSwitchCase  = "case" TypeList | "default" .
TypeList        = Type { "," Type } .
Rob Pike's avatar
Rob Pike committed
3786 3787
</pre>

3788
<p>
3789 3790 3791 3792 3793 3794
The TypeSwitchGuard may include a
<a href="#Short_variable_declarations">short variable declaration</a>.
When that form is used, the variable is declared in each clause.
In clauses with a case listing exactly one type, the variable
has that type; otherwise, the variable has the type of the expression
in the TypeSwitchGuard.
3795 3796
</p>

Rob Pike's avatar
Rob Pike committed
3797
<p>
3798 3799 3800
The type in a case may be <code>nil</code>
<a href="#Predeclared_identifiers">Predeclared identifiers</a>);
that case is used when the expression in the TypeSwitchGuard
Robert Griesemer's avatar
tweaks  
Robert Griesemer committed
3801
is a <code>nil</code> interface value.
3802 3803 3804
</p>

<p>
Robert Griesemer's avatar
Robert Griesemer committed
3805
Given an expression <code>x</code> of type <code>interface{}</code>,
3806
the following type switch:
Rob Pike's avatar
Rob Pike committed
3807 3808 3809
</p>

<pre>
Robert Griesemer's avatar
Robert Griesemer committed
3810
switch i := x.(type) {
3811
case nil:
3812
	printString("x is nil")
Rob Pike's avatar
Rob Pike committed
3813
case int:
3814
	printInt(i)  // i is an int
Rob Pike's avatar
Rob Pike committed
3815
case float:
3816
	printFloat(i)  // i is a float
3817
case func(int) float:
3818
	printFunction(i)  // i is a function
3819
case bool, string:
3820
	printString("type is bool or string")  // i is an interface{}
Rob Pike's avatar
Rob Pike committed
3821
default:
3822
	printString("don't know the type")
Rob Pike's avatar
Rob Pike committed
3823
}
3824
</pre>
Rob Pike's avatar
Rob Pike committed
3825

3826 3827 3828 3829 3830
<p>
could be rewritten:
</p>

<pre>
3831
v := x  // x is evaluated exactly once
3832
if v == nil {
3833
	printString("x is nil")
3834
} else if i, is_int := v.(int); is_int {
3835
	printInt(i)  // i is an int
3836
} else if i, is_float := v.(float); is_float {
3837
	printFloat(i)  // i is a float
3838
} else if i, is_func := v.(func(int) float); is_func {
3839
	printFunction(i)  // i is a function
3840
} else {
3841 3842
	i1, is_bool := v.(bool)
	i2, is_string := v.(string)
3843
	if is_bool || is_string {
3844 3845
		i := v
		printString("type is bool or string")  // i is an interface{}
3846
	} else {
3847 3848
		i := v
		printString("don't know the type")  // i is an interface{}
3849
	}
Rob Pike's avatar
Rob Pike committed
3850 3851
}
</pre>
3852

3853
<p>
Russ Cox's avatar
Russ Cox committed
3854 3855
The type switch guard may be preceded by a simple statement, which
executes before the guard is evaluated.
Robert Griesemer's avatar
tweaks  
Robert Griesemer committed
3856
</p>
3857 3858 3859

<p>
The "fallthrough" statement is not permitted in a type switch.
Russ Cox's avatar
Russ Cox committed
3860 3861
</p>

3862
<h3 id="For_statements">For statements</h3>
3863

Rob Pike's avatar
Rob Pike committed
3864 3865 3866 3867
<p>
A "for" statement specifies repeated execution of a block. The iteration is
controlled by a condition, a "for" clause, or a "range" clause.
</p>
3868

3869
<pre class="ebnf">
3870
ForStmt = "for" [ Condition | ForClause | RangeClause ] Block .
3871 3872
Condition = Expression .
</pre>
3873

Rob Pike's avatar
Rob Pike committed
3874 3875 3876 3877 3878 3879
<p>
In its simplest form, a "for" statement specifies the repeated execution of
a block as long as a boolean condition evaluates to true.
The condition is evaluated before each iteration.
If the condition is absent, it is equivalent to <code>true</code>.
</p>
3880

3881 3882 3883 3884 3885
<pre>
for a &lt; b {
	a *= 2
}
</pre>
3886

Rob Pike's avatar
Rob Pike committed
3887
<p>
Rob Pike's avatar
Rob Pike committed
3888
A "for" statement with a ForClause is also controlled by its condition, but
Rob Pike's avatar
Rob Pike committed
3889 3890
additionally it may specify an <i>init</i>
and a <i>post</i> statement, such as an assignment,
Russ Cox's avatar
Russ Cox committed
3891
an increment or decrement statement. The init statement may be a
Robert Griesemer's avatar
Robert Griesemer committed
3892
<a href="#Short_variable_declarations">short variable declaration</a>, but the post statement must not.
Rob Pike's avatar
Rob Pike committed
3893
</p>
3894

3895
<pre class="ebnf">
3896
ForClause = [ InitStmt ] ";" [ Condition ] ";" [ PostStmt ] .
3897 3898
InitStmt = SimpleStmt .
PostStmt = SimpleStmt .
3899
</pre>
3900

3901
<pre>
3902
for i := 0; i &lt; 10; i++ {
3903 3904 3905
	f(i)
}
</pre>
3906

3907
<p>
Rob Pike's avatar
Rob Pike committed
3908 3909 3910 3911
If non-empty, the init statement is executed once before evaluating the
condition for the first iteration;
the post statement is executed after each execution of the block (and
only if the block was executed).
3912 3913
Any element of the ForClause may be empty but the
<a href="#Semicolons">semicolons</a> are
Rob Pike's avatar
Rob Pike committed
3914 3915 3916
required unless there is only a condition.
If the condition is absent, it is equivalent to <code>true</code>.
</p>
Robert Griesemer's avatar
Robert Griesemer committed
3917

3918
<pre>
Rob Pike's avatar
Rob Pike committed
3919 3920
for cond { S() }    is the same as    for ; cond ; { S() }
for      { S() }    is the same as    for true     { S() }
3921
</pre>
Robert Griesemer's avatar
Robert Griesemer committed
3922

Rob Pike's avatar
Rob Pike committed
3923 3924
<p>
A "for" statement with a "range" clause
Rob Pike's avatar
Rob Pike committed
3925 3926
iterates through all entries of an array, slice, string or map,
or values received on a channel.
Robert Griesemer's avatar
Robert Griesemer committed
3927 3928
For each entry it first assigns the current index or key to an iteration
variable - or the current (index, element) or (key, value) pair to a pair
Rob Pike's avatar
Rob Pike committed
3929 3930
of iteration variables - and then executes the block.
</p>
Robert Griesemer's avatar
Robert Griesemer committed
3931

3932
<pre class="ebnf">
3933
RangeClause = ExpressionList ( "=" | ":=" ) "range" Expression .
3934
</pre>
Robert Griesemer's avatar
Robert Griesemer committed
3935

Rob Pike's avatar
Rob Pike committed
3936
<p>
Rob Pike's avatar
Rob Pike committed
3937
The type of the right-hand expression in the "range" clause must be an
Rob Pike's avatar
Rob Pike committed
3938
array, slice, string or map, or a pointer to an array;
3939
or it may be a channel.
Rob Pike's avatar
Rob Pike committed
3940
Except for channels,
3941 3942 3943 3944
the identifier list must contain one or two expressions
(as in assignments, these must be a
variable, pointer indirection, field selector, or index expression)
denoting the
Rob Pike's avatar
Rob Pike committed
3945
iteration variables. On each iteration,
Rob Pike's avatar
Rob Pike committed
3946
the first variable is set to the string, array or slice index or
Robert Griesemer's avatar
Robert Griesemer committed
3947
map key, and the second variable, if present, is set to the corresponding
Rob Pike's avatar
Rob Pike committed
3948
string or array element or map value.
Rob Pike's avatar
Rob Pike committed
3949 3950
The types of the array or slice index (always <code>int</code>)
and element, or of the map key and value respectively,
3951
must be <a href="#Assignment_compatibility">assignment compatible</a> with
3952 3953 3954 3955 3956 3957
the type of the iteration variables.  The expression on the right hand
side is evaluated once before beginning the loop.  At each iteration
of the loop, the values produced by the range clause are assigned to
the left hand side as in an <a href="#Assignments">assignment
statement</a>.  Function calls on the left hand side will be evaluated
exactly once per iteration.
Rob Pike's avatar
Rob Pike committed
3958
</p>
3959
<p>
3960
For a value of a string type, the "range" clause iterates over the Unicode code points
Rob Pike's avatar
Rob Pike committed
3961
in the string.  On successive iterations, the index variable will be the
Rob Pike's avatar
Rob Pike committed
3962
index of the first byte of successive UTF-8-encoded code points in the string, and
Rob Pike's avatar
Rob Pike committed
3963 3964 3965 3966 3967 3968 3969
the second variable, of type <code>int</code>, will be the value of
the corresponding code point.  If the iteration encounters an invalid
UTF-8 sequence, the second variable will be <code>0xFFFD</code>,
the Unicode replacement character, and the next iteration will advance
a single byte in the string.
</p>
<p>
3970
For channels, the identifier list must contain one identifier.
Robert Griesemer's avatar
Robert Griesemer committed
3971
The iteration receives values sent on the channel until the channel is closed;
3972 3973 3974
it does not process the zero value sent before the channel is closed.
</p>
<p>
Rob Pike's avatar
Rob Pike committed
3975
The iteration variables may be declared by the "range" clause (":="), in which
3976
case their scope ends at the end of the "for" statement (§<a href="#Declarations_and">Declarations and</a>
Rob Pike's avatar
Rob Pike committed
3977
scope rules). In this case their types are set to
3978
<code>int</code> and the array element type, or the map key and value types, respectively.
Rob Pike's avatar
Rob Pike committed
3979 3980 3981
If the iteration variables are declared outside the "for" statement,
after execution their values will be those of the last iteration.
</p>
Robert Griesemer's avatar
Robert Griesemer committed
3982

3983
<pre>
3984 3985
var a [10]string
m := map[string]int{"mon":0, "tue":1, "wed":2, "thu":3, "fri":4, "sat":5, "sun":6}
3986 3987 3988 3989 3990 3991 3992 3993

for i, s := range a {
	// type of i is int
	// type of s is string
	// s == a[i]
	g(i, s)
}

3994 3995
var key string
var val interface {}  // value type of m is assignment compatible with val
Rob Pike's avatar
Rob Pike committed
3996 3997
for key, val = range m {
	h(key, val)
3998 3999 4000 4001
}
// key == last map key encountered in iteration
// val == map[key]
</pre>
Robert Griesemer's avatar
Robert Griesemer committed
4002

Rob Pike's avatar
Rob Pike committed
4003
<p>
Robert Griesemer's avatar
Robert Griesemer committed
4004 4005
If map entries that have not yet been processed are deleted during iteration,
they will not be processed. If map entries are inserted during iteration, the
4006
behavior is implementation-dependent, but each entry will be processed at most once.
Rob Pike's avatar
Rob Pike committed
4007
</p>
4008

4009
<h3 id="Go_statements">Go statements</h3>
4010

Rob Pike's avatar
Rob Pike committed
4011
<p>
4012
A "go" statement starts the execution of a function or method call
Rob Pike's avatar
Rob Pike committed
4013 4014 4015
as an independent concurrent thread of control, or <i>goroutine</i>,
within the same address space.
</p>
4016

4017
<pre class="ebnf">
4018
GoStmt = "go" Expression .
4019
</pre>
4020

Rob Pike's avatar
Rob Pike committed
4021 4022 4023
<p>
The expression must be a call, and
unlike with a regular call, program execution does not wait
4024
for the invoked function to complete.
Rob Pike's avatar
Rob Pike committed
4025
</p>
4026

4027 4028
<pre>
go Server()
4029
go func(ch chan&lt;- bool) { for { sleep(10); ch &lt;- true; }} (c)
4030
</pre>
4031 4032


4033
<h3 id="Select_statements">Select statements</h3>
4034

Rob Pike's avatar
Rob Pike committed
4035 4036 4037
<p>
A "select" statement chooses which of a set of possible communications
will proceed.  It looks similar to a "switch" statement but with the
4038
cases all referring to communication operations.
Rob Pike's avatar
Rob Pike committed
4039
</p>
4040

4041
<pre class="ebnf">
4042
SelectStmt = "select" "{" { CommClause } "}" .
4043
CommClause = CommCase ":" { Statement ";" } .
4044 4045 4046 4047
CommCase = "case" ( SendExpr | RecvExpr) | "default" .
SendExpr =  Expression "&lt;-" Expression .
RecvExpr =  [ Expression ( "=" | ":=" ) ] "&lt;-" Expression .
</pre>
4048

4049
<p>
Rob Pike's avatar
Rob Pike committed
4050
For all the send and receive expressions in the "select"
4051 4052 4053 4054
statement, the channel expressions are evaluated, along with
any expressions that appear on the right hand side of send expressions,
in top-to-bottom order.
If any of the resulting operations can proceed, one is
Rob Pike's avatar
Rob Pike committed
4055 4056
chosen and the corresponding communication and statements are
evaluated.  Otherwise, if there is a default case, that executes;
4057
if not, the statement blocks until one of the communications can
Rob Pike's avatar
Rob Pike committed
4058
complete.  The channels and send expressions are not re-evaluated.
Rob Pike's avatar
Rob Pike committed
4059 4060 4061 4062 4063
A channel pointer may be <code>nil</code>,
which is equivalent to that case not
being present in the select statement
except, if a send, its expression is still evaluated.
</p>
4064
<p>
Rob Pike's avatar
Rob Pike committed
4065 4066
Since all the channels and send expressions are evaluated, any side
effects in that evaluation will occur for all the communications
Rob Pike's avatar
Rob Pike committed
4067 4068
in the "select" statement.
</p>
4069
<p>
Rob Pike's avatar
Rob Pike committed
4070
If multiple cases can proceed, a uniform fair choice is made to decide
4071
which single communication will execute.
4072
<p>
Robert Griesemer's avatar
Robert Griesemer committed
4073 4074
The receive case may declare a new variable using a
<a href="#Short_variable_declarations">short variable declaration</a>.
Rob Pike's avatar
Rob Pike committed
4075
</p>
4076

4077
<pre>
4078 4079
var c, c1, c2 chan int
var i1, i2 int
4080 4081
select {
case i1 = &lt;-c1:
4082
	print("received ", i1, " from c1\n")
4083
case c2 &lt;- i2:
4084
	print("sent ", i2, " to c2\n")
4085
default:
4086
	print("no communication\n")
4087 4088 4089
}

for {  // send random sequence of bits to c
4090
	select {
4091 4092
	case c &lt;- 0:  // note: no statement, no fallthrough, no folding of cases
	case c &lt;- 1:
4093
	}
4094 4095
}
</pre>
4096 4097


4098
<h3 id="Return_statements">Return statements</h3>
4099

Rob Pike's avatar
Rob Pike committed
4100 4101
<p>
A "return" statement terminates execution of the containing function
4102
and optionally provides a result value or values to the caller.
Rob Pike's avatar
Rob Pike committed
4103
</p>
4104

4105
<pre class="ebnf">
4106
ReturnStmt = "return" [ ExpressionList ] .
4107
</pre>
4108

4109 4110 4111 4112
<p>
In a function without a result type, a "return" statement must not
specify any result values.
</p>
Rob Pike's avatar
Rob Pike committed
4113
<pre>
4114
func no_result() {
Rob Pike's avatar
Rob Pike committed
4115 4116 4117
	return
}
</pre>
4118

Rob Pike's avatar
Rob Pike committed
4119
<p>
4120 4121
There are three ways to return values from a function with a result
type:
Rob Pike's avatar
Rob Pike committed
4122
</p>
4123

4124 4125 4126
<ol>
	<li>The return value or values may be explicitly listed
		in the "return" statement. Each expression must be single-valued
4127 4128 4129
		and <a href="#Assignment_compatibility">assignment compatible</a>
		with the type of the corresponding element of the function's
		result type.
4130 4131
<pre>
func simple_f() int {
Rob Pike's avatar
Rob Pike committed
4132 4133 4134 4135 4136
	return 2
}

func complex_f1() (re float, im float) {
	return -7.0, -4.0
4137 4138
}
</pre>
4139 4140 4141 4142 4143 4144 4145
	</li>
	<li>The expression list in the "return" statement may be a single
		call to a multi-valued function. The effect is as if each value
		returned from that function were assigned to a temporary
		variable with the type of the respective value, followed by a
		"return" statement listing these variables, at which point the
		rules of the previous case apply.
4146
<pre>
Rob Pike's avatar
Rob Pike committed
4147 4148
func complex_f2() (re float, im float) {
	return complex_f1()
4149 4150
}
</pre>
4151 4152
	</li>
	<li>The expression list may be empty if the functions's result
4153
		type specifies names for its result parameters (§<a href="#Function_Types">Function Types</a>).
4154
		The result parameters act as ordinary local variables that are
4155
		initialized to the zero values for their type (§<a href="#The_zero_value">The zero value</a>)
4156 4157
		and the function may assign values to them as necessary.
		The "return" statement returns the values of these variables.
4158
<pre>
Rob Pike's avatar
Rob Pike committed
4159
func complex_f3() (re float, im float) {
4160 4161 4162
	re = 7.0
	im = 4.0
	return
4163 4164
}
</pre>
4165 4166
	</li>
</ol>
4167

4168
<!---
4169
<p>
Robert Griesemer's avatar
Robert Griesemer committed
4170
<span class="alert">
4171 4172 4173
TODO: Define when return is required.<br />
TODO: Language about result parameters needs to go into a section on
      function/method invocation<br />
Robert Griesemer's avatar
Robert Griesemer committed
4174
</span>
4175
</p>
4176
--->
4177

4178
<h3 id="Break_statements">Break statements</h3>
4179

Rob Pike's avatar
Rob Pike committed
4180 4181 4182 4183
<p>
A "break" statement terminates execution of the innermost
"for", "switch" or "select" statement.
</p>
4184

4185
<pre class="ebnf">
4186
BreakStmt = "break" [ Label ] .
4187
</pre>
4188

Rob Pike's avatar
Rob Pike committed
4189 4190 4191 4192
<p>
If there is a label, it must be that of an enclosing
"for", "switch" or "select" statement, and that is the one whose execution
terminates
4193
<a href="#For_statements">For statements</a>, §<a href="#Switch_statements">Switch statements</a>, §<a href="#Select_statements">Select statements</a>).
Rob Pike's avatar
Rob Pike committed
4194
</p>
4195

4196
<pre>
4197
L: for i &lt; n {
4198
	switch i {
Rob Pike's avatar
Rob Pike committed
4199
		case 5: break L
4200
	}
4201 4202
}
</pre>
4203

4204
<h3 id="Continue_statements">Continue statements</h3>
4205

Rob Pike's avatar
Rob Pike committed
4206 4207
<p>
A "continue" statement begins the next iteration of the
Rob Pike's avatar
Rob Pike committed
4208
innermost "for" loop at its post statement (§<a href="#For_statements">For statements</a>).
Rob Pike's avatar
Rob Pike committed
4209
</p>
4210

4211
<pre class="ebnf">
4212
ContinueStmt = "continue" [ Label ] .
4213
</pre>
4214

Rob Pike's avatar
Rob Pike committed
4215 4216 4217
<p>
The optional label is analogous to that of a "break" statement.
</p>
4218

4219
<h3 id="Goto_statements">Goto statements</h3>
4220

Rob Pike's avatar
Rob Pike committed
4221 4222 4223
<p>
A "goto" statement transfers control to the statement with the corresponding label.
</p>
4224

4225
<pre class="ebnf">
4226
GotoStmt = "goto" Label .
4227
</pre>
4228

4229 4230 4231
<pre>
goto Error
</pre>
4232

Rob Pike's avatar
Rob Pike committed
4233 4234
<p>
Executing the "goto" statement must not cause any variables to come into
4235 4236
scope that were not already in scope at the point of the goto.  For
instance, this example:
Rob Pike's avatar
Rob Pike committed
4237
</p>
4238

4239
<pre>
4240 4241
goto L  // BAD
v := 3
4242 4243
L:
</pre>
4244

Rob Pike's avatar
Rob Pike committed
4245 4246 4247
<p>
is erroneous because the jump to label <code>L</code> skips
the creation of <code>v</code>.
4248
<!---
Robert Griesemer's avatar
Robert Griesemer committed
4249
(<span class="alert">TODO: Eliminate in favor of used and not set errors?</span>)
4250
--->
Rob Pike's avatar
Rob Pike committed
4251
</p>
4252

4253
<h3 id="Fallthrough_statements">Fallthrough statements</h3>
4254

Rob Pike's avatar
Rob Pike committed
4255 4256
<p>
A "fallthrough" statement transfers control to the first statement of the
4257
next case clause in a expression "switch" statement (§<a href="#Expression_switches">Expression switches</a>). It may
4258 4259
be used only as the final non-empty statement in a case or default clause in an
expression "switch" statement.
Rob Pike's avatar
Rob Pike committed
4260
</p>
4261

4262
<pre class="ebnf">
4263
FallthroughStmt = "fallthrough" .
4264
</pre>
4265 4266


4267
<h3 id="Defer_statements">Defer statements</h3>
Robert Griesemer's avatar
Robert Griesemer committed
4268

Rob Pike's avatar
Rob Pike committed
4269 4270 4271 4272
<p>
A "defer" statement invokes a function whose execution is deferred to the moment
the surrounding function returns.
</p>
Robert Griesemer's avatar
Robert Griesemer committed
4273

4274
<pre class="ebnf">
4275
DeferStmt = "defer" Expression .
4276
</pre>
Robert Griesemer's avatar
Robert Griesemer committed
4277

Rob Pike's avatar
Rob Pike committed
4278 4279 4280
<p>
The expression must be a function or method call.
Each time the "defer" statement
4281
executes, the parameters to the function call are evaluated and saved anew but the
Rob Pike's avatar
Rob Pike committed
4282 4283 4284
function is not invoked.
Deferred function calls are executed in LIFO order
immediately before the surrounding function returns,
4285 4286
after the return values, if any, have been evaluated, but before they
are returned to the caller. For instance, if the deferred function is
Rob Pike's avatar
Rob Pike committed
4287
a <a href="#Function_literals">function literal</a> and the surrounding
4288 4289 4290
function has <a href="#Function_types">named result parameters</a> that
are in scope within the literal, the deferred function may access and modify
the result parameters before they are returned.
Rob Pike's avatar
Rob Pike committed
4291
</p>
Robert Griesemer's avatar
Robert Griesemer committed
4292

4293
<pre>
4294 4295
lock(l)
defer unlock(l)  // unlocking happens before surrounding function returns
Robert Griesemer's avatar
Robert Griesemer committed
4296

4297 4298
// prints 3 2 1 0 before surrounding function returns
for i := 0; i &lt;= 3; i++ {
4299
	defer fmt.Print(i)
4300
}
4301 4302 4303 4304 4305 4306 4307 4308

// f returns 1
func f() (result int) {
	defer func() {
		result++
	}()
	return 0
}
4309
</pre>
Robert Griesemer's avatar
Robert Griesemer committed
4310

4311
<h2 id="Built-in_functions">Built-in functions</h2>
4312 4313

<p>
Rob Pike's avatar
Rob Pike committed
4314
Built-in functions are
4315 4316 4317 4318
<a href="#Predeclared_identifiers">predeclared</a>.
They are called like any other function but some of them
accept a type instead of an expression as the first argument.
</p>
Robert Griesemer's avatar
Robert Griesemer committed
4319

4320 4321 4322 4323 4324 4325
<p>
The built-in functions do not have standard Go types,
so they can only appear in <a href="#Calls">call expressions</a>;
they cannot be used as function values.
</p>

4326 4327 4328
<pre class="ebnf">
BuiltinCall = identifier "(" [ BuiltinArgs ] ")" .
BuiltinArgs = Type [ "," ExpressionList ] | ExpressionList .
4329
</pre>
4330

4331
<h3 id="Close_and_closed">Close and closed</h3>
4332

Rob Pike's avatar
Rob Pike committed
4333
<p>
4334 4335 4336 4337 4338 4339
For a channel <code>c</code>, the predefined function <code>close(c)</code>
marks the channel as unable to accept more
values through a send operation.  After any previously
sent values have been received, receive operations will return
the zero value for the channel's type.  After at least one such zero value has been
received, <code>closed(c)</code> returns true.
Rob Pike's avatar
Rob Pike committed
4340
</p>
4341

4342
<h3 id="Length_and_capacity">Length and capacity</h3>
4343

Rob Pike's avatar
Rob Pike committed
4344
<p>
4345 4346 4347
The built-in functions <code>len</code> and <code>cap</code> take arguments
of various types and return a result of type <code>int</code>.
The implementation guarantees that the result always fits into an <code>int</code>.
4348 4349
</p>

4350 4351
<pre class="grammar">
Call      Argument type        Result
4352

4353
len(s)    string type          string length in bytes
Robert Griesemer's avatar
Robert Griesemer committed
4354
          [n]T, *[n]T          array length (== constant n)
4355 4356 4357
          []T                  slice length
          map[K]T              map length (number of defined keys)
          chan T               number of elements queued in channel buffer
4358

Robert Griesemer's avatar
Robert Griesemer committed
4359
cap(s)    [n]T, *[n]T          array length (== constant n)
4360 4361
          []T                  slice capacity
          chan T               channel buffer capacity
4362
</pre>
4363

4364 4365 4366 4367 4368
<p>
The capacity of a slice is the number of elements for which there is
space allocated in the underlying array.
At any time the following relationship holds:
</p>
4369

4370
<pre>
4371
0 <= len(s) <= cap(s)
4372
</pre>
4373 4374


4375
<h3 id="Allocation">Allocation</h3>
4376

Rob Pike's avatar
Rob Pike committed
4377 4378 4379
<p>
The built-in function <code>new</code> takes a type <code>T</code> and
returns a value of type <code>*T</code>.
4380
The memory is initialized as described in the section on initial values
4381
<a href="#The_zero_value">The zero value</a>).
Rob Pike's avatar
Rob Pike committed
4382
</p>
4383

4384
<pre class="grammar">
4385 4386
new(T)
</pre>
4387

Rob Pike's avatar
Rob Pike committed
4388
<p>
4389
For instance
Rob Pike's avatar
Rob Pike committed
4390
</p>
4391

4392 4393 4394 4395
<pre>
type S struct { a int; b float }
new(S)
</pre>
4396

4397
<p>
Rob Pike's avatar
Rob Pike committed
4398 4399 4400 4401 4402
dynamically allocates memory for a variable of type <code>S</code>,
initializes it (<code>a=0</code>, <code>b=0.0</code>),
and returns a value of type <code>*S</code> containing the address
of the memory.
</p>
Robert Griesemer's avatar
Robert Griesemer committed
4403

4404
<h3 id="Making_slices_maps_and_channels">Making slices, maps and channels</h3>
Robert Griesemer's avatar
Robert Griesemer committed
4405

Rob Pike's avatar
Rob Pike committed
4406 4407 4408 4409 4410 4411 4412
<p>
Slices, maps and channels are reference types that do not require the
extra indirection of an allocation with <code>new</code>.
The built-in function <code>make</code> takes a type <code>T</code>,
which must be a slice, map or channel type,
optionally followed by a type-specific list of expressions.
It returns a value of type <code>T</code> (not <code>*T</code>).
Robert Griesemer's avatar
Robert Griesemer committed
4413
The memory is initialized as described in the section on initial values
4414
<a href="#The_zero_value">The zero value</a>).
Rob Pike's avatar
Rob Pike committed
4415
</p>
Robert Griesemer's avatar
Robert Griesemer committed
4416

4417
<pre class="grammar">
4418 4419
make(T [, optional list of expressions])
</pre>
Robert Griesemer's avatar
Robert Griesemer committed
4420

Rob Pike's avatar
Rob Pike committed
4421
<p>
Robert Griesemer's avatar
Robert Griesemer committed
4422
For instance
Rob Pike's avatar
Rob Pike committed
4423
</p>
Robert Griesemer's avatar
Robert Griesemer committed
4424

4425 4426 4427
<pre>
make(map[string] int)
</pre>
Robert Griesemer's avatar
Robert Griesemer committed
4428

Rob Pike's avatar
Rob Pike committed
4429
<p>
Robert Griesemer's avatar
Robert Griesemer committed
4430
creates a new map value and initializes it to an empty map.
Rob Pike's avatar
Rob Pike committed
4431
</p>
Robert Griesemer's avatar
Robert Griesemer committed
4432

Rob Pike's avatar
Rob Pike committed
4433 4434
<p>
The parameters affect sizes for allocating slices, maps, and
Robert Griesemer's avatar
Robert Griesemer committed
4435
buffered channels:
Rob Pike's avatar
Rob Pike committed
4436
</p>
Robert Griesemer's avatar
Robert Griesemer committed
4437

4438
<pre>
4439 4440 4441 4442
s := make([]int, 10, 100)        // slice with len(s) == 10, cap(s) == 100
s := make([]int, 10)             // slice with len(s) == cap(s) == 10
c := make(chan int, 10)          // channel with a buffer size of 10
m := make(map[string] int, 100)  // map with initial space for 100 elements
4443
</pre>
4444

4445

4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466
<h3 id="Copying_slices">Copying slices</h3>

<p>
The built-in function <code>copy</code> copies array or slice elements from
a source <code>src</code> to a destination <code>dst</code> and returns the
number of elements copied. Source and destination may overlap.
Both arguments must have the same element type <code>T</code> and must be
<a href="#Assignment_compatibility">assignment compatible</a> to a slice
of type <code>[]T</code>. The number of arguments copied is the minimum of
<code>len(src)</code> and <code>len(dst)</code>.
</p>

<pre class="grammar">
copy(dst, src []T) int
</pre>

<p>
Examples:
</p>

<pre>
4467 4468 4469 4470
var a = [...]int{0, 1, 2, 3, 4, 5, 6, 7}
var s = make([]int, 6)
n1 := copy(s, &amp;a)     // n1 == 6, s == []int{0, 1, 2, 3, 4, 5}
n2 := copy(s, s[2:])  // n2 == 4, s == []int{2, 3, 4, 5, 4, 5}
4471 4472
</pre>

Rob Pike's avatar
Rob Pike committed
4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515
<h3 id="Complex_numbers">Assembling and disassembling complex numbers</h3>

<p>
Three functions assemble and disassemble complex numbers.
The built-in function <code>cmplx</code> constructs a complex
value from a floating-point real and imaginary part, while
<code>real</code> and <code>imag</code>
extract the real and imaginary parts of a complex value.
</p>

<pre class="grammar">
cmplx(realPart, imaginaryPart floatT) complexT
real(complexT) floatT
imag(complexT) floatT
</pre>

<p>
The type of the arguments and return value correspond.
For <code>cmplx</code>, the two arguments must be of the same
floating-point type and the return type is the complex type
with the corresponding floating-point constituents:
<code>complex</code> for <code>float</code>,
<code>complex64</code> for <code>float32</code>,
<code>complex128</code> for <code>float64</code>.
The <code>real</code> and <code>imag</code> functions
together form the inverse, so for a complex value <code>z</code>,
<code>z</code> <code>==</code> <code>cmplx(real(z),</code> <code>imag(z))</code>.
</p>

<p>
If the operands of these functions are all constants, the return
value is a constant.
</p>

<pre>
var a = cmplx(2, -2)  // has type complex
var b = cmplx(1.0, -1.4)  // has type complex
x := float32(math.Cos(math.Pi/2))
var c64 = cmplx(5, -x)  // has type complex64
var im = imag(b)  // has type float
var rl = real(c64)  // type float32
</pre>

Rob Pike's avatar
Rob Pike committed
4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659
<h3 id="Handling_panics">Handling panics</h3>

<p> Two built-in functions, <code>panic</code> and <code>recover</code>,
assist in reporting and handling <a href="#Run_time_panics">run-time panics</a>
and program-defined error conditions. 
</p>

<pre class="grammar">
func panic(interface{})
func recover() interface{}
</pre>

<p>
<font color=red>TODO: Most of this text could move to the respective
comments in <code>runtime.go</code> once the functions are implemented.
They are here, at least for now, for reference and discussion.
</font>
</p>

<p>
When a function <code>F</code> calls <code>panic</code>, normal
execution of <code>F</code> stops immediately.  Any functions whose
execution was <a href="#Defer_statements">deferred</a> by the
invocation of <code>F</code> are run in the usual way, and then
<code>F</code> returns to its caller.  To the caller, <code>F</code>
then behaves like a call to <code>panic</code>, terminating its own
execution and running deferred functions.  This continues until all
functions in the goroutine have ceased execution, in reverse order.
At that point, the program is
terminated and the error condition is reported, including the value of
the argument to <code>panic</code>.  This termination sequence is
called <i>panicking</i>.
</p>

<p>
The <code>recover</code> function allows a program to manage behavior
of a panicking goroutine.  Executing a <code>recover</code> call
inside a deferred function (but not any function called by it) stops
the panicking sequence by restoring normal execution, and retrieves
the error value passed to the call of <code>panic</code>.  If
<code>recover</code> is called outside the deferred function it will
not stop a panicking sequence.  In this case, and when the goroutine
is not panicking, <code>recover</code> returns <code>nil</code>.
</p>

<p>
If the function defined here,
</p>

<pre>
func f(hideErrors bool) {
	defer func() {
		if x := recover(); x != nil {
			println("panicking with value", v)
			if !hideErrors {
				panic(x)  // go back to panicking
			}
		}
		println("function returns normally") // executes only when hideErrors==true
	}()
	println("before")
	p()
	println("after")	// never executes
}

func p() {
	panic(3)
}
</pre>

<p>
is called with <code>hideErrors=true</code>, it prints
</p>

<pre>
before
panicking with value 3
function returns normally
</pre>

<p>
and resumes normal execution in the function that called <code>f</code>. Otherwise, it prints
</p>

<pre>
before
panicking with value 3
</pre>

<p>
and, absent further <code>recover</code> calls, terminates the program.
</p>

<p>
Since deferred functions run before assigning the return values to the caller
of the deferring function, a deferred invocation of a function literal may modify the
invoking function's return values in the event of a panic. This permits a function to protect its
caller from panics that occur in functions it calls.
</p>

<pre>
func IsPrintable(s string) (ok bool) {
	ok = true
	defer func() {
		if recover() != nil {
			println("input is not printable")
			ok = false
		}
		// Panicking has stopped; execution will resume normally in caller.
		// The return value will be true normally, false if a panic occurred.
	}
	panicIfNotPrintable(s)	// will panic if validations fails.
}
</pre>

<!---
<p>
A deferred function that calls <code>recover</code> will see the
argument passed to <code>panic</code>.  However, functions called
<i>from</i> the deferred function run normally, without behaving as
though they are panicking.  This allows deferred code to run normally
in case recovery is necessary and guarantees that functions that manage
their own panics will not fail incorrectly.  The function
</p>

<pre>
func g() {
	s := ReadString()
	defer func() {
		if IsPrintable(s) {
			println("finished processing", s)
		} else {
			println("finished processing unprintable string")
		}
	}()
	Analyze(s)
}
</pre>

<p>
will not cause <code>IsPrintable</code> to print <code>"input is not printable"</code>
due to a <code>panic</code> triggered by the call to <code>Analyze</code>.
</p>
-->
4660

4661 4662
<h3 id="Bootstrapping">Bootstrapping</h3>

4663
<p>
4664 4665 4666
Current implementations provide several built-in functions useful during
bootstrapping. These functions are documented for completeness but are not
guaranteed to stay in the language. They do not return a result.
4667 4668
</p>

4669
<pre class="grammar">
4670
Function   Behavior
4671 4672 4673 4674 4675 4676

print      prints all arguments; formatting of arguments is implementation-specific
println    like print but prints spaces between arguments and a newline at the end
</pre>


4677
<h2 id="Packages">Packages</h2>
4678

Rob Pike's avatar
Rob Pike committed
4679 4680
<p>
Go programs are constructed by linking together <i>packages</i>.
4681 4682 4683 4684 4685
A package in turn is constructed from one or more source files
that together declare constants, types, variables and functions
belonging to the package and which are accessible in all files
of the same package. Those elements may be
<a href="#Exported_identifiers">exported</a> and used in another package.
Rob Pike's avatar
Rob Pike committed
4686 4687
</p>

4688
<h3 id="Source_file_organization">Source file organization</h3>
Rob Pike's avatar
Rob Pike committed
4689 4690 4691 4692 4693 4694

<p>
Each source file consists of a package clause defining the package
to which it belongs, followed by a possibly empty set of import
declarations that declare packages whose contents it wishes to use,
followed by a possibly empty set of declarations of functions,
Robert Griesemer's avatar
Robert Griesemer committed
4695
types, variables, and constants.
Rob Pike's avatar
Rob Pike committed
4696
</p>
4697

4698
<pre class="ebnf">
4699
SourceFile       = PackageClause ";" { ImportDecl ";" } { TopLevelDecl ";" } .
4700
</pre>
4701

4702
<h3 id="Package_clause">Package clause</h3>
Rob Pike's avatar
Rob Pike committed
4703

4704
<p>
Rob Pike's avatar
Rob Pike committed
4705 4706 4707
A package clause begins each source file and defines the package
to which the file belongs.
</p>
4708

4709
<pre class="ebnf">
Robert Griesemer's avatar
Robert Griesemer committed
4710 4711
PackageClause  = "package" PackageName .
PackageName    = identifier .
Rob Pike's avatar
Rob Pike committed
4712
</pre>
4713

Robert Griesemer's avatar
Robert Griesemer committed
4714 4715 4716 4717
<p>
The PackageName must not be the <a href="#Blank_identifier">blank identifier</a>.
</p>

Rob Pike's avatar
Rob Pike committed
4718 4719
<pre>
package math
4720
</pre>
4721

Rob Pike's avatar
Rob Pike committed
4722 4723 4724 4725
<p>
A set of files sharing the same PackageName form the implementation of a package.
An implementation may require that all source files for a package inhabit the same directory.
</p>
4726

4727
<h3 id="Import_declarations">Import declarations</h3>
Rob Pike's avatar
Rob Pike committed
4728 4729

<p>
Rob Pike's avatar
Rob Pike committed
4730 4731 4732 4733 4734 4735
An import declaration states that the source file containing the
declaration uses identifiers
<a href="#Exported_identifiers">exported</a> by the <i>imported</i>
package and enables access to them.  The import names an
identifier (PackageName) to be used for access and an ImportPath
that specifies the package to be imported.
Rob Pike's avatar
Rob Pike committed
4736
</p>
4737

4738
<pre class="ebnf">
4739
ImportDecl       = "import" ( ImportSpec | "(" { ImportSpec ";" } ")" ) .
4740
ImportSpec       = [ "." | PackageName ] ImportPath .
4741
ImportPath       = string_lit .
4742
</pre>
4743

4744
<p>
Rob Pike's avatar
Rob Pike committed
4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758
The PackageName is used in <a href="#Qualified_identifiers">qualified identifiers</a>
to access the exported identifiers of the package within the importing source file.
It is declared in the <a href="#Blocks">file block</a>.
If the PackageName is omitted, it defaults to the identifier specified in the
<a href="#Package_clauses">package clause</a> of the imported package.
If an explicit period (<code>.</code>) appears instead of a name, all the
package's exported identifiers will be declared in the current file's
file block and can be accessed without a qualifier.
</p>

<p>
The interpretation of the ImportPath is implementation-dependent but
it is typically a substring of the full file name of the compiled
package and may be relative to a repository of installed packages.
Rob Pike's avatar
Rob Pike committed
4759
</p>
Russ Cox's avatar
Russ Cox committed
4760

4761
<p>
Rob Pike's avatar
Rob Pike committed
4762 4763 4764
Assume we have compiled a package containing the package clause
<code>package math</code>, which exports function <code>Sin</code>, and
installed the compiled package in the file identified by
Rob Pike's avatar
Rob Pike committed
4765
<code>"lib/math"</code>.
Rob Pike's avatar
Rob Pike committed
4766 4767 4768
This table illustrates how <code>Sin</code> may be accessed in files
that import the package after the
various types of import declaration.
Rob Pike's avatar
Rob Pike committed
4769
</p>
4770

Rob Pike's avatar
Rob Pike committed
4771
<pre class="grammar">
4772
Import declaration          Local name of Sin
Rob Pike's avatar
Rob Pike committed
4773 4774

import   "lib/math"         math.Sin
4775
import M "lib/math"         M.Sin
Rob Pike's avatar
Rob Pike committed
4776
import . "lib/math"         Sin
4777
</pre>
4778

4779
<p>
Rob Pike's avatar
Rob Pike committed
4780 4781
An import declaration declares a dependency relation between
the importing and imported package.
4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792
It is illegal for a package to import itself or to import a package without
referring to any of its exported identifiers. To import a package solely for
its side-effects (initialization), use the <a href="#Blank_identifier">blank</a>
identifier as explicit package name:
</p>

<pre>
import _ "lib/math"
</pre>


4793
<h3 id="An_example_package">An example package</h3>
Rob Pike's avatar
Rob Pike committed
4794 4795 4796 4797

<p>
Here is a complete Go package that implements a concurrent prime sieve.
</p>
4798

4799 4800 4801
<pre>
package main

Rob Pike's avatar
Rob Pike committed
4802 4803
import "fmt"

4804
// Send the sequence 2, 3, 4, ... to channel 'ch'.
4805
func generate(ch chan&lt;- int) {
4806
	for i := 2; ; i++ {
4807
		ch &lt;- i  // Send 'i' to channel 'ch'.
4808
	}
4809 4810
}

Fazlul Shahriar's avatar
Fazlul Shahriar committed
4811
// Copy the values from channel 'src' to channel 'dst',
4812
// removing those divisible by 'prime'.
4813 4814 4815
func filter(src &lt;-chan int, dst chan&lt;- int, prime int) {
	for i := range src {	// Loop over values received from 'src'.
		if i%prime != 0 {
4816
			dst &lt;- i  // Send 'i' to channel 'dst'.
4817 4818
		}
	}
4819 4820 4821 4822
}

// The prime sieve: Daisy-chain filter processes together.
func sieve() {
4823 4824
	ch := make(chan int)  // Create a new channel.
	go generate(ch)       // Start generate() as a subprocess.
4825
	for {
4826 4827 4828 4829 4830
		prime := &lt;-ch
		fmt.Print(prime, "\n")
		ch1 := make(chan int)
		go filter(ch, ch1, prime)
		ch = ch1
4831
	}
4832
}
4833

4834
func main() {
4835
	sieve()
4836 4837
}
</pre>
4838

4839
<h2 id="Program_initialization_and_execution">Program initialization and execution</h2>
4840

4841
<h3 id="The_zero_value">The zero value</h3>
Rob Pike's avatar
Rob Pike committed
4842
<p>
4843
When memory is allocated to store a value, either through a declaration
Rob Pike's avatar
Rob Pike committed
4844 4845
or <code>make()</code> or <code>new()</code> call,
and no explicit initialization is provided, the memory is
4846
given a default initialization.  Each element of such a value is
4847
set to the <i>zero value</i> for its type: <code>false</code> for booleans,
Rob Pike's avatar
Rob Pike committed
4848
<code>0</code> for integers, <code>0.0</code> for floats, <code>""</code>
4849
for strings, and <code>nil</code> for pointers, functions, interfaces, slices, channels, and maps.
Rob Pike's avatar
Rob Pike committed
4850
This initialization is done recursively, so for instance each element of an
Rob Pike's avatar
Rob Pike committed
4851 4852
array of structs will have its fields zeroed if no value is specified.
</p>
4853
<p>
4854
These two simple declarations are equivalent:
Rob Pike's avatar
Rob Pike committed
4855
</p>
4856

4857
<pre>
4858 4859
var i int
var i int = 0
4860
</pre>
4861

Rob Pike's avatar
Rob Pike committed
4862
<p>
4863
After
Rob Pike's avatar
Rob Pike committed
4864
</p>
4865

4866
<pre>
4867 4868
type T struct { i int; f float; next *T }
t := new(T)
4869
</pre>
4870

Rob Pike's avatar
Rob Pike committed
4871
<p>
4872
the following holds:
Rob Pike's avatar
Rob Pike committed
4873
</p>
4874

4875 4876 4877 4878 4879
<pre>
t.i == 0
t.f == 0.0
t.next == nil
</pre>
4880

Rob Pike's avatar
Rob Pike committed
4881 4882 4883 4884 4885 4886 4887 4888
<p>
The same would also be true after
</p>

<pre>
var t T
</pre>

4889
<h3 id="Program_execution">Program execution</h3>
Rob Pike's avatar
Rob Pike committed
4890
<p>
4891
A package with no imports is initialized by assigning initial values to
4892
all its package-level variables
Rob Pike's avatar
Rob Pike committed
4893
and then calling any
Rob Pike's avatar
Rob Pike committed
4894 4895 4896 4897 4898 4899
package-level function with the name and signature of
</p>
<pre>
func init()
</pre>
<p>
4900 4901 4902 4903 4904
defined in its source.
A package may contain multiple
<code>init()</code> functions, even
within a single source file; they execute
in unspecified order.
Rob Pike's avatar
Rob Pike committed
4905
</p>
4906
<p>
4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920
Within a package, package-level variables are initialized,
and constant values are determined, in
data-dependent order: if the initializer of <code>A</code>
depends on the value of <code>B</code>, <code>A</code>
will be set after <code>B</code>.
It is an error if such dependencies form a cycle.
Dependency analysis is done lexically: <code>A</code>
depends on <code>B</code> if the value of <code>A</code>
contains a mention of <code>B</code>, contains a value
whose initializer
mentions <code>B</code>, or mentions a function that
mentions <code>B</code>, recursively.
If two items are not interdependent, they will be initialized
in the order they appear in the source.
Rob Pike's avatar
Rob Pike committed
4921 4922
Since the dependency analysis is done per package, it can produce
unspecified results  if <code>A</code>'s initializer calls a function defined
4923 4924 4925
in another package that refers to <code>B</code>.
</p>
<p>
4926
Initialization code may contain "go" statements, but the functions
4927 4928
they invoke do not begin execution until initialization of the entire
program is complete. Therefore, all initialization code is run in a single
Rob Pike's avatar
Rob Pike committed
4929
goroutine.
Rob Pike's avatar
Rob Pike committed
4930
</p>
4931
<p>
Rob Pike's avatar
Rob Pike committed
4932 4933 4934
An <code>init()</code> function cannot be referred to from anywhere
in a program. In particular, <code>init()</code> cannot be called explicitly,
nor can a pointer to <code>init</code> be assigned to a function variable.
Rob Pike's avatar
Rob Pike committed
4935
</p>
4936
<p>
4937
If a package has imports, the imported packages are initialized
4938
before initializing the package itself. If multiple packages import
Rob Pike's avatar
Rob Pike committed
4939
a package <code>P</code>, <code>P</code> will be initialized only once.
Rob Pike's avatar
Rob Pike committed
4940
</p>
4941
<p>
4942 4943
The importing of packages, by construction, guarantees that there can
be no cyclic dependencies in initialization.
Rob Pike's avatar
Rob Pike committed
4944
</p>
4945
<p>
4946
A complete program, possibly created by linking multiple packages,
Rob Pike's avatar
Rob Pike committed
4947
must have one package called <code>main</code>, with a function
Rob Pike's avatar
Rob Pike committed
4948
</p>
4949

4950
<pre>
Rob Pike's avatar
Rob Pike committed
4951
func main() { ... }
4952
</pre>
4953

Rob Pike's avatar
Rob Pike committed
4954
<p>
Rob Pike's avatar
Rob Pike committed
4955 4956
defined.
The function <code>main.main()</code> takes no arguments and returns no value.
Rob Pike's avatar
Rob Pike committed
4957
</p>
4958
<p>
Rob Pike's avatar
Rob Pike committed
4959
Program execution begins by initializing the <code>main</code> package and then
Rob Pike's avatar
Rob Pike committed
4960 4961
invoking <code>main.main()</code>.
</p>
4962
<p>
4963 4964
When <code>main.main()</code> returns, the program exits.  It does not wait for
other (non-<code>main</code>) goroutines to complete.
Rob Pike's avatar
Rob Pike committed
4965
</p>
Rob Pike's avatar
Rob Pike committed
4966 4967
<p>
Implementation restriction: The compiler assumes package <code>main</code>
4968
is not imported by any other package.
Rob Pike's avatar
Rob Pike committed
4969
</p>
4970

Rob Pike's avatar
Rob Pike committed
4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992
<h2 id="Run_time_errors">Run-time panics</h2>

<p>
Execution errors such as attempting to index an array out
of bounds trigger a <i>run-time panic</i> equivalent to a call of
the built-in function <a href="#Handling_panics"><code>panic</code></a>
with a value of the implementation-defined interface type <code>runtime.Error</code>.
That type defines at least the method
<code>String() string</code>.  The exact error values that
represent distinct run-time error conditions are unspecified,
at least for now.
</p>

<pre>
package runtime

type Error interface {
	String() string
	// and perhaps others
}
</pre>

4993
<h2 id="System_considerations">System considerations</h2>
4994

4995
<h3 id="Package_unsafe">Package <code>unsafe</code></h3>
4996

4997
<p>
Rob Pike's avatar
Rob Pike committed
4998 4999 5000 5001 5002
The built-in package <code>unsafe</code>, known to the compiler,
provides facilities for low-level programming including operations
that violate the type system. A package using <code>unsafe</code>
must be vetted manually for type safety.  The package provides the
following interface:
5003
</p>
5004

Rob Pike's avatar
Rob Pike committed
5005
<pre class="grammar">
5006
package unsafe
5007

5008 5009
type ArbitraryType int  // shorthand for an arbitrary Go type; it is not a real type
type Pointer *ArbitraryType
5010

5011 5012 5013
func Alignof(variable ArbitraryType) int
func Offsetof(selector ArbitraryType) int
func Sizeof(variable ArbitraryType) int
Rob Pike's avatar
Rob Pike committed
5014 5015 5016 5017

func Reflect(val interface {}) (typ runtime.Type, addr uintptr)
func Typeof(val interface {}) reflect.Type
func Unreflect(typ runtime.Type, addr uintptr) interface{}
5018
</pre>
5019

5020
<p>
5021 5022 5023
Any pointer or value of type <code>uintptr</code> can be converted into
a <code>Pointer</code> and vice versa.
</p>
5024
<p>
5025
The function <code>Sizeof</code> takes an expression denoting a
5026
variable of any type and returns the size of the variable in bytes.
5027
</p>
5028
<p>
5029
The function <code>Offsetof</code> takes a selector (§<a href="#Selectors">Selectors</a>) denoting a struct
5030
field of any type and returns the field offset in bytes relative to the
Rob Pike's avatar
Rob Pike committed
5031 5032
struct's address.
For a struct <code>s</code> with field <code>f</code>:
5033
</p>
5034

5035
<pre>
5036
uintptr(unsafe.Pointer(&amp;s)) + uintptr(unsafe.Offsetof(s.f)) == uintptr(unsafe.Pointer(&amp;s.f))
5037
</pre>
5038

5039
<p>
5040 5041 5042 5043 5044 5045 5046
Computer architectures may require memory addresses to be <i>aligned</i>;
that is, for addresses of a variable to be a multiple of a factor,
the variable's type's <i>alignment</i>.  The function <code>Alignof</code>
takes an expression denoting a variable of any type and returns the
alignment of the (type of the) variable in bytes.  For a variable
<code>x</code>:
</p>
5047

5048 5049 5050
<pre>
uintptr(unsafe.Pointer(&amp;x)) % uintptr(unsafe.Alignof(x)) == 0
</pre>
5051

5052 5053
<p>
Calls to <code>Alignof</code>, <code>Offsetof</code>, and
Rob Pike's avatar
Rob Pike committed
5054 5055 5056 5057 5058
<code>Sizeof</code> are compile-time constant expressions of type <code>int</code>.
</p>
<p>
The functions <code>unsafe.Typeof</code>,
<code>unsafe.Reflect</code>,
Russ Cox's avatar
Russ Cox committed
5059
and <code>unsafe.Unreflect</code> allow access at run time to the dynamic
Rob Pike's avatar
Rob Pike committed
5060 5061 5062 5063 5064 5065 5066 5067 5068 5069
types and values stored in interfaces.
<code>Typeof</code> returns a representation of
<code>val</code>'s
dynamic type as a <code>runtime.Type</code>.
<code>Reflect</code> allocates a copy of
<code>val</code>'s dynamic
value and returns both the type and the address of the copy.
<code>Unreflect</code> inverts <code>Reflect</code>,
creating an
interface value from a type and address.
5070
The <a href="/pkg/reflect/"><code>reflect</code> package</a> built on these primitives
Rob Pike's avatar
Rob Pike committed
5071
provides a safe, more convenient way to inspect interface values.
5072
</p>
5073

5074

5075
<h3 id="Size_and_alignment_guarantees">Size and alignment guarantees</h3>
5076

5077
<p>
5078
For the numeric types (§<a href="#Numeric_types">Numeric types</a>), the following sizes are guaranteed:
5079
</p>
5080

Rob Pike's avatar
Rob Pike committed
5081
<pre class="grammar">
5082
type                      size in bytes
5083

5084 5085 5086 5087 5088
byte, uint8, int8         1
uint16, int16             2
uint32, int32, float32    4
uint64, int64, float64    8
</pre>
5089

5090
<p>
5091
The following minimal alignment properties are guaranteed:
Rob Pike's avatar
Rob Pike committed
5092
</p>
5093
<ol>
5094
<li>For a variable <code>x</code> of any type: <code>1 <= unsafe.Alignof(x) <= unsafe.Maxalign</code>.
5095

5096
<li>For a variable <code>x</code> of numeric type: <code>unsafe.Alignof(x)</code> is the smaller
5097
   of <code>unsafe.Sizeof(x)</code> and <code>unsafe.Maxalign</code>, but at least 1.
5098

5099 5100
<li>For a variable <code>x</code> of struct type: <code>unsafe.Alignof(x)</code> is the largest of
   all the values <code>unsafe.Alignof(x.f)</code> for each field <code>f</code> of x, but at least 1.
5101

5102 5103
<li>For a variable <code>x</code> of array type: <code>unsafe.Alignof(x)</code> is the same as
   <code>unsafe.Alignof(x[0])</code>, but at least 1.
5104
</ol>
5105

Robert Griesemer's avatar
Robert Griesemer committed
5106
<h2 id="Implementation_differences"><span class="alert">Implementation differences - TODO</span></h2>
5107
<ul>
Robert Griesemer's avatar
Robert Griesemer committed
5108
	<li><span class="alert">Implementation does not honor the restriction on goto statements and targets (no intervening declarations).</span></li>
5109
	<li><span class="alert">Method expressions are partially implemented.</span></li>
5110
	<li><span class="alert">Gccgo allows only one init() function per source file.</span></li>
5111
	<li><span class="alert">Deferred functions cannot access the surrounding function's result parameters.</span></li>
5112
	<li><span class="alert">Function results are not addressable in gccgo.</span></li>
Rob Pike's avatar
Rob Pike committed
5113 5114
	<li><span class="alert">Recover is not implemented.</span></li>
	<li><span class="alert">The implemented version of panic differs from its specification.</span></li>
5115
</ul>