go_spec.html 197 KB
Newer Older
1 2
<!--{
	"Title": "The Go Programming Language Specification",
3
	"Subtitle": "Version of June 7, 2017",
4
	"Path": "/ref/spec"
5
}-->
6

7
<h2 id="Introduction">Introduction</h2>
8

9
<p>
Rob Pike's avatar
Rob Pike committed
10
This is a reference manual for the Go programming language. For
11
more information and other documents, see <a href="/">golang.org</a>.
Rob Pike's avatar
Rob Pike committed
12
</p>
13

14
<p>
Rob Pike's avatar
Rob Pike committed
15
Go is a general-purpose language designed with systems programming
Rob Pike's avatar
Rob Pike committed
16
in mind. It is strongly typed and garbage-collected and has explicit
Rob Pike's avatar
Rob Pike committed
17 18 19 20 21
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>
22

23
<p>
Rob Pike's avatar
Rob Pike committed
24 25 26
The grammar is compact and regular, allowing for easy analysis by
automatic tools such as integrated development environments.
</p>
27

28
<h2 id="Notation">Notation</h2>
Rob Pike's avatar
Rob Pike committed
29
<p>
30
The syntax is specified using Extended Backus-Naur Form (EBNF):
Rob Pike's avatar
Rob Pike committed
31
</p>
32

Rob Pike's avatar
Rob Pike committed
33
<pre class="grammar">
34
Production  = production_name "=" [ Expression ] "." .
Rob Pike's avatar
Rob Pike committed
35
Expression  = Alternative { "|" Alternative } .
36
Alternative = Term { Term } .
37
Term        = production_name | token [ "…" token ] | Group | Option | Repetition .
Rob Pike's avatar
Rob Pike committed
38
Group       = "(" Expression ")" .
39
Option      = "[" Expression "]" .
Rob Pike's avatar
Rob Pike committed
40
Repetition  = "{" Expression "}" .
41
</pre>
Robert Griesemer's avatar
Robert Griesemer committed
42

Rob Pike's avatar
Rob Pike committed
43 44 45 46
<p>
Productions are expressions constructed from terms and the following
operators, in increasing precedence:
</p>
Rob Pike's avatar
Rob Pike committed
47
<pre class="grammar">
Rob Pike's avatar
Rob Pike committed
48 49 50 51
|   alternation
()  grouping
[]  option (0 or 1 times)
{}  repetition (0 to n times)
52
</pre>
53

54
<p>
Rob Pike's avatar
Rob Pike committed
55
Lower-case production names are used to identify lexical tokens.
56
Non-terminals are in CamelCase. Lexical tokens are enclosed in
Rob Pike's avatar
Rob Pike committed
57
double quotes <code>""</code> or back quotes <code>``</code>.
Rob Pike's avatar
Rob Pike committed
58 59
</p>

60
<p>
61 62
The form <code>a … b</code> represents the set of characters from
<code>a</code> through <code>b</code> as alternatives. The horizontal
63
ellipsis <code></code> is also used elsewhere in the spec to informally denote various
64
enumerations or code snippets that are not further specified. The character <code></code>
65 66
(as opposed to the three characters <code>...</code>) is not a token of the Go
language.
Rob Pike's avatar
Rob Pike committed
67 68
</p>

69
<h2 id="Source_code_representation">Source code representation</h2>
70

71
<p>
Robert Griesemer's avatar
Robert Griesemer committed
72 73
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
74 75 76
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
77 78
will use the unqualified term <i>character</i> to refer to a Unicode code point
in the source text.
Rob Pike's avatar
Rob Pike committed
79
</p>
80
<p>
Rob Pike's avatar
Rob Pike committed
81 82 83
Each code point is distinct; for instance, upper and lower case letters
are different characters.
</p>
Russ Cox's avatar
Russ Cox committed
84
<p>
85 86
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
87
</p>
88 89
<p>
Implementation restriction: For compatibility with other tools, a
Rob Pike's avatar
Rob Pike committed
90 91
compiler may ignore a UTF-8-encoded byte order mark
(U+FEFF) if it is the first Unicode code point in the source text.
92
A byte order mark may be disallowed anywhere else in the source.
93
</p>
94

95
<h3 id="Characters">Characters</h3>
96

97
<p>
Rob Pike's avatar
Rob Pike committed
98 99
The following terms are used to denote specific Unicode character classes:
</p>
100
<pre class="ebnf">
101 102
newline        = /* the Unicode code point U+000A */ .
unicode_char   = /* an arbitrary Unicode code point except newline */ .
103
unicode_letter = /* a Unicode code point classified as "Letter" */ .
104
unicode_digit  = /* a Unicode code point classified as "Number, decimal digit" */ .
105
</pre>
106

Rob Pike's avatar
Rob Pike committed
107
<p>
108 109 110 111
In <a href="http://www.unicode.org/versions/Unicode8.0.0/">The Unicode Standard 8.0</a>,
Section 4.5 "General Category" defines a set of character categories.
Go treats all characters in any of the Letter categories Lu, Ll, Lt, Lm, or Lo
as Unicode letters, and those in the Number category Nd as Unicode digits.
Rob Pike's avatar
Rob Pike committed
112
</p>
113

114
<h3 id="Letters_and_digits">Letters and digits</h3>
Rob Pike's avatar
Rob Pike committed
115 116

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

126
<h2 id="Lexical_elements">Lexical elements</h2>
127

128
<h3 id="Comments">Comments</h3>
129

Rob Pike's avatar
Rob Pike committed
130
<p>
131
Comments serve as program documentation. There are two forms:
Rob Pike's avatar
Rob Pike committed
132 133
</p>

134 135 136
<ol>
<li>
<i>Line comments</i> start with the character sequence <code>//</code>
137
and stop at the end of the line.
138 139 140
</li>
<li>
<i>General comments</i> start with the character sequence <code>/*</code>
141
and stop with the first subsequent character sequence <code>*/</code>.
142 143 144 145
</li>
</ol>

<p>
146 147 148 149
A comment cannot start inside a <a href="#Rune_literals">rune</a> or
<a href="#String_literals">string literal</a>, or inside a comment.
A general comment containing no newlines acts like a space.
Any other comment acts like a newline.
150 151
</p>

152
<h3 id="Tokens">Tokens</h3>
153

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

168 169 170 171 172 173 174 175 176 177 178
<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>
When the input is broken into tokens, a semicolon is automatically inserted
179
into the token stream immediately after a line's final token if that token is
180
<ul>
181 182
	<li>an
	    <a href="#Identifiers">identifier</a>
183
	</li>
184

185 186 187 188
	<li>an
	    <a href="#Integer_literals">integer</a>,
	    <a href="#Floating-point_literals">floating-point</a>,
	    <a href="#Imaginary_literals">imaginary</a>,
189
	    <a href="#Rune_literals">rune</a>, or
190 191
	    <a href="#String_literals">string</a> literal
	</li>
192

193 194 195 196 197 198
	<li>one of the <a href="#Keywords">keywords</a>
	    <code>break</code>,
	    <code>continue</code>,
	    <code>fallthrough</code>, or
	    <code>return</code>
	</li>
199

200
	<li>one of the <a href="#Operators_and_punctuation">operators and punctuation</a>
201 202 203 204 205
	    <code>++</code>,
	    <code>--</code>,
	    <code>)</code>,
	    <code>]</code>, or
	    <code>}</code>
206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221
	</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>


222
<h3 id="Identifiers">Identifiers</h3>
223

Rob Pike's avatar
Rob Pike committed
224 225 226 227 228
<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>
229
<pre class="ebnf">
230
identifier = letter { letter | unicode_digit } .
231 232 233 234 235 236 237
</pre>
<pre>
a
_x9
ThisVariableIsExported
αβ
</pre>
238 239

<p>
Robert Griesemer's avatar
Robert Griesemer committed
240
Some identifiers are <a href="#Predeclared_identifiers">predeclared</a>.
241 242
</p>

243

244
<h3 id="Keywords">Keywords</h3>
245

Rob Pike's avatar
Rob Pike committed
246 247 248 249 250 251 252 253 254 255
<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>
256

257
<h3 id="Operators_and_punctuation">Operators and punctuation</h3>
Rob Pike's avatar
Rob Pike committed
258 259

<p>
260 261
The following character sequences represent <a href="#Operators">operators</a>
(including <a href="#assign_op">assignment operators</a>) and punctuation:
Rob Pike's avatar
Rob Pike committed
262 263 264 265 266
</p>
<pre class="grammar">
+    &amp;     +=    &amp;=     &amp;&amp;    ==    !=    (    )
-    |     -=    |=     ||    &lt;     &lt;=    [    ]
*    ^     *=    ^=     &lt;-    &gt;     &gt;=    {    }
Robert Griesemer's avatar
Robert Griesemer committed
267 268
/    &lt;&lt;    /=    &lt;&lt;=    ++    =     :=    ,    ;
%    &gt;&gt;    %=    &gt;&gt;=    --    !     ...   .    :
269
     &amp;^          &amp;^=
Rob Pike's avatar
Rob Pike committed
270 271
</pre>

272
<h3 id="Integer_literals">Integer literals</h3>
Rob Pike's avatar
Rob Pike committed
273 274

<p>
275 276 277
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
278 279
<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
280
</p>
281
<pre class="ebnf">
282
int_lit     = decimal_lit | octal_lit | hex_lit .
283
decimal_lit = ( "1" … "9" ) { decimal_digit } .
284 285
octal_lit   = "0" { octal_digit } .
hex_lit     = "0" ( "x" | "X" ) hex_digit { hex_digit } .
286 287 288 289 290 291 292 293
</pre>

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

295
<h3 id="Floating-point_literals">Floating-point literals</h3>
Rob Pike's avatar
Rob Pike committed
296
<p>
297 298 299
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
300
and an exponent part.  The integer and fractional part comprise
301
decimal digits; the exponent part is an <code>e</code> or <code>E</code>
Rob Pike's avatar
Rob Pike committed
302 303 304 305
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>
306
<pre class="ebnf">
307 308 309 310 311
float_lit = decimals "." [ decimals ] [ exponent ] |
            decimals exponent |
            "." decimals [ exponent ] .
decimals  = decimal_digit { decimal_digit } .
exponent  = ( "e" | "E" ) [ "+" | "-" ] decimals .
312 313 314 315
</pre>

<pre>
0.
Rob Pike's avatar
Rob Pike committed
316 317
72.40
072.40  // == 72.40
318 319 320 321 322 323 324
2.71828
1.e+0
6.67428e-11
1E6
.25
.12345E+5
</pre>
325

Rob Pike's avatar
Rob Pike committed
326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350
<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>

351

352
<h3 id="Rune_literals">Rune literals</h3>
353

Rob Pike's avatar
Rob Pike committed
354
<p>
355 356
A rune literal represents a <a href="#Constants">rune constant</a>,
an integer value identifying a Unicode code point.
357 358 359 360
A rune literal is expressed as one or more characters enclosed in single quotes,
as in <code>'x'</code> or <code>'\n'</code>.
Within the quotes, any character may appear except newline and unescaped single
quote. A single quoted character represents the Unicode value
361
of the character itself,
Rob Pike's avatar
Rob Pike committed
362 363
while multi-character sequences beginning with a backslash encode
values in various formats.
Rob Pike's avatar
Rob Pike committed
364
</p>
365
<p>
Rob Pike's avatar
Rob Pike committed
366 367 368
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
369 370 371 372
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
373
</p>
374
<p>
375
Several backslash escapes allow arbitrary values to be encoded as
Oling Cat's avatar
Oling Cat committed
376
ASCII text.  There are four ways to represent the integer value
377 378 379 380
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
381 382 383
In each case the value of the literal is the value represented by
the digits in the corresponding base.
</p>
384
<p>
Rob Pike's avatar
Rob Pike committed
385 386
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
387 388
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
389
represent Unicode code points so within them some values are illegal,
390
in particular those above <code>0x10FFFF</code> and surrogate halves.
Rob Pike's avatar
Rob Pike committed
391
</p>
392
<p>
Rob Pike's avatar
Rob Pike committed
393 394 395 396 397 398 399 400 401 402 403
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
404
\'   U+0027 single quote  (valid escape only within rune literals)
Rob Pike's avatar
Rob Pike committed
405 406 407
\"   U+0022 double quote  (valid escape only within string literals)
</pre>
<p>
408
All other sequences starting with a backslash are illegal inside rune literals.
Rob Pike's avatar
Rob Pike committed
409
</p>
410
<pre class="ebnf">
Robert Griesemer's avatar
Robert Griesemer committed
411
rune_lit         = "'" ( unicode_value | byte_value ) "'" .
Rob Pike's avatar
Rob Pike committed
412 413
unicode_value    = unicode_char | little_u_value | big_u_value | escaped_char .
byte_value       = octal_byte_value | hex_byte_value .
414 415 416 417
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
418
                           hex_digit hex_digit hex_digit hex_digit .
419
escaped_char     = `\` ( "a" | "b" | "f" | "n" | "r" | "t" | "v" | `\` | "'" | `"` ) .
Rob Pike's avatar
Rob Pike committed
420
</pre>
421

422 423 424 425 426 427 428 429 430 431 432 433
<pre>
'a'
'ä'
'本'
'\t'
'\000'
'\007'
'\377'
'\x07'
'\xff'
'\u12e4'
'\U00101234'
434
'\''         // rune literal containing single quote character
435 436 437 438 439
'aa'         // illegal: too many characters
'\xa'        // illegal: too few hexadecimal digits
'\0'         // illegal: too few octal digits
'\uDFFF'     // illegal: surrogate half
'\U00110000' // illegal: invalid Unicode code point
440
</pre>
441 442


443
<h3 id="String_literals">String literals</h3>
Rob Pike's avatar
Rob Pike committed
444 445

<p>
446 447 448
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
449 450
</p>
<p>
451 452
Raw string literals are character sequences between back quotes, as in
<code>`foo`</code>.  Within the quotes, any character may appear except
453
back quote. The value of a raw string literal is the
454 455
string composed of the uninterpreted (implicitly UTF-8-encoded) characters
between the quotes;
456
in particular, backslashes have no special meaning and the string may
457
contain newlines.
458
Carriage return characters ('\r') inside raw string literals
459
are discarded from the raw string value.
Rob Pike's avatar
Rob Pike committed
460 461 462
</p>
<p>
Interpreted string literals are character sequences between double
463 464 465
quotes, as in <code>&quot;bar&quot;</code>.
Within the quotes, any character may appear except newline and unescaped double quote.
The text between the quotes forms the
Rob Pike's avatar
Rob Pike committed
466
value of the literal, with backslash escapes interpreted as they
467
are in <a href="#Rune_literals">rune literals</a> (except that <code>\'</code> is illegal and
468 469
<code>\"</code> is legal), with the same restrictions.
The three-digit octal (<code>\</code><i>nnn</i>)
Robert Griesemer's avatar
Robert Griesemer committed
470
and two-digit hexadecimal (<code>\x</code><i>nn</i>) escapes represent individual
Rob Pike's avatar
Rob Pike committed
471 472
<i>bytes</i> of the resulting string; all other escapes represent
the (possibly multi-byte) UTF-8 encoding of individual <i>characters</i>.
473 474 475
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
476
the two bytes <code>0xc3</code> <code>0xbf</code> of the UTF-8 encoding of character
Rob Pike's avatar
Rob Pike committed
477 478 479
U+00FF.
</p>

480
<pre class="ebnf">
Rob Pike's avatar
Rob Pike committed
481
string_lit             = raw_string_lit | interpreted_string_lit .
482
raw_string_lit         = "`" { unicode_char | newline } "`" .
483
interpreted_string_lit = `"` { unicode_value | byte_value } `"` .
484
</pre>
485

486
<pre>
487
`abc`                // same as "abc"
488
`\n
489
\n`                  // same as "\\n\n\\n"
490
"\n"
491
"\""                 // same as `"`
492 493 494 495
"Hello, world!\n"
"日本語"
"\u65e5本\U00008a9e"
"\xff\u00FF"
496 497
"\uD800"             // illegal: surrogate half
"\U00110000"         // illegal: invalid Unicode code point
498
</pre>
499

Rob Pike's avatar
Rob Pike committed
500
<p>
501
These examples all represent the same string:
Rob Pike's avatar
Rob Pike committed
502
</p>
503

504
<pre>
Rob Pike's avatar
Rob Pike committed
505 506
"日本語"                                 // UTF-8 input text
`日本語`                                 // UTF-8 input text as a raw literal
507 508 509
"\u65e5\u672c\u8a9e"                    // the explicit Unicode code points
"\U000065e5\U0000672c\U00008a9e"        // the explicit Unicode code points
"\xe6\x97\xa5\xe6\x9c\xac\xe8\xaa\x9e"  // the explicit UTF-8 bytes
510
</pre>
511

512
<p>
513 514
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
515
an error if placed in a rune literal (it is not a single code
516 517
point), and will appear as two code points if placed in a string
literal.
Rob Pike's avatar
Rob Pike committed
518
</p>
519

520 521 522

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

523
<p>There are <i>boolean constants</i>,
524
<i>rune constants</i>,
525
<i>integer constants</i>,
Rob Pike's avatar
Rob Pike committed
526
<i>floating-point constants</i>, <i>complex constants</i>,
527
and <i>string constants</i>. Rune, integer, floating-point,
Rob Pike's avatar
Rob Pike committed
528
and complex constants are
529 530 531 532
collectively called <i>numeric constants</i>.
</p>

<p>
533
A constant value is represented by a
534
<a href="#Rune_literals">rune</a>,
535 536
<a href="#Integer_literals">integer</a>,
<a href="#Floating-point_literals">floating-point</a>,
Rob Pike's avatar
Rob Pike committed
537
<a href="#Imaginary_literals">imaginary</a>,
538
or
539 540
<a href="#String_literals">string</a> literal,
an identifier denoting a constant,
541 542
a <a href="#Constant_expressions">constant expression</a>,
a <a href="#Conversions">conversion</a> with a result that is a constant, or
543 544 545 546
the result value of some built-in functions such as
<code>unsafe.Sizeof</code> applied to any value,
<code>cap</code> or <code>len</code> applied to
<a href="#Length_and_capacity">some expressions</a>,
Rob Pike's avatar
Rob Pike committed
547
<code>real</code> and <code>imag</code> applied to a complex constant
548
and <code>complex</code> applied to numeric constants.
549 550 551 552
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
553

Rob Pike's avatar
Rob Pike committed
554 555 556 557 558 559
<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
560
<p>
561 562 563
Numeric constants represent exact values of arbitrary precision and do not overflow.
Consequently, there are no constants denoting the IEEE-754 negative zero, infinity,
and not-a-number values.
Rob Pike's avatar
Rob Pike committed
564 565
</p>

566
<p>
567
Constants may be <a href="#Types">typed</a> or <i>untyped</i>.
568 569 570 571 572 573 574 575 576 577 578 579
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
580
cannot be represented as a value of the respective type.
Robert Griesemer's avatar
Robert Griesemer committed
581
For instance, <code>3.0</code> can be given any integer or any
582 583 584
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>.
585 586
</p>

587 588 589 590 591 592 593 594 595 596 597
<p>
An untyped constant has a <i>default type</i> which is the type to which the
constant is implicitly converted in contexts where a typed value is required,
for instance, in a <a href="#Short_variable_declarations">short variable declaration</a>
such as <code>i := 0</code> where there is no explicit type.
The default type of an untyped constant is <code>bool</code>, <code>rune</code>,
<code>int</code>, <code>float64</code>, <code>complex128</code> or <code>string</code>
respectively, depending on whether it is a boolean, rune, integer, floating-point,
complex, or string constant.
</p>

598
<p>
599 600 601 602
Implementation restriction: Although numeric constants have arbitrary
precision in the language, a compiler may implement them using an
internal representation with limited precision.  That said, every
implementation must:
603
</p>
604 605 606 607 608
<ul>
	<li>Represent integer constants with at least 256 bits.</li>

	<li>Represent floating-point constants, including the parts of
	    a complex constant, with a mantissa of at least 256 bits
609
	    and a signed binary exponent of at least 16 bits.</li>
610 611 612

	<li>Give an error if unable to represent an integer constant
	    precisely.</li>
613

614 615 616 617 618 619 620 621 622 623 624 625
	<li>Give an error if unable to represent a floating-point or
	    complex constant due to overflow.</li>

	<li>Round to the nearest representable constant if unable to
	    represent a floating-point or complex constant due to limits
	    on precision.</li>
</ul>
<p>
These requirements apply both to literal constants and to the result
of evaluating <a href="#Constant_expressions">constant
expressions</a>.
</p>
626

Robert Griesemer's avatar
Robert Griesemer committed
627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656
<h2 id="Variables">Variables</h2>

<p>
A variable is a storage location for holding a <i>value</i>.
The set of permissible values is determined by the
variable's <i><a href="#Types">type</a></i>.
</p>

<p>
A <a href="#Variable_declarations">variable declaration</a>
or, for function parameters and results, the signature
of a <a href="#Function_declarations">function declaration</a>
or <a href="#Function_literals">function literal</a> reserves
storage for a named variable.

Calling the built-in function <a href="#Allocation"><code>new</code></a>
or taking the address of a <a href="#Composite_literals">composite literal</a>
allocates storage for a variable at run time.
Such an anonymous variable is referred to via a (possibly implicit)
<a href="#Address_operators">pointer indirection</a>.
</p>

<p>
<i>Structured</i> variables of <a href="#Array_types">array</a>, <a href="#Slice_types">slice</a>,
and <a href="#Struct_types">struct</a> types have elements and fields that may
be <a href="#Address_operators">addressed</a> individually. Each such element
acts like a variable.
</p>

<p>
657
The <i>static type</i> (or just <i>type</i>) of a variable is the
Robert Griesemer's avatar
Robert Griesemer committed
658 659 660 661 662 663 664 665 666
type given in its declaration, the type provided in the
<code>new</code> call or composite literal, or the type of
an element of a structured variable.
Variables of interface type also have a distinct <i>dynamic type</i>,
which is the concrete type of the value assigned to the variable at run time
(unless the value is the predeclared identifier <code>nil</code>,
which has no type).
The dynamic type may vary during execution but values stored in interface
variables are always <a href="#Assignability">assignable</a>
667 668
to the static type of the variable.
</p>
Robert Griesemer's avatar
Robert Griesemer committed
669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685

<pre>
var x interface{}  // x is nil and has static type interface{}
var v *T           // v has value nil, static type *T
x = 42             // x has value 42 and dynamic type int
x = v              // x has value (*T)(nil) and dynamic type *T
</pre>

<p>
A variable's value is retrieved by referring to the variable in an
<a href="#Expressions">expression</a>; it is the most recent value
<a href="#Assignments">assigned</a> to the variable.
If a variable has not yet been assigned a value, its value is the
<a href="#The_zero_value">zero value</a> for its type.
</p>


686
<h2 id="Types">Types</h2>
687

688
<p>
689 690 691
A type determines a set of values together with operations and methods specific
to those values. A type may be denoted by a <i>type name</i>, if it has one,
or specified using a <i>type literal</i>, which composes a type from existing types.
Rob Pike's avatar
Rob Pike committed
692
</p>
693

694
<pre class="ebnf">
Rob Pike's avatar
Rob Pike committed
695
Type      = TypeName | TypeLit | "(" Type ")" .
696
TypeName  = identifier | QualifiedIdent .
Rob Pike's avatar
Rob Pike committed
697 698
TypeLit   = ArrayType | StructType | PointerType | FunctionType | InterfaceType |
	    SliceType | MapType | ChannelType .
699
</pre>
700

701
<p>
702 703
Named instances of the boolean, numeric, and string types are
<a href="#Predeclared_identifiers">predeclared</a>.
704
Other named types are introduced with <a href="#Type_declarations">type declarations</a>.
705 706 707
<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
708
</p>
709

710 711
<p>
Each type <code>T</code> has an <i>underlying type</i>: If <code>T</code>
712 713
is one of the predeclared boolean, numeric, or string types, or a type literal,
the corresponding underlying
714 715 716 717 718 719
type is <code>T</code> itself. Otherwise, <code>T</code>'s underlying type
is the underlying type of the type to which <code>T</code> refers in its
<a href="#Type_declarations">type declaration</a>.
</p>

<pre>
720 721 722 723 724 725 726 727 728 729 730
type (
	A1 = string
	A2 = A1
)

type (
	B1 string
	B2 B1
	B3 []B1
	B4 B3
)
731 732 733
</pre>

<p>
734 735 736
The underlying type of <code>string</code>, <code>A1</code>, <code>A2</code>, <code>B1</code>,
and <code>B2</code> is <code>string</code>.
The underlying type of <code>[]B1</code>, <code>B3</code>, and <code>B4</code> is <code>[]B1</code>.
737 738
</p>

739
<h3 id="Method_sets">Method sets</h3>
Rob Pike's avatar
Rob Pike committed
740
<p>
741
A type may have a <i>method set</i> associated with it.
742
The method set of an <a href="#Interface_types">interface type</a> is its interface.
743 744 745 746
The method set of any other type <code>T</code> consists of all
<a href="#Method_declarations">methods</a> declared with receiver type <code>T</code>.
The method set of the corresponding <a href="#Pointer_types">pointer type</a> <code>*T</code>
is the set of all methods declared with receiver <code>*T</code> or <code>T</code>
Robert Griesemer's avatar
Robert Griesemer committed
747
(that is, it also contains the method set of <code>T</code>).
748
Further rules apply to structs containing embedded fields, as described
749
in the section on <a href="#Struct_types">struct types</a>.
Robert Griesemer's avatar
Robert Griesemer committed
750
Any other type has an empty method set.
751
In a method set, each method must have a
752 753
<a href="#Uniqueness_of_identifiers">unique</a>
non-<a href="#Blank_identifier">blank</a> <a href="#MethodName">method name</a>.
Rob Pike's avatar
Rob Pike committed
754
</p>
Robert Griesemer's avatar
Robert Griesemer committed
755

756 757 758 759 760 761
<p>
The method set of a type determines the interfaces that the
type <a href="#Interface_types">implements</a>
and the methods that can be <a href="#Calls">called</a>
using a receiver of that type.
</p>
762

763 764
<h3 id="Boolean_types">Boolean types</h3>

765
<p>
766 767 768
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>.
769
</p>
770

771
<h3 id="Numeric_types">Numeric types</h3>
772

Rob Pike's avatar
Rob Pike committed
773
<p>
774 775
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
776
</p>
777

Rob Pike's avatar
Rob Pike committed
778
<pre class="grammar">
Rob Pike's avatar
Rob Pike committed
779 780 781 782 783 784 785 786 787
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)
788

Rob Pike's avatar
Rob Pike committed
789 790
float32     the set of all IEEE-754 32-bit floating-point numbers
float64     the set of all IEEE-754 64-bit floating-point numbers
791

Rob Pike's avatar
Rob Pike committed
792 793
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
794

795
byte        alias for uint8
796
rune        alias for int32
797
</pre>
798

Rob Pike's avatar
Rob Pike committed
799
<p>
Robert Griesemer's avatar
Robert Griesemer committed
800 801
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
802
</p>
803

Rob Pike's avatar
Rob Pike committed
804
<p>
805
There is also a set of predeclared numeric types with implementation-specific sizes:
Rob Pike's avatar
Rob Pike committed
806
</p>
807

808
<pre class="grammar">
809
uint     either 32 or 64 bits
810
int      same size as uint
811
uintptr  an unsigned integer large enough to store the uninterpreted bits of a pointer value
812
</pre>
813

814
<p>
815
To avoid portability issues all numeric types are distinct except
816
<code>byte</code>, which is an alias for <code>uint8</code>, and
817
<code>rune</code>, which is an alias for <code>int32</code>.
818
Conversions
819
are required when different numeric types are mixed in an expression
Rob Pike's avatar
Rob Pike committed
820
or assignment. For instance, <code>int32</code> and <code>int</code>
821
are not the same type even though they may have the same size on a
Rob Pike's avatar
Rob Pike committed
822
particular architecture.
823

824

825
<h3 id="String_types">String types</h3>
826

827
<p>
828
A <i>string type</i> represents the set of string values.
829 830
A string value is a (possibly empty) sequence of bytes.
Strings are immutable: once created,
Rob Pike's avatar
Rob Pike committed
831
it is impossible to change the contents of a string.
832
The predeclared string type is <code>string</code>.
833
</p>
Rob Pike's avatar
Rob Pike committed
834 835

<p>
836 837 838
The length of a string <code>s</code> (its size in bytes) can be discovered using
the built-in function <a href="#Length_and_capacity"><code>len</code></a>.
The length is a compile-time constant if the string is a constant.
839 840
A string's bytes can be accessed by integer <a href="#Index_expressions">indices</a>
0 through <code>len(s)-1</code>.
841 842 843
It is illegal to take the address of such an element; if
<code>s[i]</code> is the <code>i</code>'th byte of a
string, <code>&amp;s[i]</code> is invalid.
Rob Pike's avatar
Rob Pike committed
844
</p>
845 846


847
<h3 id="Array_types">Array types</h3>
Russ Cox's avatar
Russ Cox committed
848 849 850

<p>
An array is a numbered sequence of elements of a single
851 852
type, called the element type.
The number of elements is called the length and is never
Russ Cox's avatar
Russ Cox committed
853 854 855
negative.
</p>

856
<pre class="ebnf">
Russ Cox's avatar
Russ Cox committed
857 858
ArrayType   = "[" ArrayLength "]" ElementType .
ArrayLength = Expression .
859
ElementType = Type .
Russ Cox's avatar
Russ Cox committed
860 861 862
</pre>

<p>
863 864
The length is part of the array's type; it must evaluate to a
non-negative <a href="#Constants">constant</a> representable by a value
865 866
of type <code>int</code>.
The length of array <code>a</code> can be discovered
867
using the built-in function <a href="#Length_and_capacity"><code>len</code></a>.
868
The elements can be addressed by integer <a href="#Index_expressions">indices</a>
869
0 through <code>len(a)-1</code>.
870 871
Array types are always one-dimensional but may be composed to form
multi-dimensional types.
Russ Cox's avatar
Russ Cox committed
872 873 874 875 876 877
</p>

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

882
<h3 id="Slice_types">Slice types</h3>
Russ Cox's avatar
Russ Cox committed
883 884

<p>
885
A slice is a descriptor for a contiguous segment of an <i>underlying array</i> and
886 887
provides access to a numbered sequence of elements from that array.
A slice type denotes the set of all slices of arrays of its element type.
888
The value of an uninitialized slice is <code>nil</code>.
Russ Cox's avatar
Russ Cox committed
889 890
</p>

891
<pre class="ebnf">
Russ Cox's avatar
Russ Cox committed
892 893 894 895 896 897
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
898
<a href="#Length_and_capacity"><code>len</code></a>; unlike with arrays it may change during
899 900
execution.  The elements can be addressed by integer <a href="#Index_expressions">indices</a>
0 through <code>len(s)-1</code>.  The slice index of a
Russ Cox's avatar
Russ Cox committed
901 902 903 904 905
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
906
array that holds its elements.  A slice therefore shares storage
Russ Cox's avatar
Russ Cox committed
907 908 909 910 911
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.
912
The <i>capacity</i> is a measure of that extent: it is the sum of
Russ Cox's avatar
Russ Cox committed
913
the length of the slice and the length of the array beyond the slice;
914
a slice of length up to that capacity can be created by
Robert Griesemer's avatar
Robert Griesemer committed
915
<a href="#Slice_expressions"><i>slicing</i></a> a new one from the original slice.
Russ Cox's avatar
Russ Cox committed
916
The capacity of a slice <code>a</code> can be discovered using the
917
built-in function <a href="#Length_and_capacity"><code>cap(a)</code></a>.
Russ Cox's avatar
Russ Cox committed
918 919 920
</p>

<p>
921 922 923 924
A new, initialized slice value for a given element type <code>T</code> is
made using the built-in function
<a href="#Making_slices_maps_and_channels"><code>make</code></a>,
which takes a slice type
925 926 927
and parameters specifying the length and optionally the capacity.
A slice created with <code>make</code> always allocates a new, hidden array
to which the returned slice value refers. That is, executing
Russ Cox's avatar
Russ Cox committed
928 929 930 931 932
</p>

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

Russ Cox's avatar
Russ Cox committed
934
<p>
935 936
produces the same slice as allocating an array and <a href="#Slice_expressions">slicing</a>
it, so these two expressions are equivalent:
Russ Cox's avatar
Russ Cox committed
937 938 939 940 941 942 943
</p>

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

944 945 946 947
<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;
948 949
however with slices of slices (or arrays of slices), the inner lengths may vary dynamically.
Moreover, the inner slices must be initialized individually.
950
</p>
Russ Cox's avatar
Russ Cox committed
951

952
<h3 id="Struct_types">Struct types</h3>
953

Rob Pike's avatar
Rob Pike committed
954
<p>
955 956
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
957
implicitly (EmbeddedField).
958
Within a struct, non-<a href="#Blank_identifier">blank</a> field names must
959
be <a href="#Uniqueness_of_identifiers">unique</a>.
Rob Pike's avatar
Rob Pike committed
960
</p>
961

962
<pre class="ebnf">
963 964 965 966
StructType    = "struct" "{" { FieldDecl ";" } "}" .
FieldDecl     = (IdentifierList Type | EmbeddedField) [ Tag ] .
EmbeddedField = [ "*" ] TypeName .
Tag           = string_lit .
967
</pre>
968

969
<pre>
970 971
// An empty struct.
struct {}
972

Robert Griesemer's avatar
Robert Griesemer committed
973
// A struct with 6 fields.
974
struct {
975
	x, y int
976 977
	u float32
	_ float32  // padding
978 979
	A *[]int
	F func()
980 981
}
</pre>
982

Rob Pike's avatar
Rob Pike committed
983
<p>
984 985
A field declared with a type but no explicit field name is called an <i>embedded field</i>.
An embedded field must be specified as
986
a type name <code>T</code> or as a pointer to a non-interface type name <code>*T</code>,
987
and <code>T</code> itself may not be
988
a pointer type. The unqualified type name acts as the field name.
Rob Pike's avatar
Rob Pike committed
989
</p>
990

991
<pre>
992
// A struct with four embedded fields of types T1, *T2, P.T3 and *P.T4
993
struct {
994 995 996 997 998
	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
999
}
1000 1001
</pre>

Rob Pike's avatar
Rob Pike committed
1002
<p>
1003 1004
The following declaration is illegal because field names must be unique
in a struct type:
Rob Pike's avatar
Rob Pike committed
1005
</p>
1006

1007
<pre>
1008
struct {
1009 1010 1011
	T     // conflicts with embedded field *T and *P.T
	*T    // conflicts with embedded field T and *P.T
	*P.T  // conflicts with embedded field T and *T
1012
}
1013
</pre>
1014

1015
<p>
1016
A field or <a href="#Method_declarations">method</a> <code>f</code> of an
1017
embedded field in a struct <code>x</code> is called <i>promoted</i> if
1018 1019
<code>x.f</code> is a legal <a href="#Selectors">selector</a> that denotes
that field or method <code>f</code>.
Rob Pike's avatar
Rob Pike committed
1020
</p>
Robert Griesemer's avatar
Robert Griesemer committed
1021

1022 1023 1024 1025 1026
<p>
Promoted fields act like ordinary fields
of a struct except that they cannot be used as field names in
<a href="#Composite_literals">composite literals</a> of the struct.
</p>
Robert Griesemer's avatar
Robert Griesemer committed
1027

1028 1029 1030 1031 1032 1033
<p>
Given a struct type <code>S</code> and a type named <code>T</code>,
promoted methods are included in the method set of the struct as follows:
</p>
<ul>
	<li>
1034
	If <code>S</code> contains an embedded field <code>T</code>,
1035 1036 1037 1038 1039
	the <a href="#Method_sets">method sets</a> of <code>S</code>
	and <code>*S</code> both include promoted methods with receiver
	<code>T</code>. The method set of <code>*S</code> also
	includes promoted methods with receiver <code>*T</code>.
	</li>
1040

1041
	<li>
1042
	If <code>S</code> contains an embedded field <code>*T</code>,
1043 1044 1045
	the method sets of <code>S</code> and <code>*S</code> both
	include promoted methods with receiver <code>T</code> or
	<code>*T</code>.
Robert Griesemer's avatar
Robert Griesemer committed
1046 1047
	</li>
</ul>
1048

Rob Pike's avatar
Rob Pike committed
1049
<p>
Robert Griesemer's avatar
Robert Griesemer committed
1050
A field declaration may be followed by an optional string literal <i>tag</i>,
1051
which becomes an attribute for all the fields in the corresponding
1052 1053
field declaration. An empty tag string is equivalent to an absent tag.
The tags are made visible through a <a href="/pkg/reflect/#StructTag">reflection interface</a>
1054
and take part in <a href="#Type_identity">type identity</a> for structs
Rob Pike's avatar
Rob Pike committed
1055 1056
but are otherwise ignored.
</p>
1057

1058
<pre>
1059
struct {
1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070
	x, y float64 ""  // an empty tag string is like an absent tag
	name string  "any string is permitted as a tag"
	_    [4]byte "ceci n'est pas un champ de structure"
}

// A struct corresponding to a TimeStamp protocol buffer.
// The tag strings define the protocol buffer field numbers;
// they follow the convention outlined by the reflect package.
struct {
	microsec  uint64 `protobuf:"1"`
	serverIP6 uint64 `protobuf:"2"`
1071
}
1072
</pre>
1073

1074
<h3 id="Pointer_types">Pointer types</h3>
1075

Rob Pike's avatar
Rob Pike committed
1076
<p>
Robert Griesemer's avatar
Robert Griesemer committed
1077
A pointer type denotes the set of all pointers to <a href="#Variables">variables</a> of a given
1078
type, called the <i>base type</i> of the pointer.
Peter Mundy's avatar
Peter Mundy committed
1079
The value of an uninitialized pointer is <code>nil</code>.
Rob Pike's avatar
Rob Pike committed
1080
</p>
1081

1082
<pre class="ebnf">
1083
PointerType = "*" BaseType .
1084
BaseType    = Type .
1085
</pre>
1086

1087
<pre>
Robert Griesemer's avatar
Robert Griesemer committed
1088 1089
*Point
*[4]int
1090
</pre>
1091

1092
<h3 id="Function_types">Function types</h3>
1093

Rob Pike's avatar
Rob Pike committed
1094
<p>
1095
A function type denotes the set of all functions with the same parameter
Peter Mundy's avatar
Peter Mundy committed
1096
and result types. The value of an uninitialized variable of function type
1097
is <code>nil</code>.
Rob Pike's avatar
Rob Pike committed
1098
</p>
1099

1100
<pre class="ebnf">
Rob Pike's avatar
Rob Pike committed
1101 1102
FunctionType   = "func" Signature .
Signature      = Parameters [ Result ] .
1103
Result         = Parameters | Type .
1104
Parameters     = "(" [ ParameterList [ "," ] ] ")" .
Rob Pike's avatar
Rob Pike committed
1105
ParameterList  = ParameterDecl { "," ParameterDecl } .
Russ Cox's avatar
Russ Cox committed
1106
ParameterDecl  = [ IdentifierList ] [ "..." ] Type .
1107 1108 1109
</pre>

<p>
Rob Pike's avatar
Rob Pike committed
1110 1111
Within a list of parameters or results, the names (IdentifierList)
must either all be present or all be absent. If present, each name
1112 1113 1114 1115 1116
stands for one item (parameter or result) of the specified type and
all non-<a href="#Blank_identifier">blank</a> names in the signature
must be <a href="#Uniqueness_of_identifiers">unique</a>.
If absent, each type stands for one item of that type.
Parameter and result
Rob Pike's avatar
Rob Pike committed
1117
lists are always parenthesized except that if there is exactly
Robert Griesemer's avatar
Robert Griesemer committed
1118
one unnamed result it may be written as an unparenthesized type.
Rob Pike's avatar
Rob Pike committed
1119
</p>
Russ Cox's avatar
Russ Cox committed
1120

Robert Griesemer's avatar
Robert Griesemer committed
1121
<p>
1122
The final incoming parameter in a function signature may have
Robert Griesemer's avatar
Robert Griesemer committed
1123 1124 1125
a type prefixed with <code>...</code>.
A function with such a parameter is called <i>variadic</i> and
may be invoked with zero or more arguments for that parameter.
Rob Pike's avatar
Rob Pike committed
1126
</p>
1127 1128

<pre>
Russ Cox's avatar
Russ Cox committed
1129
func()
Robert Griesemer's avatar
Robert Griesemer committed
1130 1131
func(x int) int
func(a, _ int, z float32) bool
1132
func(a, b int, z float32) (bool)
Robert Griesemer's avatar
Robert Griesemer committed
1133
func(prefix string, values ...int)
1134 1135
func(a, b int, z float64, opt ...interface{}) (success bool)
func(int, int, float64) (float64, *[]int)
Russ Cox's avatar
Russ Cox committed
1136
func(n int) func(p *T)
1137 1138 1139
</pre>


1140
<h3 id="Interface_types">Interface types</h3>
1141

Rob Pike's avatar
Rob Pike committed
1142
<p>
1143
An interface type specifies a <a href="#Method_sets">method set</a> called its <i>interface</i>.
Robert Griesemer's avatar
Robert Griesemer committed
1144 1145
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
1146
<i>implement the interface</i>.
Peter Mundy's avatar
Peter Mundy committed
1147
The value of an uninitialized variable of interface type is <code>nil</code>.
Rob Pike's avatar
Rob Pike committed
1148
</p>
1149

1150
<pre class="ebnf">
1151
InterfaceType      = "interface" "{" { MethodSpec ";" } "}" .
1152 1153
MethodSpec         = MethodName Signature | InterfaceTypeName .
MethodName         = identifier .
Rob Pike's avatar
Rob Pike committed
1154
InterfaceTypeName  = TypeName .
1155
</pre>
1156

1157
<p>
1158
As with all method sets, in an interface type, each method must have a
1159 1160
<a href="#Uniqueness_of_identifiers">unique</a>
non-<a href="#Blank_identifier">blank</a> name.
1161 1162
</p>

1163
<pre>
Rob Pike's avatar
Rob Pike committed
1164
// A simple File interface
1165
interface {
1166 1167 1168
	Read(b Buffer) bool
	Write(b Buffer) bool
	Close()
1169 1170
}
</pre>
1171

Rob Pike's avatar
Rob Pike committed
1172
<p>
Robert Griesemer's avatar
Robert Griesemer committed
1173
More than one type may implement an interface.
Rob Pike's avatar
Rob Pike committed
1174
For instance, if two types <code>S1</code> and <code>S2</code>
Robert Griesemer's avatar
Robert Griesemer committed
1175
have the method set
Rob Pike's avatar
Rob Pike committed
1176
</p>
1177

1178
<pre>
1179 1180 1181
func (p T) Read(b Buffer) bool { return … }
func (p T) Write(b Buffer) bool { return … }
func (p T) Close() { … }
1182
</pre>
1183

Rob Pike's avatar
Rob Pike committed
1184 1185 1186 1187 1188 1189
<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>
1190

Rob Pike's avatar
Rob Pike committed
1191 1192 1193 1194 1195
<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>
1196

1197
<pre>
1198
interface{}
1199
</pre>
1200

Rob Pike's avatar
Rob Pike committed
1201 1202
<p>
Similarly, consider this interface specification,
Robert Griesemer's avatar
Robert Griesemer committed
1203
which appears within a <a href="#Type_declarations">type declaration</a>
1204
to define an interface called <code>Locker</code>:
Rob Pike's avatar
Rob Pike committed
1205
</p>
1206 1207

<pre>
1208
type Locker interface {
1209 1210
	Lock()
	Unlock()
1211
}
1212
</pre>
1213

Rob Pike's avatar
Rob Pike committed
1214 1215 1216
<p>
If <code>S1</code> and <code>S2</code> also implement
</p>
Robert Griesemer's avatar
Robert Griesemer committed
1217

1218
<pre>
1219 1220
func (p T) Lock() { … }
func (p T) Unlock() { … }
1221 1222
</pre>

1223
<p>
1224
they implement the <code>Locker</code> interface as well
Rob Pike's avatar
Rob Pike committed
1225 1226
as the <code>File</code> interface.
</p>
1227

Rob Pike's avatar
Rob Pike committed
1228
<p>
1229 1230 1231 1232 1233
An interface <code>T</code> may use a (possibly qualified) interface type
name <code>E</code> in place of a method specification. This is called
<i>embedding</i> interface <code>E</code> in <code>T</code>; it adds
all (exported and non-exported) methods of <code>E</code> to the interface
<code>T</code>.
Rob Pike's avatar
Rob Pike committed
1234
</p>
1235

1236
<pre>
1237
type ReadWriter interface {
1238 1239
	Read(b Buffer) bool
	Write(b Buffer) bool
1240
}
1241

1242
type File interface {
1243 1244
	ReadWriter  // same as adding the methods of ReadWriter
	Locker      // same as adding the methods of Locker
1245
	Close()
1246
}
1247 1248 1249 1250 1251 1252

type LockedFile interface {
	Locker
	File        // illegal: Lock, Unlock not unique
	Lock()      // illegal: Lock not unique
}
1253
</pre>
1254

1255
<p>
Russ Cox's avatar
Russ Cox committed
1256 1257
An interface type <code>T</code> may not embed itself
or any interface type that embeds <code>T</code>, recursively.
1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274
</p>

<pre>
// illegal: Bad cannot embed itself
type Bad interface {
	Bad
}

// illegal: Bad1 cannot embed itself using Bad2
type Bad1 interface {
	Bad2
}
type Bad2 interface {
	Bad1
}
</pre>

1275
<h3 id="Map_types">Map types</h3>
1276

Rob Pike's avatar
Rob Pike committed
1277 1278
<p>
A map is an unordered group of elements of one type, called the
1279
element type, indexed by a set of unique <i>keys</i> of another type,
1280
called the key type.
1281
The value of an uninitialized map is <code>nil</code>.
Rob Pike's avatar
Rob Pike committed
1282
</p>
1283

1284
<pre class="ebnf">
1285
MapType     = "map" "[" KeyType "]" ElementType .
1286
KeyType     = Type .
1287
</pre>
1288

1289
<p>
1290 1291
The <a href="#Comparison_operators">comparison operators</a>
<code>==</code> and <code>!=</code> must be fully defined
1292 1293
for operands of the key type; thus the key type must not be a function, map, or
slice.
1294
If the key type is an interface type, these
Rob Pike's avatar
Rob Pike committed
1295
comparison operators must be defined for the dynamic key values;
Rob Pike's avatar
Rob Pike committed
1296
failure will cause a <a href="#Run_time_panics">run-time panic</a>.
Rob Pike's avatar
Rob Pike committed
1297 1298

</p>
1299

1300
<pre>
1301 1302 1303
map[string]int
map[*T]struct{ x, y float64 }
map[string]interface{}
1304
</pre>
1305

Rob Pike's avatar
Rob Pike committed
1306
<p>
1307 1308
The number of map elements is called its length.
For a map <code>m</code>, it can be discovered using the
1309
built-in function <a href="#Length_and_capacity"><code>len</code></a>
1310 1311
and may change during execution. Elements may be added during execution
using <a href="#Assignments">assignments</a> and retrieved with
1312
<a href="#Index_expressions">index expressions</a>; they may be removed with the
1313
<a href="#Deletion_of_map_elements"><code>delete</code></a> built-in function.
Rob Pike's avatar
Rob Pike committed
1314 1315 1316
</p>
<p>
A new, empty map value is made using the built-in
1317 1318
function <a href="#Making_slices_maps_and_channels"><code>make</code></a>,
which takes the map type and an optional capacity hint as arguments:
Rob Pike's avatar
Rob Pike committed
1319
</p>
1320

1321
<pre>
1322 1323
make(map[string]int)
make(map[string]int, 100)
1324
</pre>
1325

1326 1327 1328
<p>
The initial capacity does not bound its size:
maps grow to accommodate the number of items
1329 1330 1331
stored in them, with the exception of <code>nil</code> maps.
A <code>nil</code> map is equivalent to an empty map except that no elements
may be added.
1332

1333
<h3 id="Channel_types">Channel types</h3>
1334

Rob Pike's avatar
Rob Pike committed
1335
<p>
1336 1337 1338 1339 1340 1341
A channel provides a mechanism for
<a href="#Go_statements">concurrently executing functions</a>
to communicate by
<a href="#Send_statements">sending</a> and
<a href="#Receive_operator">receiving</a>
values of a specified element type.
1342
The value of an uninitialized channel is <code>nil</code>.
Rob Pike's avatar
Rob Pike committed
1343
</p>
1344

1345
<pre class="ebnf">
1346
ChannelType = ( "chan" | "chan" "&lt;-" | "&lt;-" "chan" ) ElementType .
1347
</pre>
1348

1349
<p>
1350
The optional <code>&lt;-</code> operator specifies the channel <i>direction</i>,
1351
<i>send</i> or <i>receive</i>. If no direction is given, the channel is
1352
<i>bidirectional</i>.
1353 1354
A channel may be constrained only to send or only to receive by
<a href="#Conversions">conversion</a> or <a href="#Assignments">assignment</a>.
1355 1356 1357
</p>

<pre>
1358 1359 1360
chan T          // can be used to send and receive values of type T
chan&lt;- float64  // can only be used to send float64s
&lt;-chan int      // can only be used to receive ints
1361 1362
</pre>

Rob Pike's avatar
Rob Pike committed
1363
<p>
1364 1365
The <code>&lt;-</code> operator associates with the leftmost <code>chan</code>
possible:
Rob Pike's avatar
Rob Pike committed
1366
</p>
1367

1368
<pre>
1369 1370 1371
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)
1372
chan (&lt;-chan int)
1373
</pre>
1374

Rob Pike's avatar
Rob Pike committed
1375
<p>
1376
A new, initialized channel
1377 1378
value can be made using the built-in function
<a href="#Making_slices_maps_and_channels"><code>make</code></a>,
1379
which takes the channel type and an optional <i>capacity</i> as arguments:
Rob Pike's avatar
Rob Pike committed
1380
</p>
1381

1382
<pre>
1383
make(chan int, 100)
1384
</pre>
1385

Rob Pike's avatar
Rob Pike committed
1386
<p>
1387 1388
The capacity, in number of elements, sets the size of the buffer in the channel.
If the capacity is zero or absent, the channel is unbuffered and communication
1389 1390
succeeds only when both a sender and receiver are ready. Otherwise, the channel
is buffered and communication succeeds without blocking if the buffer
1391
is not full (sends) or not empty (receives).
1392
A <code>nil</code> channel is never ready for communication.
Rob Pike's avatar
Rob Pike committed
1393
</p>
1394

1395
<p>
1396
A channel may be closed with the built-in function
1397 1398
<a href="#Close"><code>close</code></a>.
The multi-valued assignment form of the
1399
<a href="#Receive_operator">receive operator</a>
1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415
reports whether a received value was sent before
the channel was closed.
</p>

<p>
A single channel may be used in
<a href="#Send_statements">send statements</a>,
<a href="#Receive_operator">receive operations</a>,
and calls to the built-in functions
<a href="#Length_and_capacity"><code>cap</code></a> and
<a href="#Length_and_capacity"><code>len</code></a>
by any number of goroutines without further synchronization.
Channels act as first-in-first-out queues.
For example, if one goroutine sends values on a channel
and a second goroutine receives them, the values are
received in the order sent.
1416 1417
</p>

1418
<h2 id="Properties_of_types_and_values">Properties of types and values</h2>
1419

1420 1421
<h3 id="Type_identity">Type identity</h3>

1422
<p>
1423
Two types are either <i>identical</i> or <i>different</i>.
1424
</p>
1425

1426
<p>
1427 1428 1429 1430
A <a href="#Type_definitions">defined type</a> is always different from any other type.
Otherwise, two types are identical if their <a href="#Types">underlying</a> type literals are
structurally equivalent; that is, they have the same literal structure and corresponding
components have identical types. In detail:
1431
</p>
Rob Pike's avatar
Rob Pike committed
1432

1433
<ul>
1434 1435
	<li>Two array types are identical if they have identical element types and
	    the same array length.</li>
1436

1437
	<li>Two slice types are identical if they have identical element types.</li>
1438

1439
	<li>Two struct types are identical if they have the same sequence of fields,
1440 1441
	    and if corresponding fields have the same names, and identical types,
	    and identical tags.
1442 1443
	    <a href="#Exported_identifiers">Non-exported</a> field names from different
	    packages are always different.</li>
1444

1445
	<li>Two pointer types are identical if they have identical base types.</li>
1446

1447
	<li>Two function types are identical if they have the same number of parameters
Russ Cox's avatar
Russ Cox committed
1448 1449
	    and result values, corresponding parameter and result types are
	    identical, and either both functions are variadic or neither is.
1450
	    Parameter and result names are not required to match.</li>
1451

1452
	<li>Two interface types are identical if they have the same set of methods
1453 1454 1455
	    with the same names and identical function types.
	    <a href="#Exported_identifiers">Non-exported</a> method names from different
	    packages are always different. The order of the methods is irrelevant.</li>
1456

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

1459 1460
	<li>Two channel types are identical if they have identical value types and
	    the same direction.</li>
1461 1462 1463
</ul>

<p>
Rob Pike's avatar
Rob Pike committed
1464 1465
Given the declarations
</p>
1466 1467 1468

<pre>
type (
1469 1470 1471 1472 1473 1474
	A0 = []string
	A1 = A0
	A2 = struct{ a, b int }
	A3 = int
	A4 = func(A3, float64) *A0
	A5 = func(x int, _ float64) *[]string
1475
)
1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486

type (
	B0 A0
	B1 []string
	B2 struct{ a, b int }
	B3 struct{ a, c int }
	B4 func(int, float64) *B0
	B5 func(x int, y float64) *A1
)

type	C0 = B0
1487
</pre>
1488

Rob Pike's avatar
Rob Pike committed
1489
<p>
1490
these types are identical:
Rob Pike's avatar
Rob Pike committed
1491
</p>
1492

1493
<pre>
1494 1495 1496 1497 1498 1499
A0, A1, and []string
A2 and struct{ a, b int }
A3 and int
A4, func(int, float64) *[]string, and A5

B0, B0, and C0
1500
[]int and []int
1501
struct{ a, b *T5 } and struct{ a, b *T5 }
1502
func(x int, y float64) *[]string, func(int, float64) (result *[]string), and A5
1503
</pre>
1504

Rob Pike's avatar
Rob Pike committed
1505
<p>
1506 1507 1508 1509
<code>B0</code> and <code>B1</code> are different because they are new types
created by distinct <a href="#Type_definitions">type definitions</a>;
<code>func(int, float64) *B0</code> and <code>func(x int, y float64) *[]string</code>
are different because <code>B0</code> is different from <code>[]string</code>.
Rob Pike's avatar
Rob Pike committed
1510
</p>
1511 1512


1513
<h3 id="Assignability">Assignability</h3>
Rob Pike's avatar
Rob Pike committed
1514 1515

<p>
Robert Griesemer's avatar
Robert Griesemer committed
1516
A value <code>x</code> is <i>assignable</i> to a <a href="#Variables">variable</a> of type <code>T</code>
1517
("<code>x</code> is assignable to <code>T</code>") in any of these cases:
Rob Pike's avatar
Rob Pike committed
1518
</p>
1519

Rob Pike's avatar
Rob Pike committed
1520 1521
<ul>
<li>
1522 1523 1524
<code>x</code>'s type is identical to <code>T</code>.
</li>
<li>
Rob Pike's avatar
Rob Pike committed
1525 1526
<code>x</code>'s type <code>V</code> and <code>T</code> have identical
<a href="#Types">underlying types</a> and at least one of <code>V</code>
1527
or <code>T</code> is not a <a href="#Type_definitions">defined</a> type.
Robert Griesemer's avatar
Robert Griesemer committed
1528 1529
</li>
<li>
1530
<code>T</code> is an interface type and
1531 1532 1533 1534 1535
<code>x</code> <a href="#Interface_types">implements</a> <code>T</code>.
</li>
<li>
<code>x</code> is a bidirectional channel value, <code>T</code> is a channel type,
<code>x</code>'s type <code>V</code> and <code>T</code> have identical element types,
1536
and at least one of <code>V</code> or <code>T</code> is not a defined type.
Rob Pike's avatar
Rob Pike committed
1537 1538
</li>
<li>
1539 1540 1541 1542 1543 1544
<code>x</code> is the predeclared identifier <code>nil</code> and <code>T</code>
is a pointer, function, slice, map, channel, or interface type.
</li>
<li>
<code>x</code> is an untyped <a href="#Constants">constant</a> representable
by a value of type <code>T</code>.
Robert Griesemer's avatar
Robert Griesemer committed
1545
</li>
Rob Pike's avatar
Rob Pike committed
1546 1547
</ul>

1548

1549
<h2 id="Blocks">Blocks</h2>
Robert Griesemer's avatar
Robert Griesemer committed
1550 1551

<p>
1552 1553
A <i>block</i> is a possibly empty sequence of declarations and statements
within matching brace brackets.
Robert Griesemer's avatar
Robert Griesemer committed
1554 1555 1556
</p>

<pre class="ebnf">
1557 1558
Block = "{" StatementList "}" .
StatementList = { Statement ";" } .
Robert Griesemer's avatar
Robert Griesemer committed
1559 1560 1561 1562 1563 1564 1565 1566 1567
</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
1568
	<li>Each <a href="#Packages">package</a> has a <i>package block</i> containing all
Robert Griesemer's avatar
Robert Griesemer committed
1569 1570 1571 1572 1573
	    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>

1574 1575 1576
	<li>Each <a href="#If_statements">"if"</a>,
	    <a href="#For_statements">"for"</a>, and
	    <a href="#Switch_statements">"switch"</a>
Robert Griesemer's avatar
Robert Griesemer committed
1577 1578
	    statement is considered to be in its own implicit block.</li>

1579 1580
	<li>Each clause in a <a href="#Switch_statements">"switch"</a>
	    or <a href="#Select_statements">"select"</a> statement
Robert Griesemer's avatar
Robert Griesemer committed
1581 1582 1583 1584
	    acts as an implicit block.</li>
</ol>

<p>
Robert Griesemer's avatar
Robert Griesemer committed
1585
Blocks nest and influence <a href="#Declarations_and_scope">scoping</a>.
Robert Griesemer's avatar
Robert Griesemer committed
1586 1587 1588
</p>


1589
<h2 id="Declarations_and_scope">Declarations and scope</h2>
1590 1591

<p>
1592 1593 1594 1595 1596 1597 1598
A <i>declaration</i> binds a non-<a href="#Blank_identifier">blank</a> identifier to a
<a href="#Constant_declarations">constant</a>,
<a href="#Type_declarations">type</a>,
<a href="#Variable_declarations">variable</a>,
<a href="#Function_declarations">function</a>,
<a href="#Labeled_statements">label</a>, or
<a href="#Import_declarations">package</a>.
1599
Every identifier in a program must be declared.
Robert Griesemer's avatar
Robert Griesemer committed
1600 1601
No identifier may be declared twice in the same block, and
no identifier may be declared in both the file and package block.
1602
</p>
1603

1604 1605 1606
<p>
The <a href="#Blank_identifier">blank identifier</a> may be used like any other identifier
in a declaration, but it does not introduce a binding and thus is not declared.
1607 1608 1609
In the package block, the identifier <code>init</code> may only be used for
<a href="#Package_initialization"><code>init</code> function</a> declarations,
and like the blank identifier it does not introduce a new binding.
1610 1611
</p>

1612
<pre class="ebnf">
Robert Griesemer's avatar
Robert Griesemer committed
1613 1614
Declaration   = ConstDecl | TypeDecl | VarDecl .
TopLevelDecl  = Declaration | FunctionDecl | MethodDecl .
1615
</pre>
1616

1617
<p>
Robert Griesemer's avatar
Robert Griesemer committed
1618
The <i>scope</i> of a declared identifier is the extent of source text in which
1619
the identifier denotes the specified constant, type, variable, function, label, or package.
1620
</p>
Robert Griesemer's avatar
Robert Griesemer committed
1621

1622
<p>
1623
Go is lexically scoped using <a href="#Blocks">blocks</a>:
1624
</p>
Robert Griesemer's avatar
Robert Griesemer committed
1625

1626
<ol>
1627
	<li>The scope of a <a href="#Predeclared_identifiers">predeclared identifier</a> is the universe block.</li>
Robert Griesemer's avatar
Robert Griesemer committed
1628 1629

	<li>The scope of an identifier denoting a constant, type, variable,
1630 1631
	    or function (but not method) declared at top level (outside any
	    function) is the package block.</li>
Robert Griesemer's avatar
Robert Griesemer committed
1632

1633
	<li>The scope of the package name of an imported package is the file block
Robert Griesemer's avatar
Robert Griesemer committed
1634 1635
	    of the file containing the import declaration.</li>

1636 1637
	<li>The scope of an identifier denoting a method receiver, function parameter,
	    or result variable is the function body.</li>
Robert Griesemer's avatar
Robert Griesemer committed
1638 1639 1640

	<li>The scope of a constant or variable identifier declared
	    inside a function begins at the end of the ConstSpec or VarSpec
1641
	    (ShortVarDecl for short variable declarations)
Robert Griesemer's avatar
Robert Griesemer committed
1642 1643 1644
	    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
1645
	    begins at the identifier in the TypeSpec
Robert Griesemer's avatar
Robert Griesemer committed
1646
	    and ends at the end of the innermost containing block.</li>
1647
</ol>
1648

1649
<p>
Robert Griesemer's avatar
Robert Griesemer committed
1650 1651 1652
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.
1653
</p>
1654

Robert Griesemer's avatar
Robert Griesemer committed
1655
<p>
Robert Griesemer's avatar
Robert Griesemer committed
1656
The <a href="#Package_clause">package clause</a> is not a declaration; the package name
Robert Griesemer's avatar
Robert Griesemer committed
1657
does not appear in any scope. Its purpose is to identify the files belonging
1658
to the same <a href="#Packages">package</a> and to specify the default package name for import
Robert Griesemer's avatar
Robert Griesemer committed
1659 1660
declarations.
</p>
1661 1662


1663
<h3 id="Label_scopes">Label scopes</h3>
1664

Robert Griesemer's avatar
Robert Griesemer committed
1665
<p>
Robert Griesemer's avatar
Robert Griesemer committed
1666
Labels are declared by <a href="#Labeled_statements">labeled statements</a> and are
1667 1668 1669
used in the <a href="#Break_statements">"break"</a>,
<a href="#Continue_statements">"continue"</a>, and
<a href="#Goto_statements">"goto"</a> statements.
Russ Cox's avatar
Russ Cox committed
1670
It is illegal to define a label that is never used.
Robert Griesemer's avatar
Robert Griesemer committed
1671 1672 1673 1674 1675
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>
1676 1677


1678 1679 1680
<h3 id="Blank_identifier">Blank identifier</h3>

<p>
1681 1682 1683 1684
The <i>blank identifier</i> is represented by the underscore character <code>_</code>.
It serves as an anonymous placeholder instead of a regular (non-blank)
identifier and has special meaning in <a href="#Declarations_and_scope">declarations</a>,
as an <a href="#Operands">operand</a>, and in <a href="#Assignments">assignments</a>.
1685 1686 1687
</p>


1688
<h3 id="Predeclared_identifiers">Predeclared identifiers</h3>
1689

1690
<p>
1691 1692
The following identifiers are implicitly declared in the
<a href="#Blocks">universe block</a>:
1693 1694
</p>
<pre class="grammar">
Russ Cox's avatar
Russ Cox committed
1695 1696 1697 1698
Types:
	bool byte complex64 complex128 error float32 float64
	int int8 int16 int32 int64 rune string
	uint uint8 uint16 uint32 uint64 uintptr
1699

1700
Constants:
1701 1702 1703 1704
	true false iota

Zero value:
	nil
1705

1706
Functions:
1707
	append cap close complex copy delete imag len
Robert Griesemer's avatar
Robert Griesemer committed
1708
	make new panic print println real recover
1709
</pre>
1710

1711

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

1714
<p>
1715 1716
An identifier may be <i>exported</i> to permit access to it from another package.
An identifier is exported if both:
1717 1718
</p>
<ol>
1719 1720 1721 1722 1723
	<li>the first character of the identifier's name is a Unicode upper case
	letter (Unicode class "Lu"); and</li>
	<li>the identifier is declared in the <a href="#Blocks">package block</a>
	or it is a <a href="#Struct_types">field name</a> or
	<a href="#MethodName">method name</a>.</li>
1724
</ol>
1725
<p>
1726
All other identifiers are not exported.
1727
</p>
1728

1729

1730
<h3 id="Uniqueness_of_identifiers">Uniqueness of identifiers</h3>
Robert Griesemer's avatar
Robert Griesemer committed
1731 1732

<p>
1733 1734 1735 1736
Given a set of identifiers, an identifier is called <i>unique</i> if it is
<i>different</i> from every other in the set.
Two identifiers are different if they are spelled differently, or if they
appear in different <a href="#Packages">packages</a> and are not
Shenghou Ma's avatar
Shenghou Ma committed
1737
<a href="#Exported_identifiers">exported</a>. Otherwise, they are the same.
Robert Griesemer's avatar
Robert Griesemer committed
1738 1739
</p>

1740
<h3 id="Constant_declarations">Constant declarations</h3>
1741

1742 1743
<p>
A constant declaration binds a list of identifiers (the names of
Robert Griesemer's avatar
Robert Griesemer committed
1744 1745 1746 1747
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
1748 1749
right.
</p>
1750

1751
<pre class="ebnf">
1752
ConstDecl      = "const" ( ConstSpec | "(" { ConstSpec ";" } ")" ) .
1753
ConstSpec      = IdentifierList [ [ Type ] "=" ExpressionList ] .
1754

1755 1756
IdentifierList = identifier { "," identifier } .
ExpressionList = Expression { "," Expression } .
1757
</pre>
1758

1759
<p>
1760
If the type is present, all constants take the type specified, and
1761
the expressions must be <a href="#Assignability">assignable</a> to that type.
1762
If the type is omitted, the constants take the
1763 1764 1765 1766 1767 1768
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.
1769
</p>
1770

1771
<pre>
1772
const Pi float64 = 3.14159265358979323846
1773
const zero = 0.0         // untyped floating-point constant
1774
const (
1775
	size int64 = 1024
1776
	eof        = -1  // untyped integer constant
1777
)
1778
const a, b, c = 3, 4, "foo"  // a = 3, b = 4, c = "foo", untyped integer and string constants
1779
const u, v float32 = 0, 3    // u = 0.0, v = 3.0
1780
</pre>
1781

1782 1783 1784 1785
<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
1786
first preceding non-empty expression list and its type if any.
1787 1788 1789
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
1790 1791
Together with the <a href="#Iota"><code>iota</code> constant generator</a>
this mechanism permits light-weight declaration of sequential values:
1792
</p>
Robert Griesemer's avatar
Robert Griesemer committed
1793

1794
<pre>
1795
const (
1796 1797 1798 1799 1800 1801 1802 1803
	Sunday = iota
	Monday
	Tuesday
	Wednesday
	Thursday
	Friday
	Partyday
	numberOfDays  // this constant is not exported
1804
)
1805
</pre>
Robert Griesemer's avatar
Robert Griesemer committed
1806 1807


1808
<h3 id="Iota">Iota</h3>
1809

1810
<p>
1811
Within a <a href="#Constant_declarations">constant declaration</a>, the predeclared identifier
1812 1813
<code>iota</code> represents successive untyped integer <a href="#Constants">
constants</a>. It is reset to 0 whenever the reserved word <code>const</code>
1814 1815
appears in the source and increments after each <a href="#ConstSpec">ConstSpec</a>.
It can be used to construct a set of related constants:
1816
</p>
1817

1818
<pre>
1819
const ( // iota is reset to 0
1820 1821 1822
	c0 = iota  // c0 == 0
	c1 = iota  // c1 == 1
	c2 = iota  // c2 == 2
1823 1824
)

1825 1826
const ( // iota is reset to 0
	a = 1 &lt;&lt; iota  // a == 1
1827
	b = 1 &lt;&lt; iota  // b == 2
1828 1829
	c = 3          // c == 3  (iota is not used but still incremented)
	d = 1 &lt;&lt; iota  // d == 8
1830 1831
)

1832
const ( // iota is reset to 0
1833 1834 1835
	u         = iota * 42  // u == 0     (untyped integer constant)
	v float64 = iota * 42  // v == 42.0  (float64 constant)
	w         = iota * 42  // w == 84    (untyped integer constant)
1836 1837
)

1838 1839
const x = iota  // x == 0  (iota has been reset)
const y = iota  // y == 0  (iota has been reset)
1840
</pre>
1841

1842
<p>
1843
Within an ExpressionList, the value of each <code>iota</code> is the same because
1844
it is only incremented after each ConstSpec:
1845
</p>
1846

1847
<pre>
1848
const (
1849 1850 1851 1852
	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
1853
)
1854
</pre>
1855

1856
<p>
1857 1858 1859
This last example exploits the implicit repetition of the
last non-empty expression list.
</p>
1860 1861


1862
<h3 id="Type_declarations">Type declarations</h3>
1863

1864
<p>
1865
A type declaration binds an identifier, the <i>type name</i>, to a <a href="#Types">type</a>.
1866
Type declarations come in two forms: alias declarations and type definitions.
1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877
<p>

<pre class="ebnf">
TypeDecl = "type" ( TypeSpec | "(" { TypeSpec ";" } ")" ) .
TypeSpec = AliasDecl | TypeDef .
</pre>

<h4 id="Alias_declarations">Alias declarations</h4>

<p>
An alias declaration binds an identifier to the given type.
1878
</p>
1879

1880
<pre class="ebnf">
1881
AliasDecl = identifier "=" Type .
1882
</pre>
1883

1884 1885 1886 1887 1888
<p>
Within the <a href="#Declarations_and_scope">scope</a> of
the identifier, it serves as an <i>alias</i> for the type.
</p>

1889
<pre>
1890 1891 1892 1893 1894
type (
	nodeList = []*Node  // nodeList and []*Node are identical types
	Polar    = polar    // Polar and polar denote identical types
)
</pre>
1895

1896 1897 1898 1899

<h4 id="Type_definitions">Type definitions</h4>

<p>
1900 1901 1902
A type definition creates a new, distinct type with the same
<a href="#Types">underlying type</a> and operations as the given type,
and binds an identifier to it.
1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915
</p>

<pre class="ebnf">
TypeDef = identifier Type .
</pre>

<p>
The new type is called a <i>defined type</i>.
It is <a href="#Type_identity">different</a> from any other type,
including the type it is created from.
</p>

<pre>
1916
type (
1917 1918
	Point struct{ x, y float64 }  // Point and struct{ x, y float64 } are different types
	polar Point                   // polar and Point denote different types
1919
)
1920

1921
type TreeNode struct {
1922 1923
	left, right *TreeNode
	value *Comparable
1924 1925
}

1926
type Block interface {
1927 1928 1929
	BlockSize() int
	Encrypt(src, dst []byte)
	Decrypt(src, dst []byte)
1930
}
1931
</pre>
1932

1933
<p>
1934 1935 1936
A defined type may have <a href="#Method_declarations">methods</a> associated with it.
It does not inherit any methods bound to the given type,
but the <a href="#Method_sets">method set</a>
1937
of an interface type or of elements of a composite type remains unchanged:
1938 1939 1940
</p>

<pre>
Rob Pike's avatar
Rob Pike committed
1941
// A Mutex is a data type with two methods, Lock and Unlock.
1942 1943 1944 1945 1946 1947 1948
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

1949 1950 1951 1952
// The method set of the <a href="#Pointer_types">base type</a> of PtrMutex remains unchanged,
// but the method set of PtrMutex is empty.
type PtrMutex *Mutex

Robert Griesemer's avatar
Robert Griesemer committed
1953
// The method set of *PrintableMutex contains the methods
1954
// Lock and Unlock bound to its embedded field Mutex.
1955
type PrintableMutex struct {
1956
	Mutex
1957
}
1958

1959 1960
// MyBlock is an interface type that has the same method set as Block.
type MyBlock Block
1961 1962 1963
</pre>

<p>
1964 1965
Type definitions may be used to define different boolean, numeric,
or string types and associate methods with them:
1966 1967 1968 1969 1970 1971
</p>

<pre>
type TimeZone int

const (
1972 1973 1974 1975
	EST TimeZone = -(5 + iota)
	CST
	MST
	PST
1976 1977 1978
)

func (tz TimeZone) String() string {
1979
	return fmt.Sprintf("GMT%+dh", tz)
1980 1981 1982 1983
}
</pre>


1984
<h3 id="Variable_declarations">Variable declarations</h3>
1985 1986

<p>
1987 1988
A variable declaration creates one or more <a href="#Variables">variables</a>,
binds corresponding identifiers to them, and gives each a type and an initial value.
1989
</p>
1990

1991
<pre class="ebnf">
1992
VarDecl     = "var" ( VarSpec | "(" { VarSpec ";" } ")" ) .
1993
VarSpec     = IdentifierList ( Type [ "=" ExpressionList ] | "=" ExpressionList ) .
1994
</pre>
1995

1996
<pre>
1997
var i int
1998
var U, V, W float64
1999
var k = 0
2000
var x, y float32 = -1, -2
2001
var (
2002
	i       int
2003 2004
	u, v, s = 2.0, 3.0, "bar"
)
Robert Griesemer's avatar
Robert Griesemer committed
2005
var re, im = complexSqrt(-1)
2006
var _, found = entries[name]  // map lookup; only interested in "found"
2007
</pre>
2008

2009
<p>
2010
If a list of expressions is given, the variables are initialized
2011
with the expressions following the rules for <a href="#Assignments">assignments</a>.
2012
Otherwise, each variable is initialized to its <a href="#The_zero_value">zero value</a>.
2013
</p>
2014

2015
<p>
2016 2017 2018 2019 2020 2021 2022 2023
If a type is present, each variable is given that type.
Otherwise, each variable is given the type of the corresponding
initialization value in the assignment.
If that value is an untyped constant, it is first
<a href="#Conversions">converted</a> to its <a href="#Constants">default type</a>;
if it is an untyped boolean value, it is first converted to type <code>bool</code>.
The predeclared value <code>nil</code> cannot be used to initialize a variable
with no explicit type.
2024
</p>
2025

2026
<pre>
Brad Fitzpatrick's avatar
Brad Fitzpatrick committed
2027
var d = math.Sin(0.5)  // d is float64
2028 2029 2030 2031
var i = 42             // i is int
var t, ok = x.(T)      // t is T, ok is bool
var n = nil            // illegal
</pre>
2032 2033 2034 2035 2036 2037

<p>
Implementation restriction: A compiler may make it illegal to declare a variable
inside a <a href="#Function_declarations">function body</a> if the variable is
never used.
</p>
2038

2039
<h3 id="Short_variable_declarations">Short variable declarations</h3>
2040

2041
<p>
2042
A <i>short variable declaration</i> uses the syntax:
2043
</p>
2044

2045
<pre class="ebnf">
2046
ShortVarDecl = IdentifierList ":=" ExpressionList .
2047
</pre>
2048

2049
<p>
2050
It is shorthand for a regular <a href="#Variable_declarations">variable declaration</a>
2051
with initializer expressions but no types:
2052
</p>
2053

2054 2055
<pre class="grammar">
"var" IdentifierList = ExpressionList .
2056
</pre>
2057

2058
<pre>
2059 2060 2061 2062 2063
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
2064
</pre>
2065

Rob Pike's avatar
Rob Pike committed
2066
<p>
2067 2068
Unlike regular variable declarations, a short variable declaration may <i>redeclare</i>
variables provided they were originally declared earlier in the same block
2069
(or the parameter lists if the block is the function body) with the same type,
2070 2071 2072
and at least one of the non-<a href="#Blank_identifier">blank</a> variables is new.
As a consequence, redeclaration 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.
Rob Pike's avatar
Rob Pike committed
2073 2074 2075
</p>

<pre>
2076 2077
field1, offset := nextField(str, 0)
field2, offset := nextField(str, offset)  // redeclares offset
2078
a, a := 1, 2                              // illegal: double declaration of a or no new variable if a was declared elsewhere
Rob Pike's avatar
Rob Pike committed
2079 2080
</pre>

Rob Pike's avatar
Rob Pike committed
2081
<p>
2082
Short variable declarations may appear only inside functions.
2083 2084 2085 2086 2087
In some contexts such as the initializers for
<a href="#If_statements">"if"</a>,
<a href="#For_statements">"for"</a>, or
<a href="#Switch_statements">"switch"</a> statements,
they can be used to declare local temporary variables.
Rob Pike's avatar
Rob Pike committed
2088
</p>
2089

2090
<h3 id="Function_declarations">Function declarations</h3>
2091

2092
<p>
2093 2094
A function declaration binds an identifier, the <i>function name</i>,
to a function.
2095
</p>
2096

2097
<pre class="ebnf">
2098
FunctionDecl = "func" FunctionName ( Function | Signature ) .
2099
FunctionName = identifier .
2100 2101
Function     = Signature FunctionBody .
FunctionBody = Block .
2102
</pre>
2103

2104 2105 2106 2107 2108 2109
<p>
If the function's <a href="#Function_types">signature</a> declares
result parameters, the function body's statement list must end in
a <a href="#Terminating_statements">terminating statement</a>.
</p>

2110
<pre>
2111 2112 2113 2114
func IndexRune(s string, r rune) int {
	for i, c := range s {
		if c == r {
			return i
2115 2116
		}
	}
2117
	// invalid: missing return statement
2118 2119 2120
}
</pre>

2121 2122 2123 2124 2125
<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>

2126 2127 2128
<pre>
func min(x int, y int) int {
	if x &lt; y {
2129
		return x
2130
	}
2131
	return y
2132
}
2133 2134

func flushICache(begin, end uintptr)  // implemented externally
2135
</pre>
2136

2137
<h3 id="Method_declarations">Method declarations</h3>
2138

2139
<p>
2140 2141 2142
A method is a <a href="#Function_declarations">function</a> with a <i>receiver</i>.
A method declaration binds an identifier, the <i>method name</i>, to a method,
and associates the method with the receiver's <i>base type</i>.
Rob Pike's avatar
Rob Pike committed
2143
</p>
2144

2145
<pre class="ebnf">
2146 2147
MethodDecl = "func" Receiver MethodName ( Function | Signature ) .
Receiver   = Parameters .
2148 2149
</pre>

2150
<p>
Paolo Martini's avatar
Paolo Martini committed
2151
The receiver is specified via an extra parameter section preceding the method
2152
name. That parameter section must declare a single non-variadic parameter, the receiver.
2153 2154
Its type must be of the form <code>T</code> or <code>*T</code> (possibly using
parentheses) where <code>T</code> is a type name. The type denoted by <code>T</code> is called
2155
the receiver <i>base type</i>; it must not be a pointer or interface type and
2156
it must be <a href="#Type_definitions">defined</a> in the same package as the method.
2157
The method is said to be <i>bound</i> to the base type and the method name
2158 2159
is visible only within <a href="#Selectors">selectors</a> for type <code>T</code>
or <code>*T</code>.
2160 2161 2162
</p>

<p>
2163 2164 2165 2166 2167 2168 2169 2170 2171
A non-<a href="#Blank_identifier">blank</a> receiver identifier must be
<a href="#Uniqueness_of_identifiers">unique</a> in the method signature.
If the receiver's value is not referenced inside the body of the method,
its identifier may be omitted in the declaration. The same applies in
general to parameters of functions and methods.
</p>

<p>
For a base type, the non-blank names of methods bound to it must be unique.
2172 2173
If the base type is a <a href="#Struct_types">struct type</a>,
the non-blank method and field names must be distinct.
Rob Pike's avatar
Rob Pike committed
2174
</p>
2175

2176 2177 2178
<p>
Given type <code>Point</code>, the declarations
</p>
2179

2180
<pre>
2181 2182
func (p *Point) Length() float64 {
	return math.Sqrt(p.x * p.x + p.y * p.y)
2183
}
2184

2185 2186 2187
func (p *Point) Scale(factor float64) {
	p.x *= factor
	p.y *= factor
2188 2189
}
</pre>
2190

2191
<p>
Rob Pike's avatar
Rob Pike committed
2192 2193
bind the methods <code>Length</code> and <code>Scale</code>,
with receiver type <code>*Point</code>,
2194 2195
to the base type <code>Point</code>.
</p>
2196

Rob Pike's avatar
Rob Pike committed
2197 2198 2199 2200 2201 2202
<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>
2203
func(p *Point, factor float64)
Rob Pike's avatar
Rob Pike committed
2204 2205 2206 2207 2208 2209
</pre>

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

2210

2211
<h2 id="Expressions">Expressions</h2>
2212

2213
<p>
Rob Pike's avatar
Rob Pike committed
2214
An expression specifies the computation of a value by applying
2215
operators and functions to operands.
Rob Pike's avatar
Rob Pike committed
2216
</p>
2217

2218
<h3 id="Operands">Operands</h3>
2219

2220
<p>
2221
Operands denote the elementary values in an expression. An operand may be a
2222 2223
literal, a (possibly <a href="#Qualified_identifiers">qualified</a>)
non-<a href="#Blank_identifier">blank</a> identifier denoting a
2224 2225 2226 2227 2228
<a href="#Constant_declarations">constant</a>,
<a href="#Variable_declarations">variable</a>, or
<a href="#Function_declarations">function</a>,
a <a href="#Method_expressions">method expression</a> yielding a function,
or a parenthesized expression.
2229
</p>
2230

2231 2232 2233 2234 2235
<p>
The <a href="#Blank_identifier">blank identifier</a> may appear as an
operand only on the left-hand side of an <a href="#Assignments">assignment</a>.
</p>

2236
<pre class="ebnf">
2237 2238 2239
Operand     = Literal | OperandName | MethodExpr | "(" Expression ")" .
Literal     = BasicLit | CompositeLit | FunctionLit .
BasicLit    = int_lit | float_lit | imaginary_lit | rune_lit | string_lit .
2240
OperandName = identifier | QualifiedIdent.
2241
</pre>
2242

2243
<h3 id="Qualified_identifiers">Qualified identifiers</h3>
2244

2245
<p>
2246 2247 2248
A qualified identifier is an identifier qualified with a package name prefix.
Both the package name and the identifier must not be
<a href="#Blank_identifier">blank</a>.
Rob Pike's avatar
Rob Pike committed
2249
</p>
2250

2251
<pre class="ebnf">
2252
QualifiedIdent = PackageName "." identifier .
2253
</pre>
2254

Rob Pike's avatar
Rob Pike committed
2255
<p>
Robert Griesemer's avatar
Robert Griesemer committed
2256 2257
A qualified identifier accesses an identifier in a different package, which
must be <a href="#Import_declarations">imported</a>.
2258 2259
The identifier must be <a href="#Exported_identifiers">exported</a> and
declared in the <a href="#Blocks">package block</a> of that package.
Rob Pike's avatar
Rob Pike committed
2260 2261 2262
</p>

<pre>
2263
math.Sin	// denotes the Sin function in package math
Rob Pike's avatar
Rob Pike committed
2264
</pre>
2265

2266
<h3 id="Composite_literals">Composite literals</h3>
2267

Rob Pike's avatar
Rob Pike committed
2268 2269 2270
<p>
Composite literals construct values for structs, arrays, slices, and maps
and create a new value each time they are evaluated.
2271
They consist of the type of the literal followed by a brace-bound list of elements.
2272
Each element may optionally be preceded by a corresponding key.
Rob Pike's avatar
Rob Pike committed
2273
</p>
Robert Griesemer's avatar
Robert Griesemer committed
2274

2275
<pre class="ebnf">
2276
CompositeLit  = LiteralType LiteralValue .
Rob Pike's avatar
Rob Pike committed
2277
LiteralType   = StructType | ArrayType | "[" "..." "]" ElementType |
2278
                SliceType | MapType | TypeName .
2279
LiteralValue  = "{" [ ElementList [ "," ] ] "}" .
2280 2281
ElementList   = KeyedElement { "," KeyedElement } .
KeyedElement  = [ Key ":" ] Element .
2282
Key           = FieldName | Expression | LiteralValue .
Rob Pike's avatar
Rob Pike committed
2283
FieldName     = identifier .
2284
Element       = Expression | LiteralValue .
2285
</pre>
Robert Griesemer's avatar
Robert Griesemer committed
2286

Rob Pike's avatar
Rob Pike committed
2287
<p>
2288
The LiteralType's underlying type must be a struct, array, slice, or map type
2289 2290
(the grammar enforces this constraint except when the type is given
as a TypeName).
2291
The types of the elements and keys must be <a href="#Assignability">assignable</a>
2292
to the respective field, element, and key types of the literal type;
2293
there is no additional conversion.
2294
The key is interpreted as a field name for struct literals,
2295
an index for array and slice literals, and a key for map literals.
2296 2297
For map literals, all elements must have a key. It is an error
to specify multiple elements with the same field name or
2298 2299
constant key value. For non-constant map keys, see the section on
<a href="#Order_of_evaluation">evaluation order</a>.
Rob Pike's avatar
Rob Pike committed
2300
</p>
2301

2302 2303
<p>
For struct literals the following rules apply:
2304
</p>
2305
<ul>
2306
	<li>A key must be a field name declared in the struct type.
2307
	</li>
2308
	<li>An element list that does not contain any keys must
2309 2310 2311 2312 2313
	    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>
2314
	<li>An element list that contains keys does not need to
2315 2316 2317 2318
	    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
2319
	    to the zero value for its type.
2320 2321 2322 2323 2324 2325 2326 2327 2328
	</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>
2329
<pre>
2330 2331
type Point3D struct { x, y, z float64 }
type Line struct { p, q Point3D }
2332
</pre>
2333

Rob Pike's avatar
Rob Pike committed
2334 2335 2336
<p>
one may write
</p>
2337

2338
<pre>
2339 2340
origin := Point3D{}                            // zero value for Point3D
line := Line{origin, Point3D{y: -4, z: 12.3}}  // zero value for line.q.x
2341 2342
</pre>

2343 2344 2345
<p>
For array and slice literals the following rules apply:
</p>
2346 2347 2348 2349
<ul>
	<li>Each element has an associated integer index marking
	    its position in the array.
	</li>
2350 2351 2352 2353
	<li>An element with a key uses the key as its index. The
	    key must be a non-negative constant representable by
	    a value of type <code>int</code>; and if it is typed
	    it must be of integer type.
2354 2355 2356 2357 2358 2359
	</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>

2360
<p>
2361
<a href="#Address_operators">Taking the address</a> of a composite literal
Robert Griesemer's avatar
Robert Griesemer committed
2362 2363
generates a pointer to a unique <a href="#Variables">variable</a> initialized
with the literal's value.
2364 2365
</p>
<pre>
2366
var pointer *Point3D = &amp;Point3D{y: 1000}
2367
</pre>
2368

Rob Pike's avatar
Rob Pike committed
2369
<p>
2370
The length of an array literal is the length specified in the literal type.
2371
If fewer elements than the length are provided in the literal, the missing
Rob Pike's avatar
Rob Pike committed
2372
elements are set to the zero value for the array element type.
2373 2374 2375
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
2376
</p>
2377

2378
<pre>
2379 2380 2381
buffer := [10]string{}             // len(buffer) == 10
intSet := [6]int{1, 2, 3, 5}       // len(intSet) == 6
days := [...]string{"Sat", "Sun"}  // len(days) == 2
2382
</pre>
2383

Rob Pike's avatar
Rob Pike committed
2384 2385
<p>
A slice literal describes the entire underlying array literal.
2386
Thus the length and capacity of a slice literal are the maximum
2387
element index plus one. A slice literal has the form
Rob Pike's avatar
Rob Pike committed
2388
</p>
2389

2390
<pre>
2391
[]T{x1, x2, … xn}
2392
</pre>
2393

Rob Pike's avatar
Rob Pike committed
2394
<p>
2395
and is shorthand for a slice operation applied to an array:
Rob Pike's avatar
Rob Pike committed
2396
</p>
2397

2398
<pre>
Russ Cox's avatar
Russ Cox committed
2399 2400
tmp := [n]T{x1, x2, … xn}
tmp[0 : n]
2401
</pre>
2402

2403 2404
<p>
Within a composite literal of array, slice, or map type <code>T</code>,
2405 2406 2407 2408
elements or map keys that are themselves composite literals may elide the respective
literal type if it is identical to the element or key type of <code>T</code>.
Similarly, elements or keys that are addresses of composite literals may elide
the <code>&amp;T</code> when the element or key type is <code>*T</code>.
2409 2410 2411
</p>

<pre>
2412 2413 2414 2415 2416
[...]Point{{1.5, -3.5}, {0, 0}}     // same as [...]Point{Point{1.5, -3.5}, Point{0, 0}}
[][]int{{1, 2, 3}, {4, 5}}          // same as [][]int{[]int{1, 2, 3}, []int{4, 5}}
[][]Point{{{0, 1}, {1, 2}}}         // same as [][]Point{[]Point{Point{0, 1}, Point{1, 2}}}
map[string]Point{"orig": {0, 0}}    // same as map[string]Point{"orig": Point{0, 0}}
map[Point]string{{0, 0}: "orig"}    // same as map[Point]string{Point{0, 0}: "orig"}
2417 2418 2419 2420

type PPoint *Point
[2]*Point{{1.5, -3.5}, {}}          // same as [2]*Point{&amp;Point{1.5, -3.5}, &amp;Point{}}
[2]PPoint{{1.5, -3.5}, {}}          // same as [2]PPoint{PPoint(&amp;Point{1.5, -3.5}), PPoint(&amp;Point{})}
2421 2422
</pre>

2423 2424
<p>
A parsing ambiguity arises when a composite literal using the
2425 2426 2427 2428 2429 2430 2431
TypeName form of the LiteralType appears as an operand between the
<a href="#Keywords">keyword</a> and the opening brace of the block
of an "if", "for", or "switch" statement, and the composite literal
is not enclosed in parentheses, square brackets, or curly braces.
In this rare case, the opening brace of the literal is erroneously parsed
as the one introducing the block of statements. To resolve the ambiguity,
the composite literal must appear within parentheses.
2432 2433 2434
</p>

<pre>
2435 2436
if x == (T{a,b,c}[i]) { … }
if (x == T{a,b,c}[i]) { … }
2437 2438
</pre>

2439 2440 2441 2442 2443 2444
<p>
Examples of valid array, slice, and map literals:
</p>

<pre>
// list of prime numbers
Rob Pike's avatar
Rob Pike committed
2445
primes := []int{2, 3, 5, 7, 9, 2147483647}
2446 2447

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

2450 2451
// the array [10]float32{-1, 0, 0, 0, -0.1, -0.1, 0, 0, 0, -1}
filter := [10]float32{-1, 4: -0.1, -0.1, 9: -1}
2452 2453

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


2461
<h3 id="Function_literals">Function literals</h3>
2462

Rob Pike's avatar
Rob Pike committed
2463
<p>
2464
A function literal represents an anonymous <a href="#Function_declarations">function</a>.
Rob Pike's avatar
Rob Pike committed
2465
</p>
2466

2467
<pre class="ebnf">
2468
FunctionLit = "func" Function .
2469
</pre>
2470

2471
<pre>
2472
func(a, b int, z float64) bool { return a*b &lt; int(z) }
2473
</pre>
2474

Rob Pike's avatar
Rob Pike committed
2475 2476 2477
<p>
A function literal can be assigned to a variable or invoked directly.
</p>
2478

2479
<pre>
Rob Pike's avatar
Rob Pike committed
2480
f := func(x, y int) int { return x + y }
2481
func(ch chan int) { ch &lt;- ACK }(replyChan)
2482
</pre>
2483

Rob Pike's avatar
Rob Pike committed
2484 2485
<p>
Function literals are <i>closures</i>: they may refer to variables
2486 2487
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
2488 2489
as they are accessible.
</p>
2490

2491

2492
<h3 id="Primary_expressions">Primary expressions</h3>
2493

2494 2495 2496 2497
<p>
Primary expressions are the operands for unary and binary expressions.
</p>

2498
<pre class="ebnf">
2499 2500
PrimaryExpr =
	Operand |
2501
	Conversion |
2502 2503 2504
	PrimaryExpr Selector |
	PrimaryExpr Index |
	PrimaryExpr Slice |
2505
	PrimaryExpr TypeAssertion |
2506
	PrimaryExpr Arguments .
2507

2508 2509
Selector       = "." identifier .
Index          = "[" Expression "]" .
2510 2511
Slice          = "[" [ Expression ] ":" [ Expression ] "]" |
                 "[" [ Expression ] ":" Expression ":" Expression "]" .
2512
TypeAssertion  = "." "(" Type ")" .
2513
Arguments      = "(" [ ( ExpressionList | Type [ "," ExpressionList ] ) [ "..." ] [ "," ] ] ")" .
2514 2515 2516 2517 2518 2519 2520 2521
</pre>


<pre>
x
2
(s + ".txt")
f(3.1415, true)
2522
Point{1, 2}
2523 2524 2525 2526 2527 2528 2529
m["foo"]
s[i : j + 1]
obj.color
f.p[i].x()
</pre>


2530
<h3 id="Selectors">Selectors</h3>
2531

Rob Pike's avatar
Rob Pike committed
2532
<p>
2533 2534 2535
For a <a href="#Primary_expressions">primary expression</a> <code>x</code>
that is not a <a href="#Package_clause">package name</a>, the
<i>selector expression</i>
Rob Pike's avatar
Rob Pike committed
2536
</p>
Robert Griesemer's avatar
Robert Griesemer committed
2537

2538 2539 2540
<pre>
x.f
</pre>
Robert Griesemer's avatar
Robert Griesemer committed
2541

2542
<p>
2543 2544 2545 2546 2547 2548 2549
denotes the field or method <code>f</code> of the value <code>x</code>
(or sometimes <code>*x</code>; see below).
The identifier <code>f</code> is called the (field or method) <i>selector</i>;
it must not be the <a href="#Blank_identifier">blank identifier</a>.
The type of the selector expression is the type of <code>f</code>.
If <code>x</code> is a package name, see the section on
<a href="#Qualified_identifiers">qualified identifiers</a>.
Rob Pike's avatar
Rob Pike committed
2550
</p>
2551

2552
<p>
Rob Pike's avatar
Rob Pike committed
2553 2554
A selector <code>f</code> may denote a field or method <code>f</code> of
a type <code>T</code>, or it may refer
2555
to a field or method <code>f</code> of a nested
2556 2557
<a href="#Struct_types">embedded field</a> of <code>T</code>.
The number of embedded fields traversed
Rob Pike's avatar
Rob Pike committed
2558 2559 2560 2561
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
2562
an embedded field <code>A</code> in <code>T</code> is the
Rob Pike's avatar
Rob Pike committed
2563 2564
depth of <code>f</code> in <code>A</code> plus one.
</p>
2565

2566
<p>
2567
The following rules apply to selectors:
Rob Pike's avatar
Rob Pike committed
2568
</p>
2569

Rob Pike's avatar
Rob Pike committed
2570 2571 2572
<ol>
<li>
For a value <code>x</code> of type <code>T</code> or <code>*T</code>
2573
where <code>T</code> is not a pointer or interface type,
Rob Pike's avatar
Rob Pike committed
2574 2575 2576
<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>.
2577 2578
If there is not exactly <a href="#Uniqueness_of_identifiers">one <code>f</code></a>
with shallowest depth, the selector expression is illegal.
Rob Pike's avatar
Rob Pike committed
2579
</li>
2580

Rob Pike's avatar
Rob Pike committed
2581
<li>
2582
For a value <code>x</code> of type <code>I</code> where <code>I</code>
2583
is an interface type, <code>x.f</code> denotes the actual method with name
2584
<code>f</code> of the dynamic value of <code>x</code>.
2585 2586 2587
If there is no method with name <code>f</code> in the
<a href="#Method_sets">method set</a> of <code>I</code>, the selector
expression is illegal.
Rob Pike's avatar
Rob Pike committed
2588
</li>
2589 2590 2591 2592 2593 2594 2595

<li>
As an exception, if the type of <code>x</code> is a named pointer type
and <code>(*x).f</code> is a valid selector expression denoting a field
(but not a method), <code>x.f</code> is shorthand for <code>(*x).f</code>.
</li>

Rob Pike's avatar
Rob Pike committed
2596 2597
<li>
In all other cases, <code>x.f</code> is illegal.
2598
</li>
2599

2600
<li>
Russ Cox's avatar
Russ Cox committed
2601 2602 2603 2604 2605
If <code>x</code> is of pointer type and has the value
<code>nil</code> and <code>x.f</code> denotes a struct field,
assigning to or evaluating <code>x.f</code>
causes a <a href="#Run_time_panics">run-time panic</a>.
</li>
2606

Russ Cox's avatar
Russ Cox committed
2607 2608 2609 2610
<li>
If <code>x</code> is of interface type and has the value
<code>nil</code>, <a href="#Calls">calling</a> or
<a href="#Method_values">evaluating</a> the method <code>x.f</code>
2611
causes a <a href="#Run_time_panics">run-time panic</a>.
2612
</li>
Rob Pike's avatar
Rob Pike committed
2613
</ol>
2614

2615
<p>
Rob Pike's avatar
Rob Pike committed
2616 2617
For example, given the declarations:
</p>
2618

2619 2620
<pre>
type T0 struct {
2621
	x int
2622
}
2623

2624
func (*T0) M0()
2625

2626
type T1 struct {
2627
	y int
2628
}
2629

2630
func (T1) M1()
2631

2632
type T2 struct {
2633 2634 2635
	z int
	T1
	*T0
2636
}
Robert Griesemer's avatar
Robert Griesemer committed
2637

2638
func (*T2) M2()
Robert Griesemer's avatar
Robert Griesemer committed
2639

2640 2641 2642 2643 2644
type Q *T2

var t T2     // with t.T0 != nil
var p *T2    // with p != nil and (*p).T0 != nil
var q Q = p
2645
</pre>
Robert Griesemer's avatar
Robert Griesemer committed
2646

Rob Pike's avatar
Rob Pike committed
2647 2648 2649
<p>
one may write:
</p>
Robert Griesemer's avatar
Robert Griesemer committed
2650

2651
<pre>
2652 2653
t.z          // t.z
t.y          // t.T1.y
Robert Griesemer's avatar
Robert Griesemer committed
2654
t.x          // (*t.T0).x
2655 2656 2657 2658 2659 2660 2661

p.z          // (*p).z
p.y          // (*p).T1.y
p.x          // (*(*p).T0).x

q.x          // (*(*q).T0).x        (*q).x is a valid field selector

2662
p.M0()       // ((*p).T0).M0()      M0 expects *T0 receiver
2663
p.M1()       // ((*p).T1).M1()      M1 expects T1 receiver
2664 2665
p.M2()       // p.M2()              M2 expects *T2 receiver
t.M2()       // (&amp;t).M2()           M2 expects *T2 receiver, see section on Calls
2666
</pre>
Robert Griesemer's avatar
Robert Griesemer committed
2667

2668 2669 2670 2671 2672 2673
<p>
but the following is invalid:
</p>

<pre>
q.M0()       // (*q).M0 is valid but not a field selector
2674
</pre>
Robert Griesemer's avatar
Robert Griesemer committed
2675 2676


2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903
<h3 id="Method_expressions">Method expressions</h3>

<p>
If <code>M</code> is in the <a href="#Method_sets">method set</a> 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.
</p>

<pre class="ebnf">
MethodExpr    = ReceiverType "." MethodName .
ReceiverType  = TypeName | "(" "*" TypeName ")" | "(" ReceiverType ")" .
</pre>

<p>
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>.
</p>

<pre>
type T struct {
	a int
}
func (tv  T) Mv(a int) int         { return 0 }  // value receiver
func (tp *T) Mp(f float32) float32 { return 1 }  // pointer receiver

var t T
</pre>

<p>
The expression
</p>

<pre>
T.Mv
</pre>

<p>
yields a function equivalent to <code>Mv</code> but
with an explicit receiver as its first argument; it has signature
</p>

<pre>
func(tv T, a int) int
</pre>

<p>
That function may be called normally with an explicit receiver, so
these five invocations are equivalent:
</p>

<pre>
t.Mv(7)
T.Mv(t, 7)
(T).Mv(t, 7)
f1 := T.Mv; f1(t, 7)
f2 := (T).Mv; f2(t, 7)
</pre>

<p>
Similarly, the expression
</p>

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

<p>
yields a function value representing <code>Mp</code> with signature
</p>

<pre>
func(tp *T, f float32) float32
</pre>

<p>
For a method with a value receiver, one can derive a function
with an explicit pointer receiver, so
</p>

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

<p>
yields a function value representing <code>Mv</code> with signature
</p>

<pre>
func(tv *T, a int) int
</pre>

<p>
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.
</p>

<p>
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
<a href="#Function_literals">function literal</a> or
<a href="#Method_values">method value</a>.
</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.
</p>

<h3 id="Method_values">Method values</h3>

<p>
If the expression <code>x</code> has static type <code>T</code> and
<code>M</code> is in the <a href="#Method_sets">method set</a> of type <code>T</code>,
<code>x.M</code> is called a <i>method value</i>.
The method value <code>x.M</code> is a function value that is callable
with the same arguments as a method call of <code>x.M</code>.
The expression <code>x</code> is evaluated and saved during the evaluation of the
method value; the saved copy is then used as the receiver in any calls,
which may be executed later.
</p>

<p>
The type <code>T</code> may be an interface or non-interface type.
</p>

<p>
As in the discussion of <a href="#Method_expressions">method expressions</a> above,
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>.
</p>

<pre>
type T struct {
	a int
}
func (tv  T) Mv(a int) int         { return 0 }  // value receiver
func (tp *T) Mp(f float32) float32 { return 1 }  // pointer receiver

var t T
var pt *T
func makeT() T
</pre>

<p>
The expression
</p>

<pre>
t.Mv
</pre>

<p>
yields a function value of type
</p>

<pre>
func(int) int
</pre>

<p>
These two invocations are equivalent:
</p>

<pre>
t.Mv(7)
f := t.Mv; f(7)
</pre>

<p>
Similarly, the expression
</p>

<pre>
pt.Mp
</pre>

<p>
yields a function value of type
</p>

<pre>
func(float32) float32
</pre>

<p>
As with <a href="#Selectors">selectors</a>, a reference to a non-interface method with a value receiver
using a pointer will automatically dereference that pointer: <code>pt.Mv</code> is equivalent to <code>(*pt).Mv</code>.
</p>

<p>
As with <a href="#Calls">method calls</a>, a reference to a non-interface method with a pointer receiver
using an addressable value will automatically take the address of that value: <code>t.Mp</code> is equivalent to <code>(&amp;t).Mp</code>.
</p>

<pre>
f := t.Mv; f(7)   // like t.Mv(7)
f := pt.Mp; f(7)  // like pt.Mp(7)
f := pt.Mv; f(7)  // like (*pt).Mv(7)
f := t.Mp; f(7)   // like (&amp;t).Mp(7)
f := makeT().Mp   // invalid: result of makeT() is not addressable
</pre>

<p>
Although the examples above use non-interface types, it is also legal to create a method value
from a value of interface type.
</p>

<pre>
var i interface { M(int) } = myVal
f := i.M; f(7)  // like i.M(7)
</pre>


2904
<h3 id="Index_expressions">Index expressions</h3>
2905

Rob Pike's avatar
Rob Pike committed
2906
<p>
Robert Griesemer's avatar
Robert Griesemer committed
2907
A primary expression of the form
Rob Pike's avatar
Rob Pike committed
2908
</p>
Robert Griesemer's avatar
Robert Griesemer committed
2909

2910 2911 2912
<pre>
a[x]
</pre>
Robert Griesemer's avatar
Robert Griesemer committed
2913

Rob Pike's avatar
Rob Pike committed
2914
<p>
2915 2916 2917
denotes the element of the array, pointer to array, slice, string or map <code>a</code> indexed by <code>x</code>.
The value <code>x</code> is called the <i>index</i> or <i>map key</i>, respectively.
The following rules apply:
Rob Pike's avatar
Rob Pike committed
2918
</p>
2919

2920 2921 2922 2923
<p>
If <code>a</code> is not a map:
</p>
<ul>
2924 2925
	<li>the index <code>x</code> must be of integer type or untyped;
	    it is <i>in range</i> if <code>0 &lt;= x &lt; len(a)</code>,
2926 2927
	    otherwise it is <i>out of range</i></li>
	<li>a <a href="#Constants">constant</a> index must be non-negative
2928
	    and representable by a value of type <code>int</code>
2929 2930
</ul>

2931
<p>
2932
For <code>a</code> of <a href="#Array_types">array type</a> <code>A</code>:
Rob Pike's avatar
Rob Pike committed
2933
</p>
2934
<ul>
2935
	<li>a <a href="#Constants">constant</a> index must be in range</li>
2936
	<li>if <code>x</code> is out of range at run time,
2937
	    a <a href="#Run_time_panics">run-time panic</a> occurs</li>
Rob Pike's avatar
Rob Pike committed
2938
	<li><code>a[x]</code> is the array element at index <code>x</code> and the type of
2939
	    <code>a[x]</code> is the element type of <code>A</code></li>
2940 2941 2942
</ul>

<p>
2943 2944 2945 2946 2947 2948 2949 2950
For <code>a</code> of <a href="#Pointer_types">pointer</a> to array type:
</p>
<ul>
	<li><code>a[x]</code> is shorthand for <code>(*a)[x]</code></li>
</ul>

<p>
For <code>a</code> of <a href="#Slice_types">slice type</a> <code>S</code>:
2951 2952
</p>
<ul>
2953
	<li>if <code>x</code> is out of range at run time,
2954 2955
	    a <a href="#Run_time_panics">run-time panic</a> occurs</li>
	<li><code>a[x]</code> is the slice element at index <code>x</code> and the type of
2956
	    <code>a[x]</code> is the element type of <code>S</code></li>
2957
</ul>
2958 2959

<p>
2960
For <code>a</code> of <a href="#String_types">string type</a>:
2961 2962
</p>
<ul>
2963
	<li>a <a href="#Constants">constant</a> index must be in range
2964 2965 2966
	    if the string <code>a</code> is also constant</li>
	<li>if <code>x</code> is out of range at run time,
	    a <a href="#Run_time_panics">run-time panic</a> occurs</li>
2967
	<li><code>a[x]</code> is the non-constant byte value at index <code>x</code> and the type of
2968
	    <code>a[x]</code> is <code>byte</code></li>
2969
	<li><code>a[x]</code> may not be assigned to</li>
2970 2971
</ul>

2972
<p>
2973
For <code>a</code> of <a href="#Map_types">map type</a> <code>M</code>:
Rob Pike's avatar
Rob Pike committed
2974
</p>
2975
<ul>
2976
	<li><code>x</code>'s type must be
2977 2978
	    <a href="#Assignability">assignable</a>
	    to the key type of <code>M</code></li>
2979
	<li>if the map contains an entry with key <code>x</code>,
2980 2981
	    <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>
2982
	<li>if the map is <code>nil</code> or does not contain such an entry,
2983 2984
	    <code>a[x]</code> is the <a href="#The_zero_value">zero value</a>
	    for the value type of <code>M</code></li>
2985
</ul>
Robert Griesemer's avatar
Robert Griesemer committed
2986

2987
<p>
2988
Otherwise <code>a[x]</code> is illegal.
Rob Pike's avatar
Rob Pike committed
2989 2990 2991
</p>

<p>
2992
An index expression on a map <code>a</code> of type <code>map[K]V</code>
2993
used in an <a href="#Assignments">assignment</a> or initialization of the special form
Rob Pike's avatar
Rob Pike committed
2994 2995 2996
</p>

<pre>
2997 2998 2999
v, ok = a[x]
v, ok := a[x]
var v, ok = a[x]
3000
var v, ok T = a[x]
Rob Pike's avatar
Rob Pike committed
3001 3002 3003
</pre>

<p>
3004
yields an additional untyped boolean value. The value of <code>ok</code> is
3005
<code>true</code> if the key <code>x</code> is present in the map, and
3006
<code>false</code> otherwise.
Rob Pike's avatar
Rob Pike committed
3007 3008
</p>

3009 3010 3011 3012 3013
<p>
Assigning to an element of a <code>nil</code> map causes a
<a href="#Run_time_panics">run-time panic</a>.
</p>

3014

Robert Griesemer's avatar
Robert Griesemer committed
3015 3016 3017 3018 3019 3020 3021 3022 3023
<h3 id="Slice_expressions">Slice expressions</h3>

<p>
Slice expressions construct a substring or slice from a string, array, pointer
to array, or slice. There are two variants: a simple form that specifies a low
and high bound, and a full form that also specifies a bound on the capacity.
</p>

<h4>Simple slice expressions</h4>
3024

Rob Pike's avatar
Rob Pike committed
3025
<p>
3026
For a string, array, pointer to array, or slice <code>a</code>, the primary expression
Rob Pike's avatar
Rob Pike committed
3027
</p>
3028

3029
<pre>
3030
a[low : high]
3031
</pre>
3032

Rob Pike's avatar
Rob Pike committed
3033
<p>
3034 3035 3036
constructs a substring or slice. The <i>indices</i> <code>low</code> and
<code>high</code> select which elements of operand <code>a</code> appear
in the result. The result has indices starting at 0 and length equal to
3037
<code>high</code>&nbsp;-&nbsp;<code>low</code>.
3038 3039 3040 3041
After slicing the array <code>a</code>
</p>

<pre>
3042 3043
a := [5]int{1, 2, 3, 4, 5}
s := a[1:4]
3044 3045 3046 3047
</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
3048
</p>
3049

3050 3051 3052
<pre>
s[0] == 2
s[1] == 3
3053
s[2] == 4
3054
</pre>
3055

Rob Pike's avatar
Rob Pike committed
3056
<p>
3057
For convenience, any of the indices may be omitted. A missing <code>low</code>
3058 3059
index defaults to zero; a missing <code>high</code> index defaults to the length of the
sliced operand:
3060 3061
</p>

3062
<pre>
3063
a[2:]  // same as a[2 : len(a)]
3064 3065
a[:3]  // same as a[0 : 3]
a[:]   // same as a[0 : len(a)]
3066 3067
</pre>

3068
<p>
3069 3070 3071 3072 3073 3074 3075
If <code>a</code> is a pointer to an array, <code>a[low : high]</code> is shorthand for
<code>(*a)[low : high]</code>.
</p>

<p>
For arrays or strings, the indices are <i>in range</i> if
<code>0</code> &lt;= <code>low</code> &lt;= <code>high</code> &lt;= <code>len(a)</code>,
3076 3077
otherwise they are <i>out of range</i>.
For slices, the upper index bound is the slice capacity <code>cap(a)</code> rather than the length.
3078
A <a href="#Constants">constant</a> index must be non-negative and representable by a value of type
3079
<code>int</code>; for arrays or constant strings, constant indices must also be in range.
3080 3081
If both indices are constant, they must satisfy <code>low &lt;= high</code>.
If the indices are out of range at run time, a <a href="#Run_time_panics">run-time panic</a> occurs.
3082 3083
</p>

3084
<p>
3085 3086 3087
Except for <a href="#Constants">untyped strings</a>, if the sliced operand is a string or slice,
the result of the slice operation is a non-constant value of the same type as the operand.
For untyped string operands the result is a non-constant value of type <code>string</code>.
3088 3089
If the sliced operand is an array, it must be <a href="#Address_operators">addressable</a>
and the result of the slice operation is a slice with the same element type as the array.
Rob Pike's avatar
Rob Pike committed
3090
</p>
3091

3092 3093
<p>
If the sliced operand of a valid slice expression is a <code>nil</code> slice, the result
3094 3095
is a <code>nil</code> slice. Otherwise, the result shares its underlying array with the
operand.
3096
</p>
3097

Robert Griesemer's avatar
Robert Griesemer committed
3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138
<h4>Full slice expressions</h4>

<p>
For an array, pointer to array, or slice <code>a</code> (but not a string), the primary expression
</p>

<pre>
a[low : high : max]
</pre>

<p>
constructs a slice of the same type, and with the same length and elements as the simple slice
expression <code>a[low : high]</code>. Additionally, it controls the resulting slice's capacity
by setting it to <code>max - low</code>. Only the first index may be omitted; it defaults to 0.
After slicing the array <code>a</code>
</p>

<pre>
a := [5]int{1, 2, 3, 4, 5}
t := a[1:3:5]
</pre>

<p>
the slice <code>t</code> has type <code>[]int</code>, length 2, capacity 4, and elements
</p>

<pre>
t[0] == 2
t[1] == 3
</pre>

<p>
As for simple slice expressions, if <code>a</code> is a pointer to an array,
<code>a[low : high : max]</code> is shorthand for <code>(*a)[low : high : max]</code>.
If the sliced operand is an array, it must be <a href="#Address_operators">addressable</a>.
</p>

<p>
The indices are <i>in range</i> if <code>0 &lt;= low &lt;= high &lt;= max &lt;= cap(a)</code>,
otherwise they are <i>out of range</i>.
A <a href="#Constants">constant</a> index must be non-negative and representable by a value of type
3139
<code>int</code>; for arrays, constant indices must also be in range.
Robert Griesemer's avatar
Robert Griesemer committed
3140 3141 3142 3143 3144
If multiple indices are constant, the constants that are present must be in range relative to each
other.
If the indices are out of range at run time, a <a href="#Run_time_panics">run-time panic</a> occurs.
</p>

3145
<h3 id="Type_assertions">Type assertions</h3>
3146

Rob Pike's avatar
Rob Pike committed
3147
<p>
Robert Griesemer's avatar
Robert Griesemer committed
3148 3149
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
3150
</p>
3151

3152 3153 3154
<pre>
x.(T)
</pre>
3155

3156
<p>
Robert Griesemer's avatar
Robert Griesemer committed
3157
asserts that <code>x</code> is not <code>nil</code>
Russ Cox's avatar
Russ Cox committed
3158
and that the value stored in <code>x</code> is of type <code>T</code>.
3159
The notation <code>x.(T)</code> is called a <i>type assertion</i>.
Rob Pike's avatar
Rob Pike committed
3160 3161
</p>
<p>
3162
More precisely, if <code>T</code> is not an interface type, <code>x.(T)</code> asserts
3163 3164
that the dynamic type of <code>x</code> is <a href="#Type_identity">identical</a>
to the type <code>T</code>.
3165 3166 3167
In this case, <code>T</code> must <a href="#Method_sets">implement</a> the (interface) type of <code>x</code>;
otherwise the type assertion is invalid since it is not possible for <code>x</code>
to store a value of type <code>T</code>.
3168
If <code>T</code> is an interface type, <code>x.(T)</code> asserts that the dynamic type
3169
of <code>x</code> implements the interface <code>T</code>.
Rob Pike's avatar
Rob Pike committed
3170
</p>
3171
<p>
3172
If the type assertion holds, the value of the expression is the value
Rob Pike's avatar
Rob Pike committed
3173 3174 3175
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>
3176
is known only at run time, the type of <code>x.(T)</code> is
Rob Pike's avatar
Rob Pike committed
3177 3178
known to be <code>T</code> in a correct program.
</p>
3179 3180

<pre>
3181 3182
var x interface{} = 7          // x has dynamic type int and value 7
i := x.(int)                   // i has type int and value 7
3183 3184

type I interface { m() }
3185 3186 3187 3188 3189 3190

func f(y I) {
	s := y.(string)        // illegal: string does not implement I (missing method m)
	r := y.(io.Reader)     // r has type io.Reader and the dynamic type of y must implement both I and io.Reader

}
3191 3192
</pre>

3193
<p>
3194
A type assertion used in an <a href="#Assignments">assignment</a> or initialization of the special form
Rob Pike's avatar
Rob Pike committed
3195
</p>
3196

3197 3198 3199
<pre>
v, ok = x.(T)
v, ok := x.(T)
Rob Pike's avatar
Rob Pike committed
3200
var v, ok = x.(T)
3201
var v, ok T1 = x.(T)
3202
</pre>
3203

3204
<p>
3205 3206 3207
yields an additional untyped boolean value. The value of <code>ok</code> is <code>true</code>
if the assertion holds. Otherwise it is <code>false</code> and the value of <code>v</code> is
the <a href="#The_zero_value">zero value</a> for type <code>T</code>.
Rob Pike's avatar
Rob Pike committed
3208
No run-time panic occurs in this case.
Rob Pike's avatar
Rob Pike committed
3209
</p>
3210

3211

3212
<h3 id="Calls">Calls</h3>
3213

3214
<p>
Rob Pike's avatar
Rob Pike committed
3215 3216
Given an expression <code>f</code> of function type
<code>F</code>,
Rob Pike's avatar
Rob Pike committed
3217
</p>
3218

3219
<pre>
3220
f(a1, a2, … an)
3221
</pre>
3222

3223
<p>
3224
calls <code>f</code> with arguments <code>a1, a2, … an</code>.
3225
Except for one special case, arguments must be single-valued expressions
3226
<a href="#Assignability">assignable</a> to the parameter types of
Rob Pike's avatar
Rob Pike committed
3227 3228 3229 3230 3231 3232 3233
<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>
3234

3235
<pre>
3236
math.Atan2(x, y)  // function call
3237
var pt *Point
3238
pt.Scale(3.5)     // method call with receiver pt
3239
</pre>
3240

3241 3242 3243 3244 3245 3246 3247 3248 3249 3250
<p>
In a function call, the function value and arguments are evaluated in
<a href="#Order_of_evaluation">the usual order</a>.
After they are evaluated, the parameters of the call are passed by value to the function
and the called function begins execution.
The return parameters of the function are passed by value
back to the calling function when the function returns.
</p>

<p>
Hong Ruiqi's avatar
Hong Ruiqi committed
3251
Calling a <code>nil</code> function value
3252 3253 3254
causes a <a href="#Run_time_panics">run-time panic</a>.
</p>

3255
<p>
3256
As a special case, if the return values of a function or method
3257 3258
<code>g</code> are equal in number and individually
assignable to the parameters of another function or method
3259 3260 3261
<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
3262 3263
of <code>f</code> must contain no parameters other than the call of <code>g</code>,
and <code>g</code> must have at least one return value.
3264 3265 3266 3267 3268 3269 3270
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) {
3271
	return s[0:pos], s[pos:]
3272 3273 3274 3275 3276 3277 3278
}

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

if Join(Split(value, len(value)/2)) != value {
3279
	log.Panic("test fails")
3280 3281 3282
}
</pre>

Rob Pike's avatar
Rob Pike committed
3283
<p>
3284 3285
A method call <code>x.m()</code> is valid if the <a href="#Method_sets">method set</a>
of (the type of) <code>x</code> contains <code>m</code> and the
3286
argument list can be assigned to the parameter list of <code>m</code>.
Rob Pike's avatar
Rob Pike committed
3287
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
3288 3289
set contains <code>m</code>, <code>x.m()</code> is shorthand
for <code>(&amp;x).m()</code>:
Rob Pike's avatar
Rob Pike committed
3290
</p>
3291

3292
<pre>
3293
var p Point
Rob Pike's avatar
Rob Pike committed
3294
p.Scale(3.5)
3295
</pre>
3296

3297
<p>
3298
There is no distinct method type and there are no method literals.
Rob Pike's avatar
Rob Pike committed
3299
</p>
3300

3301
<h3 id="Passing_arguments_to_..._parameters">Passing arguments to <code>...</code> parameters</h3>
3302

Rob Pike's avatar
Rob Pike committed
3303
<p>
3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314
If <code>f</code> is <a href="#Function_types">variadic</a> with a final
parameter <code>p</code> of type <code>...T</code>, then within <code>f</code>
the type of <code>p</code> is equivalent to type <code>[]T</code>.
If <code>f</code> is invoked with no actual arguments for <code>p</code>,
the value passed to <code>p</code> is <code>nil</code>.
Otherwise, the value passed is a new slice
of type <code>[]T</code> with a new underlying array whose successive elements
are the actual arguments, which all must be <a href="#Assignability">assignable</a>
to <code>T</code>. The length and capacity of the slice is therefore
the number of arguments bound to <code>p</code> and may differ for each
call site.
3315
</p>
3316

Rob Pike's avatar
Rob Pike committed
3317
<p>
3318
Given the function and calls
3319 3320
</p>
<pre>
3321
func Greeting(prefix string, who ...string)
3322
Greeting("nobody")
3323 3324 3325 3326
Greeting("hello:", "Joe", "Anna", "Eileen")
</pre>

<p>
Robert Griesemer's avatar
Robert Griesemer committed
3327
within <code>Greeting</code>, <code>who</code> will have the value
3328 3329
<code>nil</code> in the first call, and
<code>[]string{"Joe", "Anna", "Eileen"}</code> in the second.
3330 3331
</p>

Robert Griesemer's avatar
Robert Griesemer committed
3332
<p>
3333 3334 3335
If the final argument is assignable to a slice type <code>[]T</code>, it may be
passed unchanged as the value for a <code>...T</code> parameter if the argument
is followed by <code>...</code>. In this case no new slice is created.
Robert Griesemer's avatar
Robert Griesemer committed
3336
</p>
3337 3338

<p>
Robert Griesemer's avatar
Robert Griesemer committed
3339
Given the slice <code>s</code> and call
3340
</p>
3341

Robert Griesemer's avatar
Robert Griesemer committed
3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352
<pre>
s := []string{"James", "Jasmine"}
Greeting("goodbye:", s...)
</pre>

<p>
within <code>Greeting</code>, <code>who</code> will have the same value as <code>s</code>
with the same underlying array.
</p>


3353
<h3 id="Operators">Operators</h3>
3354

Rob Pike's avatar
Rob Pike committed
3355
<p>
3356
Operators combine operands into expressions.
Rob Pike's avatar
Rob Pike committed
3357
</p>
3358

3359
<pre class="ebnf">
3360
Expression = UnaryExpr | Expression binary_op Expression .
Rob Pike's avatar
Rob Pike committed
3361
UnaryExpr  = PrimaryExpr | unary_op UnaryExpr .
3362

3363
binary_op  = "||" | "&amp;&amp;" | rel_op | add_op | mul_op .
Rob Pike's avatar
Rob Pike committed
3364 3365
rel_op     = "==" | "!=" | "&lt;" | "&lt;=" | ">" | ">=" .
add_op     = "+" | "-" | "|" | "^" .
Robert Griesemer's avatar
Robert Griesemer committed
3366
mul_op     = "*" | "/" | "%" | "&lt;&lt;" | "&gt;&gt;" | "&amp;" | "&amp;^" .
3367

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

3371
<p>
3372
Comparisons are discussed <a href="#Comparison_operators">elsewhere</a>.
3373
For other binary operators, the operand types must be <a href="#Type_identity">identical</a>
3374
unless the operation involves shifts or untyped <a href="#Constants">constants</a>.
3375 3376
For operations involving constants only, see the section on
<a href="#Constant_expressions">constant expressions</a>.
Rob Pike's avatar
Rob Pike committed
3377
</p>
3378

3379
<p>
3380
Except for shift operations, if one operand is an untyped <a href="#Constants">constant</a>
3381 3382
and the other operand is not, the constant is <a href="#Conversions">converted</a>
to the type of the other operand.
3383
</p>
3384

3385
<p>
3386
The right operand in a shift expression must have unsigned integer type
3387
or be an untyped constant representable by a value of type <code>uint</code>.
3388
If the left operand of a non-constant shift expression is an untyped constant,
3389
it is first converted to the type it would assume if the shift expression were
3390
replaced by its left operand alone.
3391
</p>
3392

3393
<pre>
3394
var s uint = 33
3395 3396 3397
var i = 1&lt;&lt;s           // 1 has type int
var j int32 = 1&lt;&lt;s     // 1 has type int32; j == 0
var k = uint64(1&lt;&lt;s)   // 1 has type uint64; k == 1&lt;&lt;33
3398 3399
var m int = 1.0&lt;&lt;s     // 1.0 has type int; m == 0 if ints are 32bits in size
var n = 1.0&lt;&lt;s == j    // 1.0 has type int32; n == true
Robert Griesemer's avatar
Robert Griesemer committed
3400
var o = 1&lt;&lt;s == 2&lt;&lt;s   // 1 and 2 have type int; o == true if ints are 32bits in size
3401
var p = 1&lt;&lt;s == 1&lt;&lt;33  // illegal if ints are 32bits in size: 1 has type int, but 1&lt;&lt;33 overflows int
3402
var u = 1.0&lt;&lt;s         // illegal: 1.0 has type float64, cannot shift
3403 3404
var u1 = 1.0&lt;&lt;s != 0   // illegal: 1.0 has type float64, cannot shift
var u2 = 1&lt;&lt;s != 1.0   // illegal: 1 has type float64, cannot shift
3405
var v float32 = 1&lt;&lt;s   // illegal: 1 has type float32, cannot shift
Robert Griesemer's avatar
Robert Griesemer committed
3406
var w int64 = 1.0&lt;&lt;33  // 1.0&lt;&lt;33 is a constant shift expression
3407
</pre>
3408

3409 3410

<h4 id="Operator_precedence">Operator precedence</h4>
3411
<p>
Russ Cox's avatar
Russ Cox committed
3412 3413
Unary operators have the highest precedence.
As the  <code>++</code> and <code>--</code> operators form
Rob Pike's avatar
Rob Pike committed
3414
statements, not expressions, they fall
Russ Cox's avatar
Russ Cox committed
3415
outside the operator hierarchy.
Rob Pike's avatar
Rob Pike committed
3416 3417
As a consequence, statement <code>*p++</code> is the same as <code>(*p)++</code>.
<p>
3418
There are five precedence levels for binary operators.
Rob Pike's avatar
Rob Pike committed
3419
Multiplication operators bind strongest, followed by addition
3420 3421
operators, comparison operators, <code>&amp;&amp;</code> (logical AND),
and finally <code>||</code> (logical OR):
Rob Pike's avatar
Rob Pike committed
3422
</p>
3423

Rob Pike's avatar
Rob Pike committed
3424
<pre class="grammar">
3425
Precedence    Operator
3426 3427
    5             *  /  %  &lt;&lt;  &gt;&gt;  &amp;  &amp;^
    4             +  -  |  ^
3428
    3             ==  !=  &lt;  &lt;=  &gt;  &gt;=
3429 3430 3431
    2             &amp;&amp;
    1             ||
</pre>
3432

Rob Pike's avatar
Rob Pike committed
3433
<p>
3434
Binary operators of the same precedence associate from left to right.
3435
For instance, <code>x / y * z</code> is the same as <code>(x / y) * z</code>.
Rob Pike's avatar
Rob Pike committed
3436
</p>
3437

3438 3439 3440 3441
<pre>
+x
23 + 3*x[i]
x &lt;= f()
Robert Griesemer's avatar
Robert Griesemer committed
3442
^a &gt;&gt; b
3443
f() || g()
3444
x == y+1 &amp;&amp; &lt;-chanPtr &gt; 0
3445
</pre>
3446 3447


3448
<h3 id="Arithmetic_operators">Arithmetic operators</h3>
3449
<p>
3450
Arithmetic operators apply to numeric values and yield a result of the same
Rob Pike's avatar
Rob Pike committed
3451
type as the first operand. The four standard arithmetic operators (<code>+</code>,
3452 3453 3454
<code>-</code>, <code>*</code>, <code>/</code>) apply to integer,
floating-point, and complex types; <code>+</code> also applies to strings.
The bitwise logical and shift operators apply to integers only.
Rob Pike's avatar
Rob Pike committed
3455
</p>
3456

Rob Pike's avatar
Rob Pike committed
3457
<pre class="grammar">
Rob Pike's avatar
Rob Pike committed
3458 3459 3460 3461
+    sum                    integers, floats, complex values, strings
-    difference             integers, floats, complex values
*    product                integers, floats, complex values
/    quotient               integers, floats, complex values
3462
%    remainder              integers
3463

3464 3465 3466 3467
&amp;    bitwise AND            integers
|    bitwise OR             integers
^    bitwise XOR            integers
&amp;^   bit clear (AND NOT)    integers
3468

Robert Griesemer's avatar
Robert Griesemer committed
3469 3470
&lt;&lt;   left shift             integer &lt;&lt; unsigned integer
&gt;&gt;   right shift            integer &gt;&gt; unsigned integer
3471
</pre>
3472 3473


3474
<h4 id="Integer_operators">Integer operators</h4>
3475

Rob Pike's avatar
Rob Pike committed
3476
<p>
3477 3478 3479
For two integer values <code>x</code> and <code>y</code>, the integer quotient
<code>q = x / y</code> and remainder <code>r = x % y</code> satisfy the following
relationships:
Rob Pike's avatar
Rob Pike committed
3480
</p>
3481

3482
<pre>
3483
x = q*y + r  and  |r| &lt; |y|
3484
</pre>
3485

Rob Pike's avatar
Rob Pike committed
3486
<p>
3487 3488
with <code>x / y</code> truncated towards zero
(<a href="http://en.wikipedia.org/wiki/Modulo_operation">"truncated division"</a>).
Rob Pike's avatar
Rob Pike committed
3489
</p>
3490

3491 3492 3493 3494 3495 3496 3497
<pre>
 x     y     x / y     x % y
 5     3       1         2
-5     3      -1        -2
 5    -3      -1         2
-5    -3       1        -2
</pre>
3498

3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512
<p>
As an exception to this rule, if the dividend <code>x</code> is the most
negative value for the int type of <code>x</code>, the quotient
<code>q = x / -1</code> is equal to <code>x</code> (and <code>r = 0</code>).
</p>

<pre>
			 x, q
int8                     -128
int16                  -32768
int32             -2147483648
int64    -9223372036854775808
</pre>

Rob Pike's avatar
Rob Pike committed
3513
<p>
3514 3515
If the divisor is a <a href="#Constants">constant</a>, it must not be zero.
If the divisor is zero at run time, a <a href="#Run_time_panics">run-time panic</a> occurs.
3516
If the dividend is non-negative and the divisor is a constant power of 2,
3517
the division may be replaced by a right shift, and computing the remainder may
3518
be replaced by a bitwise AND operation:
Rob Pike's avatar
Rob Pike committed
3519
</p>
3520

3521
<pre>
Robert Griesemer's avatar
Robert Griesemer committed
3522
 x     x / 4     x % 4     x &gt;&gt; 2     x &amp; 3
3523 3524 3525
 11      2         3         2          3
-11     -2        -3        -3          1
</pre>
3526

Rob Pike's avatar
Rob Pike committed
3527
<p>
3528 3529
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
3530 3531
integer and logical shifts if it is an unsigned integer.
There is no upper limit on the shift count. Shifts behave
Rob Pike's avatar
Rob Pike committed
3532 3533
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
3534 3535
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
3536
<code>x/2</code> but truncated towards negative infinity.
Rob Pike's avatar
Rob Pike committed
3537
</p>
3538

Rob Pike's avatar
Rob Pike committed
3539 3540 3541
<p>
For integer operands, the unary operators
<code>+</code>, <code>-</code>, and <code>^</code> are defined as
Robert Griesemer's avatar
Robert Griesemer committed
3542
follows:
Rob Pike's avatar
Rob Pike committed
3543
</p>
3544

Rob Pike's avatar
Rob Pike committed
3545
<pre class="grammar">
3546 3547
+x                          is 0 + x
-x    negation              is 0 - x
Russ Cox's avatar
Russ Cox committed
3548 3549
^x    bitwise complement    is m ^ x  with m = "all bits set to 1" for unsigned x
                                      and  m = -1 for signed x
3550
</pre>
Robert Griesemer's avatar
Robert Griesemer committed
3551 3552


3553
<h4 id="Integer_overflow">Integer overflow</h4>
Robert Griesemer's avatar
Robert Griesemer committed
3554

Rob Pike's avatar
Rob Pike committed
3555 3556 3557 3558
<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
3559 3560
the <a href="#Numeric_types">unsigned integer</a>'s type.
Loosely speaking, these unsigned integer operations
Robert Griesemer's avatar
Robert Griesemer committed
3561
discard high bits upon overflow, and programs may rely on ``wrap around''.
Rob Pike's avatar
Rob Pike committed
3562
</p>
3563
<p>
Rob Pike's avatar
Rob Pike committed
3564 3565
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
3566 3567
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
3568
No exception is raised as a result of overflow. A
Robert Griesemer's avatar
Robert Griesemer committed
3569
compiler may not optimize code under the assumption that overflow does
Rob Pike's avatar
Rob Pike committed
3570 3571
not occur. For instance, it may not assume that <code>x &lt; x + 1</code> is always true.
</p>
3572 3573


3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584
<h4 id="Floating_point_operators">Floating-point operators</h4>

<p>
For floating-point and complex numbers,
<code>+x</code> is the same as <code>x</code>,
while <code>-x</code> is the negation of <code>x</code>.
The result of a floating-point or complex division by zero is not specified beyond the
IEEE-754 standard; whether a <a href="#Run_time_panics">run-time panic</a>
occurs is implementation-specific.
</p>

3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611
<p>
An implementation may combine multiple floating-point operations into a single
fused operation, possibly across statements, and produce a result that differs
from the value obtained by executing and rounding the instructions individually.
A floating-point type <a href="#Conversions">conversion</a> explicitly rounds to
the precision of the target type, preventing fusion that would discard that rounding.
</p>

<p>
For instance, some architectures provide a "fused multiply and add" (FMA) instruction
that computes <code>x*y + z</code> without rounding the intermediate result <code>x*y</code>.
These examples show when a Go implementation can use that instruction:
</p>

<pre>
// FMA allowed for computing r, because x*y is not explicitly rounded:
r  = x*y + z
r  = z;   r += x*y
t  = x*y; r = t + z
*p = x*y; r = *p + z
r  = x*y + float64(z)

// FMA disallowed for computing r, because it would omit rounding of x*y:
r  = float64(x*y) + z
r  = z; r += float64(x*y)
t  = float64(x*y); r = t + z
</pre>
3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629

<h4 id="String_concatenation">String concatenation</h4>

<p>
Strings can be concatenated using the <code>+</code> operator
or the <code>+=</code> assignment operator:
</p>

<pre>
s := "hi" + string(c)
s += " and good bye"
</pre>

<p>
String addition creates a new string by concatenating the operands.
</p>


3630
<h3 id="Comparison_operators">Comparison operators</h3>
3631

Rob Pike's avatar
Rob Pike committed
3632
<p>
3633
Comparison operators compare two operands and yield an untyped boolean value.
Rob Pike's avatar
Rob Pike committed
3634
</p>
3635

Rob Pike's avatar
Rob Pike committed
3636
<pre class="grammar">
3637 3638
==    equal
!=    not equal
Anthony Martin's avatar
Anthony Martin committed
3639 3640
&lt;     less
&lt;=    less or equal
3641 3642
&gt;     greater
&gt;=    greater or equal
3643
</pre>
3644

Rob Pike's avatar
Rob Pike committed
3645
<p>
3646
In any comparison, the first operand
3647 3648
must be <a href="#Assignability">assignable</a>
to the type of the second operand, or vice versa.
Rob Pike's avatar
Rob Pike committed
3649
</p>
3650
<p>
3651 3652 3653 3654 3655
The equality operators <code>==</code> and <code>!=</code> apply
to operands that are <i>comparable</i>.
The ordering operators <code>&lt;</code>, <code>&lt;=</code>, <code>&gt;</code>, and <code>&gt;=</code>
apply to operands that are <i>ordered</i>.
These terms and the result of the comparisons are defined as follows:
Rob Pike's avatar
Rob Pike committed
3656
</p>
3657

3658 3659
<ul>
	<li>
3660 3661 3662
	Boolean values are comparable.
	Two boolean values are equal if they are either both
	<code>true</code> or both <code>false</code>.
3663
	</li>
3664

3665
	<li>
3666
	Integer values are comparable and ordered, in the usual way.
3667
	</li>
Hong Ruiqi's avatar
Hong Ruiqi committed
3668

3669
	<li>
3670
	Floating-point values are comparable and ordered,
3671
	as defined by the IEEE-754 standard.
3672
	</li>
Hong Ruiqi's avatar
Hong Ruiqi committed
3673

3674
	<li>
3675 3676 3677 3678
	Complex values are comparable.
	Two complex values <code>u</code> and <code>v</code> are
	equal if both <code>real(u) == real(v)</code> and
	<code>imag(u) == imag(v)</code>.
3679
	</li>
Hong Ruiqi's avatar
Hong Ruiqi committed
3680

3681
	<li>
3682
	String values are comparable and ordered, lexically byte-wise.
3683
	</li>
Hong Ruiqi's avatar
Hong Ruiqi committed
3684

3685
	<li>
3686
	Pointer values are comparable.
3687 3688
	Two pointer values are equal if they point to the same variable or if both have value <code>nil</code>.
	Pointers to distinct <a href="#Size_and_alignment_guarantees">zero-size</a> variables may or may not be equal.
3689
	</li>
Hong Ruiqi's avatar
Hong Ruiqi committed
3690

3691
	<li>
3692
	Channel values are comparable.
3693 3694
	Two channel values are equal if they were created by the same call to
	<a href="#Making_slices_maps_and_channels"><code>make</code></a>
3695
	or if both have value <code>nil</code>.
3696
	</li>
3697

3698
	<li>
3699 3700 3701
	Interface values are comparable.
	Two interface values are equal if they have <a href="#Type_identity">identical</a> dynamic types
	and equal dynamic values or if both have value <code>nil</code>.
3702
	</li>
Hong Ruiqi's avatar
Hong Ruiqi committed
3703

3704
	<li>
3705 3706 3707 3708 3709 3710
	A value <code>x</code> of non-interface type <code>X</code> and
	a value <code>t</code> of interface type <code>T</code> are comparable when values
	of type <code>X</code> are comparable and
	<code>X</code> implements <code>T</code>.
	They are equal if <code>t</code>'s dynamic type is identical to <code>X</code>
	and <code>t</code>'s dynamic value is equal to <code>x</code>.
3711
	</li>
3712

3713
	<li>
3714 3715 3716
	Struct values are comparable if all their fields are comparable.
	Two struct values are equal if their corresponding
	non-<a href="#Blank_identifier">blank</a> fields are equal.
3717
	</li>
Hong Ruiqi's avatar
Hong Ruiqi committed
3718

3719
	<li>
3720 3721
	Array values are comparable if values of the array element type are comparable.
	Two array values are equal if their corresponding elements are equal.
3722 3723 3724
	</li>
</ul>

3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739
<p>
A comparison of two interface values with identical dynamic types
causes a <a href="#Run_time_panics">run-time panic</a> if values
of that type are not comparable.  This behavior applies not only to direct interface
value comparisons but also when comparing arrays of interface values
or structs with interface-valued fields.
</p>

<p>
Slice, map, and function values are not comparable.
However, as a special case, a slice, map, or function value may
be compared to the predeclared identifier <code>nil</code>.
Comparison of pointer, channel, and interface values to <code>nil</code>
is also allowed and follows from the general rules above.
</p>
3740

3741
<pre>
3742
const c = 3 &lt; 4            // c is the untyped boolean constant true
3743

3744
type MyBool bool
3745 3746
var x, y int
var (
3747
	// The result of a comparison is an untyped boolean.
3748 3749 3750 3751
	// The usual assignment rules apply.
	b3        = x == y // b3 has type bool
	b4 bool   = x == y // b4 has type bool
	b5 MyBool = x == y // b5 has type MyBool
3752 3753 3754
)
</pre>

3755
<h3 id="Logical_operators">Logical operators</h3>
3756

Rob Pike's avatar
Rob Pike committed
3757
<p>
3758 3759
Logical operators apply to <a href="#Boolean_types">boolean</a> values
and yield a result of the same type as the operands.
3760
The right operand is evaluated conditionally.
Rob Pike's avatar
Rob Pike committed
3761
</p>
3762

Rob Pike's avatar
Rob Pike committed
3763
<pre class="grammar">
3764 3765 3766
&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"
3767
</pre>
3768 3769


3770
<h3 id="Address_operators">Address operators</h3>
3771

Rob Pike's avatar
Rob Pike committed
3772
<p>
3773 3774 3775
For an operand <code>x</code> of type <code>T</code>, the address operation
<code>&amp;x</code> generates a pointer of type <code>*T</code> to <code>x</code>.
The operand must be <i>addressable</i>,
3776
that is, either a variable, pointer indirection, or slice indexing
3777
operation; or a field selector of an addressable struct operand;
3778
or an array indexing operation of an addressable array.
3779
As an exception to the addressability requirement, <code>x</code> may also be a
3780
(possibly parenthesized)
3781
<a href="#Composite_literals">composite literal</a>.
3782
If the evaluation of <code>x</code> would cause a <a href="#Run_time_panics">run-time panic</a>,
3783
then the evaluation of <code>&amp;x</code> does too.
3784
</p>
Russ Cox's avatar
Russ Cox committed
3785

3786 3787
<p>
For an operand <code>x</code> of pointer type <code>*T</code>, the pointer
Robert Griesemer's avatar
Robert Griesemer committed
3788
indirection <code>*x</code> denotes the <a href="#Variables">variable</a> of type <code>T</code> pointed
3789
to by <code>x</code>.
3790 3791
If <code>x</code> is <code>nil</code>, an attempt to evaluate <code>*x</code>
will cause a <a href="#Run_time_panics">run-time panic</a>.
Rob Pike's avatar
Rob Pike committed
3792 3793 3794 3795 3796
</p>

<pre>
&amp;x
&amp;a[f(2)]
3797
&amp;Point{2, 3}
Rob Pike's avatar
Rob Pike committed
3798 3799
*p
*pf(x)
Russ Cox's avatar
Russ Cox committed
3800 3801 3802

var x *int = nil
*x   // causes a run-time panic
3803
&amp;*x  // causes a run-time panic
Rob Pike's avatar
Rob Pike committed
3804 3805
</pre>

Rob Pike's avatar
Rob Pike committed
3806

3807
<h3 id="Receive_operator">Receive operator</h3>
3808

Rob Pike's avatar
Rob Pike committed
3809
<p>
3810 3811
For an operand <code>ch</code> of <a href="#Channel_types">channel type</a>,
the value of the receive operation <code>&lt;-ch</code> is the value received
3812 3813 3814
from the channel <code>ch</code>. The channel direction must permit receive operations,
and the type of the receive operation is the element type of the channel.
The expression blocks until a value is available.
3815
Receiving from a <code>nil</code> channel blocks forever.
3816
A receive operation on a <a href="#Close">closed</a> channel can always proceed
3817 3818
immediately, yielding the element type's <a href="#The_zero_value">zero value</a>
after any previously sent values have been received.
Rob Pike's avatar
Rob Pike committed
3819
</p>
3820

3821
<pre>
3822 3823 3824
v1 := &lt;-ch
v2 = &lt;-ch
f(&lt;-ch)
3825
&lt;-strobe  // wait until clock pulse and discard received value
3826
</pre>
3827

Rob Pike's avatar
Rob Pike committed
3828
<p>
3829
A receive expression used in an <a href="#Assignments">assignment</a> or initialization of the special form
Rob Pike's avatar
Rob Pike committed
3830
</p>
3831

3832
<pre>
3833 3834 3835
x, ok = &lt;-ch
x, ok := &lt;-ch
var x, ok = &lt;-ch
3836
var x, ok T = &lt;-ch
3837
</pre>
3838

Rob Pike's avatar
Rob Pike committed
3839
<p>
3840
yields an additional untyped boolean result reporting whether the
3841 3842 3843 3844
communication succeeded. The value of <code>ok</code> is <code>true</code>
if the value received was delivered by a successful send operation to the
channel, or <code>false</code> if it is a zero value generated because the
channel is closed and empty.
Rob Pike's avatar
Rob Pike committed
3845
</p>
3846

3847

3848 3849 3850 3851 3852 3853 3854 3855 3856
<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">
3857
Conversion = Type "(" Expression [ "," ] ")" .
3858 3859 3860
</pre>

<p>
3861
If the type starts with the operator <code>*</code> or <code>&lt;-</code>,
3862 3863 3864
or if the type starts with the keyword <code>func</code>
and has no result list, it must be parenthesized when
necessary to avoid ambiguity:
3865 3866 3867 3868
</p>

<pre>
*Point(p)        // same as *(Point(p))
3869
(*Point)(p)      // p is converted to *Point
3870
&lt;-chan int(c)    // same as &lt;-(chan int(c))
3871
(&lt;-chan int)(c)  // c is converted to &lt;-chan int
3872
func()(x)        // function signature func() x
3873 3874 3875
(func())(x)      // x is converted to func()
(func() int)(x)  // x is converted to func() int
func() int(x)    // x is converted to func() int (unambiguous)
3876 3877 3878
</pre>

<p>
3879 3880 3881 3882 3883 3884 3885 3886 3887
A <a href="#Constants">constant</a> value <code>x</code> can be converted to
type <code>T</code> in any of these cases:
</p>

<ul>
	<li>
	<code>x</code> is representable by a value of type <code>T</code>.
	</li>
	<li>
3888 3889 3890 3891
	<code>x</code> is a floating-point constant,
	<code>T</code> is a floating-point type,
	and <code>x</code> is representable by a value
	of type <code>T</code> after rounding using
3892 3893
	IEEE 754 round-to-even rules, but with an IEEE <code>-0.0</code>
	further rounded to an unsigned <code>0.0</code>.
3894 3895 3896
	The constant <code>T(x)</code> is the rounded value.
	</li>
	<li>
3897 3898
	<code>x</code> is an integer constant and <code>T</code> is a
	<a href="#String_types">string type</a>.
3899 3900
	The <a href="#Conversions_to_and_from_a_string_type">same rule</a>
	as for non-constant <code>x</code> applies in this case.
3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911
	</li>
</ul>

<p>
Converting a constant yields a typed constant as result.
</p>

<pre>
uint(iota)               // iota value of type uint
float32(2.718281828)     // 2.718281828 of type float32
complex128(1)            // 1.0 + 0.0i of type complex128
3912
float32(0.49999999)      // 0.5 of type float32
3913
float64(-1e-1000)        // 0.0 of type float64
3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925
string('x')              // "x" of type string
string(0x266c)           // "♬" of type string
MyString("foo" + "bar")  // "foobar" of type MyString
string([]byte{'a'})      // not a constant: []byte{'a'} is not a constant
(*int)(nil)              // not a constant: nil is not a constant, *int is not a boolean, numeric, or string type
int(1.2)                 // illegal: 1.2 cannot be represented as an int
string(65.0)             // illegal: 65.0 is not an integer constant
</pre>

<p>
A non-constant value <code>x</code> can be converted to type <code>T</code>
in any of these cases:
3926
</p>
3927

3928 3929
<ul>
	<li>
3930
	<code>x</code> is <a href="#Assignability">assignable</a>
3931 3932 3933
	to <code>T</code>.
	</li>
	<li>
3934 3935
	ignoring struct tags (see below),
	<code>x</code>'s type and <code>T</code> have <a href="#Type_identity">identical</a>
3936 3937 3938
	<a href="#Types">underlying types</a>.
	</li>
	<li>
3939
	ignoring struct tags (see below),
3940 3941
	<code>x</code>'s type and <code>T</code> are pointer types
	that are not <a href="#Type_definitions">defined types</a>,
3942 3943 3944 3945 3946 3947 3948 3949 3950 3951
	and their pointer base types have identical underlying types.
	</li>
	<li>
	<code>x</code>'s type and <code>T</code> are both integer or floating
	point types.
	</li>
	<li>
	<code>x</code>'s type and <code>T</code> are both complex types.
	</li>
	<li>
3952 3953
	<code>x</code> is an integer or a slice of bytes or runes
	and <code>T</code> is a string type.
3954 3955
	</li>
	<li>
3956
	<code>x</code> is a string and <code>T</code> is a slice of bytes or runes.
3957 3958
	</li>
</ul>
3959

3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984
<p>
<a href="#Struct_types">Struct tags</a> are ignored when comparing struct types
for identity for the purpose of conversion:
</p>

<pre>
type Person struct {
	Name    string
	Address *struct {
		Street string
		City   string
	}
}

var data *struct {
	Name    string `json:"name"`
	Address *struct {
		Street string `json:"street"`
		City   string `json:"city"`
	} `json:"address"`
}

var person = (*Person)(data)  // ignoring tags, the underlying types are identical
</pre>

3985
<p>
3986 3987
Specific rules apply to (non-constant) conversions between numeric types or
to and from a string type.
3988 3989 3990 3991
These conversions may change the representation of <code>x</code>
and incur a run-time cost.
All other conversions only change the type but not the representation
of <code>x</code>.
3992 3993
</p>

3994 3995 3996 3997 3998 3999 4000
<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>

4001
<h4>Conversions between numeric types</h4>
4002 4003 4004 4005 4006

<p>
For the conversion of non-constant numeric values, the following rules apply:
</p>

4007
<ol>
4008
<li>
4009 4010 4011 4012 4013
When converting between integer types, if the value is a signed integer, it is
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>v := uint16(0x10F0)</code>, then <code>uint32(int8(v)) == 0xFFFFFFF0</code>.
The conversion always yields a valid value; there is no indication of overflow.
4014 4015
</li>
<li>
4016 4017
When converting a floating-point number to an integer, the fraction is discarded
(truncation towards zero).
4018
</li>
Rob Pike's avatar
Rob Pike committed
4019
<li>
4020 4021
When converting an integer or floating-point number to a floating-point type,
or a complex number to another complex type, the result value is rounded
Rob Pike's avatar
Rob Pike committed
4022
to the precision specified by the destination type.
4023 4024 4025 4026
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
Evan Shaw's avatar
Evan Shaw committed
4027
of precision, but <code>float32(x + 0.1)</code> does not.
4028
</li>
4029 4030 4031
</ol>

<p>
4032
In all non-constant conversions involving floating-point or complex values,
Rob Pike's avatar
Rob Pike committed
4033
if the result type cannot represent the value the conversion
4034
succeeds but the result value is implementation-dependent.
4035 4036
</p>

4037
<h4 id="Conversions_to_and_from_a_string_type">Conversions to and from a string type</h4>
4038

4039
<ol>
4040
<li>
4041
Converting a signed or unsigned integer value to a string type yields a
4042 4043
string containing the UTF-8 representation of the integer. Values outside
the range of valid Unicode code points are converted to <code>"\uFFFD"</code>.
4044 4045

<pre>
4046
string('a')       // "a"
4047
string(-1)        // "\ufffd" == "\xef\xbf\xbd"
4048
string(0xf8)      // "\u00f8" == "ø" == "\xc3\xb8"
4049
type MyString string
4050
MyString(0x65e5)  // "\u65e5" == "日" == "\xe6\x97\xa5"
4051 4052 4053 4054
</pre>
</li>

<li>
4055
Converting a slice of bytes to a string type yields
4056
a string whose successive bytes are the elements of the slice.
4057 4058

<pre>
4059 4060 4061
string([]byte{'h', 'e', 'l', 'l', '\xc3', '\xb8'})   // "hellø"
string([]byte{})                                     // ""
string([]byte(nil))                                  // ""
4062 4063 4064

type MyBytes []byte
string(MyBytes{'h', 'e', 'l', 'l', '\xc3', '\xb8'})  // "hellø"
4065 4066
</pre>
</li>
4067

4068
<li>
4069
Converting a slice of runes to a string type yields
4070
a string that is the concatenation of the individual rune values
4071
converted to strings.
4072

4073
<pre>
4074 4075 4076
string([]rune{0x767d, 0x9d6c, 0x7fd4})   // "\u767d\u9d6c\u7fd4" == "白鵬翔"
string([]rune{})                         // ""
string([]rune(nil))                      // ""
4077 4078 4079

type MyRunes []rune
string(MyRunes{0x767d, 0x9d6c, 0x7fd4})  // "\u767d\u9d6c\u7fd4" == "白鵬翔"
4080
</pre>
4081 4082 4083
</li>

<li>
4084
Converting a value of a string type to a slice of bytes type
4085 4086 4087
yields a slice whose successive elements are the bytes of the string.

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

4091
MyBytes("hellø")  // []byte{'h', 'e', 'l', 'l', '\xc3', '\xb8'}
4092 4093
</pre>
</li>
4094

4095
<li>
4096 4097
Converting a value of a string type to a slice of runes type
yields a slice containing the individual Unicode code points of the string.
4098

4099
<pre>
4100
[]rune(MyString("白鵬翔"))  // []rune{0x767d, 0x9d6c, 0x7fd4}
4101 4102
[]rune("")                 // []rune{}

4103
MyRunes("白鵬翔")           // []rune{0x767d, 0x9d6c, 0x7fd4}
4104 4105
</pre>
</li>
4106
</ol>
4107 4108


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

4111
<p>
4112
Constant expressions may contain only <a href="#Constants">constant</a>
4113
operands and are evaluated at compile time.
4114
</p>
Robert Griesemer's avatar
Robert Griesemer committed
4115

4116
<p>
4117 4118
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,
4119 4120
respectively.
Except for shift operations, if the operands of a binary operation are
4121
different kinds of untyped constants, the operation and, for non-boolean operations, the result use
4122
the kind that appears later in this list: integer, rune, floating-point, complex.
4123 4124
For example, an untyped integer constant divided by an
untyped complex constant yields an untyped complex constant.
4125
</p>
4126 4127

<p>
4128
A constant <a href="#Comparison_operators">comparison</a> always yields
4129
an untyped boolean constant.  If the left operand of a constant
4130 4131
<a href="#Operators">shift expression</a> is an untyped constant, the
result is an integer constant; otherwise it is a constant of the same
4132 4133
type as the left operand, which must be of
<a href="#Numeric_types">integer type</a>.
4134
Applying all other operators to untyped constants results in an untyped
Rob Pike's avatar
Rob Pike committed
4135
constant of the same kind (that is, a boolean, integer, floating-point,
4136
complex, or string constant).
4137 4138
</p>

4139
<pre>
4140 4141 4142
const a = 2 + 3.0          // a == 5.0   (untyped floating-point constant)
const b = 15 / 4           // b == 3     (untyped integer constant)
const c = 15 / 4.0         // c == 3.75  (untyped floating-point constant)
4143 4144
const Θ float64 = 3/2      // Θ == 1.0   (type float64, 3/2 is integer division)
const Π float64 = 3/2.     // Π == 1.5   (type float64, 3/2. is float division)
4145 4146
const d = 1 &lt;&lt; 3.0         // d == 8     (untyped integer constant)
const e = 1.0 &lt;&lt; 3         // e == 8     (untyped integer constant)
Robert Griesemer's avatar
Robert Griesemer committed
4147
const f = int32(1) &lt;&lt; 33   // illegal    (constant 8589934592 overflows int32)
4148
const g = float64(2) &gt;&gt; 1  // illegal    (float64(2) is a typed floating-point constant)
4149 4150
const h = "foo" &gt; "bar"    // h == true  (untyped boolean constant)
const j = true             // j == true  (untyped boolean constant)
4151
const k = 'w' + 1          // k == 'x'   (untyped rune constant)
4152 4153
const l = "hi"             // l == "hi"  (untyped string constant)
const m = string(k)        // m == "x"   (type string)
4154
const Σ = 1 - 0.707i       //            (untyped complex constant)
4155 4156
const Δ = Σ + 2.0e-4       //            (untyped complex constant)
const Φ = iota*1i - 1/1i   //            (untyped complex constant)
4157 4158
</pre>

Rob Pike's avatar
Rob Pike committed
4159
<p>
4160
Applying the built-in function <code>complex</code> to untyped
4161
integer, rune, or floating-point constants yields
4162
an untyped complex constant.
Rob Pike's avatar
Rob Pike committed
4163 4164 4165
</p>

<pre>
4166
const ic = complex(0, c)   // ic == 3.75i  (untyped complex constant)
4167
const iΘ = complex(0, Θ)   // iΘ == 1i     (type complex128)
Rob Pike's avatar
Rob Pike committed
4168 4169
</pre>

4170
<p>
4171 4172 4173
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:
4174 4175 4176
</p>

<pre>
4177 4178
const Huge = 1 &lt;&lt; 100         // Huge == 1267650600228229401496703205376  (untyped integer constant)
const Four int8 = Huge &gt;&gt; 98  // Four == 4                                (type int8)
4179
</pre>
Robert Griesemer's avatar
Robert Griesemer committed
4180

4181 4182 4183 4184 4185 4186 4187 4188
<p>
The divisor of a constant division or remainder operation must not be zero:
</p>

<pre>
3.14 / 0.0   // illegal: division by zero
</pre>

4189
<p>
4190 4191
The values of <i>typed</i> constants must always be accurately representable as values
of the constant type. The following constant expressions are illegal:
4192 4193 4194
</p>

<pre>
4195 4196
uint(-1)     // -1 cannot be represented as a uint
int(3.14)    // 3.14 cannot be represented as an int
4197 4198 4199
int64(Huge)  // 1267650600228229401496703205376 cannot be represented as an int64
Four * 300   // operand 300 cannot be represented as an int8 (type of Four)
Four * 100   // product 400 cannot be represented as an int8 (type of Four)
4200 4201 4202
</pre>

<p>
4203
The mask used by the unary bitwise complement operator <code>^</code> matches
Rob Pike's avatar
Rob Pike committed
4204
the rule for non-constants: the mask is all 1s for unsigned constants
4205
and -1 for signed and untyped constants.
4206 4207 4208
</p>

<pre>
4209
^1         // untyped integer constant, equal to -2
4210
uint8(^1)  // illegal: same as uint8(-2), -2 cannot be represented as a uint8
4211 4212 4213
^uint8(1)  // typed uint8 constant, same as 0xFF ^ uint8(1) = uint8(0xFE)
int8(^1)   // same as int8(-2)
^int8(1)   // same as -1 ^ int8(1) = -2
4214 4215
</pre>

4216 4217 4218 4219 4220 4221 4222
<p>
Implementation restriction: A compiler may use rounding while
computing untyped floating-point or complex constant expressions; see
the implementation restriction in the section
on <a href="#Constants">constants</a>.  This rounding may cause a
floating-point constant expression to be invalid in an integer
context, even if it would be integral when calculated using infinite
4223
precision, and vice versa.
4224 4225
</p>

4226

4227
<h3 id="Order_of_evaluation">Order of evaluation</h3>
4228 4229

<p>
4230
At package level, <a href="#Package_initialization">initialization dependencies</a>
4231 4232 4233 4234
determine the evaluation order of individual initialization expressions in
<a href="#Variable_declarations">variable declarations</a>.
Otherwise, when evaluating the <a href="#Operands">operands</a> of an
expression, assignment, or
4235 4236
<a href="#Return_statements">return statement</a>,
all function calls, method calls, and
4237
communication operations are evaluated in lexical left-to-right
4238 4239 4240
order.
</p>

4241
<p>
4242
For example, in the (function-local) assignment
4243 4244
</p>
<pre>
4245
y[f()], ok = g(h(), i()+x[j()], &lt;-c), k()
4246 4247
</pre>
<p>
4248 4249
the function calls and communication happen in the order
<code>f()</code>, <code>h()</code>, <code>i()</code>, <code>j()</code>,
4250
<code>&lt;-c</code>, <code>g()</code>, and <code>k()</code>.
4251 4252 4253
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.
4254 4255
</p>

4256 4257
<pre>
a := 1
4258
f := func() int { a++; return a }
4259 4260 4261
x := []int{a, f()}            // x may be [1, 2] or [2, 2]: evaluation order between a and f() is not specified
m := map[int]int{a: 1, a: 2}  // m may be {2: 1} or {2: 2}: evaluation order between the two map assignments is not specified
n := map[int]int{a: f()}      // n may be {2: 3} or {3: 3}: evaluation order between the key and the value is not specified
4262 4263
</pre>

4264 4265 4266
<p>
At package level, initialization dependencies override the left-to-right rule
for individual initialization expressions, but not for operands within each
4267
expression:
4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285
</p>

<pre>
var a, b, c = f() + v(), g(), sqr(u()) + v()

func f() int        { return c }
func g() int        { return a }
func sqr(x int) int { return x*x }

// functions u and v are independent of all other variables and functions
</pre>

<p>
The function calls happen in the order
<code>u()</code>, <code>sqr()</code>, <code>v()</code>,
<code>f()</code>, <code>v()</code>, and <code>g()</code>.
</p>

4286 4287 4288 4289 4290 4291 4292 4293
<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>

4294
<h2 id="Statements">Statements</h2>
4295

Rob Pike's avatar
Rob Pike committed
4296
<p>
4297
Statements control execution.
Rob Pike's avatar
Rob Pike committed
4298
</p>
4299

4300
<pre class="ebnf">
4301
Statement =
4302 4303
	Declaration | LabeledStmt | SimpleStmt |
	GoStmt | ReturnStmt | BreakStmt | ContinueStmt | GotoStmt |
4304 4305
	FallthroughStmt | Block | IfStmt | SwitchStmt | SelectStmt | ForStmt |
	DeferStmt .
Robert Griesemer's avatar
Robert Griesemer committed
4306

4307
SimpleStmt = EmptyStmt | ExpressionStmt | SendStmt | IncDecStmt | Assignment | ShortVarDecl .
4308
</pre>
4309

4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384
<h3 id="Terminating_statements">Terminating statements</h3>

<p>
A terminating statement is one of the following:
</p>

<ol>
<li>
	A <a href="#Return_statements">"return"</a> or
    	<a href="#Goto_statements">"goto"</a> statement.
	<!-- ul below only for regular layout -->
	<ul> </ul>
</li>

<li>
	A call to the built-in function
	<a href="#Handling_panics"><code>panic</code></a>.
	<!-- ul below only for regular layout -->
	<ul> </ul>
</li>

<li>
	A <a href="#Blocks">block</a> in which the statement list ends in a terminating statement.
	<!-- ul below only for regular layout -->
	<ul> </ul>
</li>

<li>
	An <a href="#If_statements">"if" statement</a> in which:
	<ul>
	<li>the "else" branch is present, and</li>
	<li>both branches are terminating statements.</li>
	</ul>
</li>

<li>
	A <a href="#For_statements">"for" statement</a> in which:
	<ul>
	<li>there are no "break" statements referring to the "for" statement, and</li>
	<li>the loop condition is absent.</li>
	</ul>
</li>

<li>
	A <a href="#Switch_statements">"switch" statement</a> in which:
	<ul>
	<li>there are no "break" statements referring to the "switch" statement,</li>
	<li>there is a default case, and</li>
	<li>the statement lists in each case, including the default, end in a terminating
	    statement, or a possibly labeled <a href="#Fallthrough_statements">"fallthrough"
	    statement</a>.</li>
	</ul>
</li>

<li>
	A <a href="#Select_statements">"select" statement</a> in which:
	<ul>
	<li>there are no "break" statements referring to the "select" statement, and</li>
	<li>the statement lists in each case, including the default if present,
	    end in a terminating statement.</li>
	</ul>
</li>

<li>
	A <a href="#Labeled_statements">labeled statement</a> labeling
	a terminating statement.
</li>
</ol>

<p>
All other statements are not terminating.
</p>

<p>
A <a href="#Blocks">statement list</a> ends in a terminating statement if the list
4385
is not empty and its final non-empty statement is terminating.
4386 4387
</p>

4388

4389
<h3 id="Empty_statements">Empty statements</h3>
4390

Rob Pike's avatar
Rob Pike committed
4391
<p>
4392
The empty statement does nothing.
Rob Pike's avatar
Rob Pike committed
4393
</p>
4394

4395
<pre class="ebnf">
4396
EmptyStmt = .
4397
</pre>
4398 4399


4400
<h3 id="Labeled_statements">Labeled statements</h3>
4401 4402 4403 4404 4405 4406

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

4407
<pre class="ebnf">
4408
LabeledStmt = Label ":" Statement .
4409 4410 4411 4412
Label       = identifier .
</pre>

<pre>
4413
Error: log.Panic("error encountered")
4414 4415 4416
</pre>


4417
<h3 id="Expression_statements">Expression statements</h3>
4418

Rob Pike's avatar
Rob Pike committed
4419
<p>
4420 4421 4422
With the exception of specific built-in functions,
function and method <a href="#Calls">calls</a> and
<a href="#Receive_operator">receive operations</a>
4423
can appear in statement context. Such statements may be parenthesized.
Rob Pike's avatar
Rob Pike committed
4424 4425
</p>

4426
<pre class="ebnf">
4427
ExpressionStmt = Expression .
4428
</pre>
4429

4430 4431 4432 4433 4434 4435 4436 4437 4438
<p>
The following built-in functions are not permitted in statement context:
</p>

<pre>
append cap complex imag len make new real
unsafe.Alignof unsafe.Offsetof unsafe.Sizeof
</pre>

4439
<pre>
4440 4441
h(x+y)
f.Close()
4442
&lt;-ch
4443
(&lt;-ch)
4444
len("foo")  // illegal if len is the built-in function
4445
</pre>
4446 4447


4448 4449 4450 4451
<h3 id="Send_statements">Send statements</h3>

<p>
A send statement sends a value on a channel.
4452 4453 4454
The channel expression must be of <a href="#Channel_types">channel type</a>,
the channel direction must permit send operations,
and the type of the value to be sent must be <a href="#Assignability">assignable</a>
4455 4456 4457 4458 4459 4460 4461 4462 4463 4464
to the channel's element type.
</p>

<pre class="ebnf">
SendStmt = Channel "&lt;-" Expression .
Channel  = Expression .
</pre>

<p>
Both the channel and the value expression are evaluated before communication
4465
begins. Communication blocks until the send can proceed.
4466 4467
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.
4468
A send on a closed channel proceeds by causing a <a href="#Run_time_panics">run-time panic</a>.
4469
A send on a <code>nil</code> channel blocks forever.
4470 4471 4472
</p>

<pre>
4473
ch &lt;- 3  // send value 3 to channel ch
4474 4475 4476
</pre>


4477
<h3 id="IncDec_statements">IncDec statements</h3>
4478

Rob Pike's avatar
Rob Pike committed
4479
<p>
4480
The "++" and "--" statements increment or decrement their operands
4481
by the untyped <a href="#Constants">constant</a> <code>1</code>.
4482 4483
As with an assignment, the operand must be <a href="#Address_operators">addressable</a>
or a map index expression.
Rob Pike's avatar
Rob Pike committed
4484
</p>
4485

4486
<pre class="ebnf">
4487
IncDecStmt = Expression ( "++" | "--" ) .
4488
</pre>
4489

Rob Pike's avatar
Rob Pike committed
4490
<p>
Robert Griesemer's avatar
Robert Griesemer committed
4491
The following <a href="#Assignments">assignment statements</a> are semantically
4492
equivalent:
Rob Pike's avatar
Rob Pike committed
4493
</p>
4494

Rob Pike's avatar
Rob Pike committed
4495
<pre class="grammar">
4496 4497 4498 4499
IncDec statement    Assignment
x++                 x += 1
x--                 x -= 1
</pre>
4500

4501

4502
<h3 id="Assignments">Assignments</h3>
4503

4504
<pre class="ebnf">
4505
Assignment = ExpressionList assign_op ExpressionList .
Rob Pike's avatar
Rob Pike committed
4506

4507 4508
assign_op = [ add_op | mul_op ] "=" .
</pre>
4509

Rob Pike's avatar
Rob Pike committed
4510
<p>
Rob Pike's avatar
Rob Pike committed
4511
Each left-hand side operand must be <a href="#Address_operators">addressable</a>,
4512 4513
a map index expression, or (for <code>=</code> assignments only) the
<a href="#Blank_identifier">blank identifier</a>.
4514
Operands may be parenthesized.
Rob Pike's avatar
Rob Pike committed
4515
</p>
4516

4517 4518 4519 4520
<pre>
x = 1
*p = f()
a[i] = 23
4521
(k) = &lt;-ch  // same as: k = &lt;-ch
4522
</pre>
4523

Rob Pike's avatar
Rob Pike committed
4524 4525
<p>
An <i>assignment operation</i> <code>x</code> <i>op</i><code>=</code>
4526 4527
<code>y</code> where <i>op</i> is a binary <a href="#Arithmetic_operators">arithmetic operator</a>
is equivalent to <code>x</code> <code>=</code> <code>x</code> <i>op</i>
4528
<code>(y)</code> but evaluates <code>x</code>
Rob Pike's avatar
Rob Pike committed
4529
only once.  The <i>op</i><code>=</code> construct is a single token.
Rob Pike's avatar
Rob Pike committed
4530
In assignment operations, both the left- and right-hand expression lists
4531 4532
must contain exactly one single-valued expression, and the left-hand
expression must not be the blank identifier.
Rob Pike's avatar
Rob Pike committed
4533
</p>
4534

4535
<pre>
Robert Griesemer's avatar
Robert Griesemer committed
4536
a[i] &lt;&lt;= 2
Rob Pike's avatar
Rob Pike committed
4537
i &amp;^= 1&lt;&lt;n
4538
</pre>
4539

Rob Pike's avatar
Rob Pike committed
4540 4541 4542 4543
<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
4544 4545
such as a function call, a <a href="#Channel_types">channel</a> or
<a href="#Map_types">map</a> operation, or a <a href="#Type_assertions">type assertion</a>.
4546
The number of operands on the left
Robert Griesemer's avatar
Robert Griesemer committed
4547
hand side must match the number of values.  For instance, if
Rob Pike's avatar
Rob Pike committed
4548 4549
<code>f</code> is a function returning two values,
</p>
4550

4551 4552 4553
<pre>
x, y = f()
</pre>
4554

Rob Pike's avatar
Rob Pike committed
4555 4556
<p>
assigns the first value to <code>x</code> and the second to <code>y</code>.
4557 4558 4559 4560
In the second form, the number of operands on the left must equal the number
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:
Rob Pike's avatar
Rob Pike committed
4561
</p>
4562

Robert Griesemer's avatar
Robert Griesemer committed
4563
<pre>
4564
one, two, three = '一', '二', '三'
Robert Griesemer's avatar
Robert Griesemer committed
4565 4566
</pre>

Rob Pike's avatar
Rob Pike committed
4567
<p>
4568 4569
The <a href="#Blank_identifier">blank identifier</a> provides a way to
ignore right-hand side values in an assignment:
4570 4571
</p>

4572 4573 4574 4575 4576
<pre>
_ = x       // evaluate x but ignore it
x, _ = f()  // evaluate f() but ignore second result value
</pre>

4577 4578
<p>
The assignment proceeds in two phases.
4579
First, the operands of <a href="#Index_expressions">index expressions</a>
4580 4581 4582 4583 4584
and <a href="#Address_operators">pointer indirections</a>
(including implicit pointer indirections in <a href="#Selectors">selectors</a>)
on the left and the expressions on the right are all
<a href="#Order_of_evaluation">evaluated in the usual order</a>.
Second, the assignments are carried out in left-to-right order.
Rob Pike's avatar
Rob Pike committed
4585
</p>
4586

4587
<pre>
Rob Pike's avatar
Rob Pike committed
4588
a, b = b, a  // exchange a and b
4589 4590 4591

x := []int{1, 2, 3}
i := 0
4592
i, x[i] = 1, 2  // set i = 1, x[0] = 2
4593 4594 4595 4596

i = 0
x[i], i = 2, 1  // set x[0] = 2, i = 1

4597
x[0], x[0] = 1, 2  // set x[0] = 1, then x[0] = 2 (so x[0] == 2 at end)
4598

4599
x[1], x[3] = 4, 5  // set x[1] = 4, then panic setting x[3] = 5.
4600 4601 4602 4603

type Point struct { x, y int }
var p *Point
x[2], p.x = 6, 7  // set x[2] = 6, then panic setting p.x = 7
4604 4605 4606 4607 4608 4609 4610

i = 2
x = []int{3, 5, 7}
for i, x[i] = range x {  // set i, x[2] = 0, x[0]
	break
}
// after this loop, i == 0 and x == []int{3, 5, 3}
4611
</pre>
Rob Pike's avatar
Rob Pike committed
4612 4613

<p>
4614 4615
In assignments, each value must be <a href="#Assignability">assignable</a>
to the type of the operand to which it is assigned, with the following special cases:
Rob Pike's avatar
Rob Pike committed
4616
</p>
4617

4618
<ol>
4619 4620 4621 4622 4623 4624
<li>
	Any typed value may be assigned to the blank identifier.
</li>

<li>
	If an untyped constant
4625
	is assigned to a variable of interface type or the blank identifier,
4626 4627 4628 4629 4630 4631 4632 4633
	the constant is first <a href="#Conversions">converted</a> to its
	 <a href="#Constants">default type</a>.
</li>

<li>
	If an untyped boolean value is assigned to a variable of interface type or
	the blank identifier, it is first converted to type <code>bool</code>.
</li>
4634
</ol>
4635

4636
<h3 id="If_statements">If statements</h3>
4637

Rob Pike's avatar
Rob Pike committed
4638 4639 4640 4641
<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
4642
present, the "else" branch is executed.
Rob Pike's avatar
Rob Pike committed
4643
</p>
4644

4645
<pre class="ebnf">
Russ Cox's avatar
Russ Cox committed
4646
IfStmt = "if" [ SimpleStmt ";" ] Expression Block [ "else" ( IfStmt | Block ) ] .
4647
</pre>
4648

4649
<pre>
4650 4651
if x &gt; max {
	x = max
4652 4653
}
</pre>
4654

4655
<p>
Russ Cox's avatar
Russ Cox committed
4656 4657
The expression may be preceded by a simple statement, which
executes before the expression is evaluated.
4658
</p>
4659

4660
<pre>
4661 4662
if x := f(); x &lt; y {
	return x
4663
} else if x &gt; z {
4664
	return z
4665
} else {
4666
	return y
4667 4668
}
</pre>
4669 4670


4671
<h3 id="Switch_statements">Switch statements</h3>
4672

Rob Pike's avatar
Rob Pike committed
4673 4674
<p>
"Switch" statements provide multi-way execution.
Rob Pike's avatar
Rob Pike committed
4675 4676 4677
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
4678
</p>
4679

4680
<pre class="ebnf">
4681
SwitchStmt = ExprSwitchStmt | TypeSwitchStmt .
4682 4683
</pre>

Rob Pike's avatar
Rob Pike committed
4684
<p>
Rob Pike's avatar
Rob Pike committed
4685 4686 4687 4688 4689
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.
4690
The switch expression is evaluated exactly once in a switch statement.
Rob Pike's avatar
Rob Pike committed
4691 4692
</p>

4693
<h4 id="Expression_switches">Expression switches</h4>
Rob Pike's avatar
Rob Pike committed
4694 4695 4696 4697 4698

<p>
In an expression switch,
the switch expression is evaluated and
the case expressions, which need not be constants,
4699
are evaluated left-to-right and top-to-bottom; the first one that equals the
Rob Pike's avatar
Rob Pike committed
4700
switch expression
Rob Pike's avatar
Rob Pike committed
4701 4702
triggers execution of the statements of the associated case;
the other cases are skipped.
Rob Pike's avatar
Rob Pike committed
4703 4704
If no case matches and there is a "default" case,
its statements are executed.
Rob Pike's avatar
Rob Pike committed
4705 4706
There can be at most one default case and it may appear anywhere in the
"switch" statement.
4707 4708
A missing switch expression is equivalent to the boolean value
<code>true</code>.
Rob Pike's avatar
Rob Pike committed
4709
</p>
4710

4711
<pre class="ebnf">
4712
ExprSwitchStmt = "switch" [ SimpleStmt ";" ] [ Expression ] "{" { ExprCaseClause } "}" .
4713
ExprCaseClause = ExprSwitchCase ":" StatementList .
4714
ExprSwitchCase = "case" ExpressionList | "default" .
4715 4716
</pre>

4717 4718 4719 4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737
<p>
If the switch expression evaluates to an untyped constant, it is first
<a href="#Conversions">converted</a> to its <a href="#Constants">default type</a>;
if it is an untyped boolean value, it is first converted to type <code>bool</code>.
The predeclared untyped value <code>nil</code> cannot be used as a switch expression.
</p>

<p>
If a case expression is untyped, it is first <a href="#Conversions">converted</a>
to the type of the switch expression.
For each (possibly converted) case expression <code>x</code> and the value <code>t</code>
of the switch expression, <code>x == t</code> must be a valid <a href="#Comparison_operators">comparison</a>.
</p>

<p>
In other words, the switch expression is treated as if it were used to declare and
initialize a temporary variable <code>t</code> without explicit type; it is that
value of <code>t</code> against which each case expression <code>x</code> is tested
for equality.
</p>

Rob Pike's avatar
Rob Pike committed
4738
<p>
4739 4740 4741
In a case or default clause, the last non-empty statement
may be a (possibly <a href="#Labeled_statements">labeled</a>)
<a href="#Fallthrough_statements">"fallthrough" statement</a> to
Rob Pike's avatar
Rob Pike committed
4742
indicate that control should flow from the end of this clause to
4743
the first statement of the next clause.
Rob Pike's avatar
Rob Pike committed
4744
Otherwise control flows to the end of the "switch" statement.
4745 4746
A "fallthrough" statement may appear as the last statement of all
but the last clause of an expression switch.
Rob Pike's avatar
Rob Pike committed
4747
</p>
Robert Griesemer's avatar
Robert Griesemer committed
4748

4749
<p>
4750
The switch expression may be preceded by a simple statement, which
Russ Cox's avatar
Russ Cox committed
4751
executes before the expression is evaluated.
Rob Pike's avatar
Rob Pike committed
4752
</p>
4753

4754 4755
<pre>
switch tag {
4756 4757 4758
default: s3()
case 0, 1, 2, 3: s1()
case 4, 5, 6, 7: s2()
4759
}
4760

4761
switch x := f(); {  // missing switch expression means "true"
4762 4763
case x &lt; 0: return -x
default: return x
4764
}
4765

Robert Griesemer's avatar
Robert Griesemer committed
4766
switch {
4767 4768 4769
case x &lt; y: f1()
case x &lt; z: f2()
case x == 4: f3()
4770 4771
}
</pre>
4772

4773 4774 4775 4776 4777 4778 4779
<p>
Implementation restriction: A compiler may disallow multiple case
expressions evaluating to the same constant.
For instance, the current compilers disallow duplicate integer,
floating point, or string constants in case expressions.
</p>

4780
<h4 id="Type_switches">Type switches</h4>
Rob Pike's avatar
Rob Pike committed
4781 4782

<p>
4783
A type switch compares types rather than values. It is otherwise similar
Robert Griesemer's avatar
tweaks  
Robert Griesemer committed
4784
to an expression switch. It is marked by a special switch expression that
4785
has the form of a <a href="#Type_assertions">type assertion</a>
4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799
using the reserved word <code>type</code> rather than an actual type:
</p>

<pre>
switch x.(type) {
// cases
}
</pre>

<p>
Cases then match actual types <code>T</code> against the dynamic type of the
expression <code>x</code>. As with type assertions, <code>x</code> must be of
<a href="#Interface_types">interface type</a>, and each non-interface type
<code>T</code> listed in a case must implement the type of <code>x</code>.
4800 4801
The types listed in the cases of a type switch must all be
<a href="#Type_identity">different</a>.
Rob Pike's avatar
Rob Pike committed
4802 4803
</p>

4804
<pre class="ebnf">
4805
TypeSwitchStmt  = "switch" [ SimpleStmt ";" ] TypeSwitchGuard "{" { TypeCaseClause } "}" .
4806
TypeSwitchGuard = [ identifier ":=" ] PrimaryExpr "." "(" "type" ")" .
4807
TypeCaseClause  = TypeSwitchCase ":" StatementList .
Rob Pike's avatar
Rob Pike committed
4808 4809
TypeSwitchCase  = "case" TypeList | "default" .
TypeList        = Type { "," Type } .
Rob Pike's avatar
Rob Pike committed
4810 4811
</pre>

4812
<p>
4813 4814
The TypeSwitchGuard may include a
<a href="#Short_variable_declarations">short variable declaration</a>.
4815 4816
When that form is used, the variable is declared at the end of the
TypeSwitchCase in the <a href="#Blocks">implicit block</a> of each clause.
4817 4818 4819
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.
4820 4821
</p>

Rob Pike's avatar
Rob Pike committed
4822
<p>
4823
The type in a case may be <a href="#Predeclared_identifiers"><code>nil</code></a>;
4824
that case is used when the expression in the TypeSwitchGuard
Robert Griesemer's avatar
tweaks  
Robert Griesemer committed
4825
is a <code>nil</code> interface value.
4826
There may be at most one <code>nil</code> case.
4827 4828 4829
</p>

<p>
Robert Griesemer's avatar
Robert Griesemer committed
4830
Given an expression <code>x</code> of type <code>interface{}</code>,
4831
the following type switch:
Rob Pike's avatar
Rob Pike committed
4832 4833 4834
</p>

<pre>
Robert Griesemer's avatar
Robert Griesemer committed
4835
switch i := x.(type) {
4836
case nil:
4837
	printString("x is nil")                // type of i is type of x (interface{})
Rob Pike's avatar
Rob Pike committed
4838
case int:
4839
	printInt(i)                            // type of i is int
4840
case float64:
4841
	printFloat64(i)                        // type of i is float64
4842
case func(int) float64:
4843
	printFunction(i)                       // type of i is func(int) float64
4844
case bool, string:
4845
	printString("type is bool or string")  // type of i is type of x (interface{})
Rob Pike's avatar
Rob Pike committed
4846
default:
4847
	printString("don't know the type")     // type of i is type of x (interface{})
Rob Pike's avatar
Rob Pike committed
4848
}
4849
</pre>
Rob Pike's avatar
Rob Pike committed
4850

4851 4852 4853 4854 4855
<p>
could be rewritten:
</p>

<pre>
4856
v := x  // x is evaluated exactly once
4857
if v == nil {
4858
	i := v                                 // type of i is type of x (interface{})
4859
	printString("x is nil")
4860
} else if i, isInt := v.(int); isInt {
4861
	printInt(i)                            // type of i is int
4862
} else if i, isFloat64 := v.(float64); isFloat64 {
4863
	printFloat64(i)                        // type of i is float64
4864
} else if i, isFunc := v.(func(int) float64); isFunc {
4865
	printFunction(i)                       // type of i is func(int) float64
4866
} else {
4867 4868
	_, isBool := v.(bool)
	_, isString := v.(string)
4869
	if isBool || isString {
4870 4871
		i := v                         // type of i is type of x (interface{})
		printString("type is bool or string")
4872
	} else {
4873 4874
		i := v                         // type of i is type of x (interface{})
		printString("don't know the type")
4875
	}
Rob Pike's avatar
Rob Pike committed
4876 4877
}
</pre>
4878

4879
<p>
Russ Cox's avatar
Russ Cox committed
4880 4881
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
4882
</p>
4883 4884 4885

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

4888
<h3 id="For_statements">For statements</h3>
4889

Rob Pike's avatar
Rob Pike committed
4890
<p>
4891 4892
A "for" statement specifies repeated execution of a block. There are three forms:
The iteration may be controlled by a single condition, a "for" clause, or a "range" clause.
Rob Pike's avatar
Rob Pike committed
4893
</p>
4894

4895
<pre class="ebnf">
4896
ForStmt = "for" [ Condition | ForClause | RangeClause ] Block .
4897 4898
Condition = Expression .
</pre>
4899

4900 4901
<h4 id="For_condition">For statements with single condition</h4>

Rob Pike's avatar
Rob Pike committed
4902 4903 4904 4905
<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.
4906 4907
If the condition is absent, it is equivalent to the boolean value
<code>true</code>.
Rob Pike's avatar
Rob Pike committed
4908
</p>
4909

4910 4911 4912 4913 4914
<pre>
for a &lt; b {
	a *= 2
}
</pre>
4915

4916 4917
<h4 id="For_clause">For statements with <code>for</code> clause</h4>

Rob Pike's avatar
Rob Pike committed
4918
<p>
Rob Pike's avatar
Rob Pike committed
4919
A "for" statement with a ForClause is also controlled by its condition, but
Rob Pike's avatar
Rob Pike committed
4920 4921
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
4922
an increment or decrement statement. The init statement may be a
Robert Griesemer's avatar
Robert Griesemer committed
4923
<a href="#Short_variable_declarations">short variable declaration</a>, but the post statement must not.
4924
Variables declared by the init statement are re-used in each iteration.
Rob Pike's avatar
Rob Pike committed
4925
</p>
4926

4927
<pre class="ebnf">
4928
ForClause = [ InitStmt ] ";" [ Condition ] ";" [ PostStmt ] .
4929 4930
InitStmt = SimpleStmt .
PostStmt = SimpleStmt .
4931
</pre>
4932

4933
<pre>
4934
for i := 0; i &lt; 10; i++ {
4935 4936 4937
	f(i)
}
</pre>
4938

4939
<p>
Rob Pike's avatar
Rob Pike committed
4940 4941 4942 4943
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).
4944 4945
Any element of the ForClause may be empty but the
<a href="#Semicolons">semicolons</a> are
Rob Pike's avatar
Rob Pike committed
4946
required unless there is only a condition.
4947 4948
If the condition is absent, it is equivalent to the boolean value
<code>true</code>.
Rob Pike's avatar
Rob Pike committed
4949
</p>
Robert Griesemer's avatar
Robert Griesemer committed
4950

4951
<pre>
Rob Pike's avatar
Rob Pike committed
4952 4953
for cond { S() }    is the same as    for ; cond ; { S() }
for      { S() }    is the same as    for true     { S() }
4954
</pre>
Robert Griesemer's avatar
Robert Griesemer committed
4955

4956 4957
<h4 id="For_range">For statements with <code>range</code> clause</h4>

Rob Pike's avatar
Rob Pike committed
4958 4959
<p>
A "for" statement with a "range" clause
Rob Pike's avatar
Rob Pike committed
4960
iterates through all entries of an array, slice, string or map,
4961
or values received on a channel. For each entry it assigns <i>iteration values</i>
4962
to corresponding <i>iteration variables</i> if present and then executes the block.
Rob Pike's avatar
Rob Pike committed
4963
</p>
Robert Griesemer's avatar
Robert Griesemer committed
4964

4965
<pre class="ebnf">
4966
RangeClause = [ ExpressionList "=" | IdentifierList ":=" ] "range" Expression .
4967 4968 4969 4970
</pre>

<p>
The expression on the right in the "range" clause is called the <i>range expression</i>,
4971 4972
which may be an array, pointer to an array, slice, string, map, or channel permitting
<a href="#Receive_operator">receive operations</a>.
4973
As with an assignment, if present the operands on the left must be
4974
<a href="#Address_operators">addressable</a> or map index expressions; they
4975 4976 4977 4978
denote the iteration variables. If the range expression is a channel, at most
one iteration variable is permitted, otherwise there may be up to two.
If the last iteration variable is the <a href="#Blank_identifier">blank identifier</a>,
the range clause is equivalent to the same clause without that identifier.
4979
</p>
4980 4981

<p>
4982
The range expression is evaluated once before beginning the loop,
4983 4984 4985 4986
with one exception: if the range expression is an array or a pointer to an array
and at most one iteration variable is present, only the range expression's
length is evaluated; if that length is constant,
<a href="#Length_and_capacity">by definition</a>
4987 4988 4989 4990
the range expression itself will not be evaluated.
</p>

<p>
4991
Function calls on the left are evaluated once per iteration.
4992 4993
For each iteration, iteration values are produced as follows
if the respective iteration variables are present:
4994 4995 4996
</p>

<pre class="grammar">
4997
Range expression                          1st value          2nd value
4998 4999

array or slice  a  [n]E, *[n]E, or []E    index    i  int    a[i]       E
5000
string          s  string type            index    i  int    see below  rune
5001
map             m  map[K]V                key      k  K      m[k]       V
5002
channel         c  chan E, &lt;-chan E       element  e  E
5003 5004 5005 5006
</pre>

<ol>
<li>
5007
For an array, pointer to array, or slice value <code>a</code>, the index iteration
5008
values are produced in increasing order, starting at element index 0.
5009
If at most one iteration variable is present, the range loop produces
5010
iteration values from 0 up to <code>len(a)-1</code> and does not index into the array
5011
or slice itself. For a <code>nil</code> slice, the number of iterations is 0.
5012 5013 5014 5015 5016 5017
</li>

<li>
For a string value, the "range" clause iterates over the Unicode code points
in the string starting at byte index 0.  On successive iterations, the index value will be the
index of the first byte of successive UTF-8-encoded code points in the string,
5018
and the second value, of type <code>rune</code>, will be the value of
Rob Pike's avatar
Rob Pike committed
5019
the corresponding code point.  If the iteration encounters an invalid
5020
UTF-8 sequence, the second value will be <code>0xFFFD</code>,
Rob Pike's avatar
Rob Pike committed
5021 5022
the Unicode replacement character, and the next iteration will advance
a single byte in the string.
5023 5024 5025
</li>

<li>
5026 5027
The iteration order over maps is not specified
and is not guaranteed to be the same from one iteration to the next.
5028
If map entries that have not yet been reached are removed during iteration,
5029
the corresponding iteration values will not be produced. If map entries are
5030 5031 5032 5033
created during iteration, that entry may be produced during the iteration or
may be skipped. The choice may vary for each entry created and from one
iteration to the next.
If the map is <code>nil</code>, the number of iterations is 0.
5034 5035 5036 5037
</li>

<li>
For channels, the iteration values produced are the successive values sent on
5038 5039
the channel until the channel is <a href="#Close">closed</a>. If the channel
is <code>nil</code>, the range expression blocks forever.
5040
</li>
Anthony Martin's avatar
Anthony Martin committed
5041
</ol>
5042

Rob Pike's avatar
Rob Pike committed
5043
<p>
5044 5045
The iteration values are assigned to the respective
iteration variables as in an <a href="#Assignments">assignment statement</a>.
5046
</p>
5047

5048
<p>
Robert Griesemer's avatar
Robert Griesemer committed
5049
The iteration variables may be declared by the "range" clause using a form of
5050 5051
<a href="#Short_variable_declarations">short variable declaration</a>
(<code>:=</code>).
5052
In this case their types are set to the types of the respective iteration values
5053
and their <a href="#Declarations_and_scope">scope</a> is the block of the "for"
5054
statement; they are re-used in each iteration.
Rob Pike's avatar
Rob Pike committed
5055 5056 5057
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
5058

5059
<pre>
5060 5061 5062 5063 5064 5065 5066 5067 5068
var testdata *struct {
	a *[7]int
}
for i, _ := range testdata.a {
	// testdata.a is never evaluated; len(testdata.a) is constant
	// i ranges from 0 to 6
	f(i)
}

5069
var a [10]string
5070 5071 5072 5073 5074 5075 5076
for i, s := range a {
	// type of i is int
	// type of s is string
	// s == a[i]
	g(i, s)
}

5077
var key string
5078
var val interface {}  // value type of m is assignable to val
5079
m := map[string]int{"mon":0, "tue":1, "wed":2, "thu":3, "fri":4, "sat":5, "sun":6}
Rob Pike's avatar
Rob Pike committed
5080 5081
for key, val = range m {
	h(key, val)
5082 5083 5084
}
// key == last map key encountered in iteration
// val == map[key]
5085 5086 5087 5088 5089

var ch chan Work = producer()
for w := range ch {
	doWork(w)
}
5090 5091 5092

// empty a channel
for range ch {}
5093
</pre>
Robert Griesemer's avatar
Robert Griesemer committed
5094

5095

5096
<h3 id="Go_statements">Go statements</h3>
5097

Rob Pike's avatar
Rob Pike committed
5098
<p>
5099
A "go" statement starts the execution of a function call
Rob Pike's avatar
Rob Pike committed
5100 5101 5102
as an independent concurrent thread of control, or <i>goroutine</i>,
within the same address space.
</p>
5103

5104
<pre class="ebnf">
5105
GoStmt = "go" Expression .
5106
</pre>
5107

Rob Pike's avatar
Rob Pike committed
5108
<p>
5109 5110 5111 5112 5113 5114
The expression must be a function or method call; it cannot be parenthesized.
Calls of built-in functions are restricted as for
<a href="#Expression_statements">expression statements</a>.
</p>

<p>
5115 5116 5117
The function value and parameters are
<a href="#Calls">evaluated as usual</a>
in the calling goroutine, but
Rob Pike's avatar
Rob Pike committed
5118
unlike with a regular call, program execution does not wait
5119
for the invoked function to complete.
5120 5121 5122 5123 5124
Instead, the function begins executing independently
in a new goroutine.
When the function terminates, its goroutine also terminates.
If the function has any return values, they are discarded when the
function completes.
Rob Pike's avatar
Rob Pike committed
5125
</p>
5126

5127 5128
<pre>
go Server()
5129
go func(ch chan&lt;- bool) { for { sleep(10); ch &lt;- true }} (c)
5130
</pre>
5131 5132


5133
<h3 id="Select_statements">Select statements</h3>
5134

Rob Pike's avatar
Rob Pike committed
5135
<p>
5136 5137 5138 5139 5140 5141
A "select" statement chooses which of a set of possible
<a href="#Send_statements">send</a> or
<a href="#Receive_operator">receive</a>
operations will proceed.
It looks similar to a
<a href="#Switch_statements">"switch"</a> statement but with the
5142
cases all referring to communication operations.
Rob Pike's avatar
Rob Pike committed
5143
</p>
5144

5145
<pre class="ebnf">
5146
SelectStmt = "select" "{" { CommClause } "}" .
5147
CommClause = CommCase ":" StatementList .
5148
CommCase   = "case" ( SendStmt | RecvStmt ) | "default" .
5149
RecvStmt   = [ ExpressionList "=" | IdentifierList ":=" ] RecvExpr .
5150
RecvExpr   = Expression .
5151
</pre>
5152

5153
<p>
5154 5155 5156 5157 5158 5159
A case with a RecvStmt may assign the result of a RecvExpr to one or
two variables, which may be declared using a
<a href="#Short_variable_declarations">short variable declaration</a>.
The RecvExpr must be a (possibly parenthesized) receive operation.
There can be at most one default case and it may appear anywhere
in the list of cases.
Rob Pike's avatar
Rob Pike committed
5160
</p>
5161

5162
<p>
5163
Execution of a "select" statement proceeds in several steps:
Rob Pike's avatar
Rob Pike committed
5164
</p>
5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176 5177 5178 5179 5180 5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 5195 5196 5197 5198 5199 5200 5201 5202

<ol>
<li>
For all the cases in the statement, the channel operands of receive operations
and the channel and right-hand-side expressions of send statements are
evaluated exactly once, in source order, upon entering the "select" statement.
The result is a set of channels to receive from or send to,
and the corresponding values to send.
Any side effects in that evaluation will occur irrespective of which (if any)
communication operation is selected to proceed.
Expressions on the left-hand side of a RecvStmt with a short variable declaration
or assignment are not yet evaluated.
</li>

<li>
If one or more of the communications can proceed,
a single one that can proceed is chosen via a uniform pseudo-random selection.
Otherwise, if there is a default case, that case is chosen.
If there is no default case, the "select" statement blocks until
at least one of the communications can proceed.
</li>

<li>
Unless the selected case is the default case, the respective communication
operation is executed.
</li>

<li>
If the selected case is a RecvStmt with a short variable declaration or
an assignment, the left-hand side expressions are evaluated and the
received value (or values) are assigned.
</li>

<li>
The statement list of the selected case is executed.
</li>
</ol>

5203
<p>
5204 5205
Since communication on <code>nil</code> channels can never proceed,
a select with only <code>nil</code> channels and no default case blocks forever.
Rob Pike's avatar
Rob Pike committed
5206
</p>
5207

5208
<pre>
5209 5210
var a []int
var c, c1, c2, c3, c4 chan int
5211
var i1, i2 int
5212 5213
select {
case i1 = &lt;-c1:
5214
	print("received ", i1, " from c1\n")
5215
case c2 &lt;- i2:
5216
	print("sent ", i2, " to c2\n")
5217
case i3, ok := (&lt;-c3):  // same as: i3, ok := &lt;-c3
5218 5219 5220 5221 5222
	if ok {
		print("received ", i3, " from c3\n")
	} else {
		print("c3 is closed\n")
	}
5223 5224 5225 5226
case a[f()] = &lt;-c4:
	// same as:
	// case t := &lt;-c4
	//	a[f()] = t
5227
default:
5228
	print("no communication\n")
5229 5230 5231
}

for {  // send random sequence of bits to c
5232
	select {
5233 5234
	case c &lt;- 0:  // note: no statement, no fallthrough, no folding of cases
	case c &lt;- 1:
5235
	}
5236
}
5237

5238
select {}  // block forever
5239
</pre>
5240 5241


5242
<h3 id="Return_statements">Return statements</h3>
5243

Rob Pike's avatar
Rob Pike committed
5244
<p>
5245 5246 5247 5248
A "return" statement in a function <code>F</code> terminates the execution
of <code>F</code>, and optionally provides one or more result values.
Any functions <a href="#Defer_statements">deferred</a> by <code>F</code>
are executed before <code>F</code> returns to its caller.
Rob Pike's avatar
Rob Pike committed
5249
</p>
5250

5251
<pre class="ebnf">
5252
ReturnStmt = "return" [ ExpressionList ] .
5253
</pre>
5254

5255 5256 5257 5258
<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
5259
<pre>
5260
func noResult() {
Rob Pike's avatar
Rob Pike committed
5261 5262 5263
	return
}
</pre>
5264

Rob Pike's avatar
Rob Pike committed
5265
<p>
5266 5267
There are three ways to return values from a function with a result
type:
Rob Pike's avatar
Rob Pike committed
5268
</p>
5269

5270 5271 5272
<ol>
	<li>The return value or values may be explicitly listed
		in the "return" statement. Each expression must be single-valued
5273 5274
		and <a href="#Assignability">assignable</a>
		to the corresponding element of the function's result type.
5275
<pre>
5276
func simpleF() int {
Rob Pike's avatar
Rob Pike committed
5277 5278 5279
	return 2
}

5280
func complexF1() (re float64, im float64) {
Rob Pike's avatar
Rob Pike committed
5281
	return -7.0, -4.0
5282 5283
}
</pre>
5284 5285 5286 5287 5288 5289 5290
	</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.
5291
<pre>
5292 5293
func complexF2() (re float64, im float64) {
	return complexF1()
5294 5295
}
</pre>
5296
	</li>
Peter Mundy's avatar
Peter Mundy committed
5297
	<li>The expression list may be empty if the function's result
5298
		type specifies names for its <a href="#Function_types">result parameters</a>.
5299
		The result parameters act as ordinary local variables
5300 5301
		and the function may assign values to them as necessary.
		The "return" statement returns the values of these variables.
5302
<pre>
5303
func complexF3() (re float64, im float64) {
5304 5305 5306
	re = 7.0
	im = 4.0
	return
5307
}
5308

Russ Cox's avatar
Russ Cox committed
5309
func (devnull) Write(p []byte) (n int, _ error) {
5310 5311
	n = len(p)
	return
5312
}
5313
</pre>
5314 5315
	</li>
</ol>
5316

5317
<p>
5318 5319
Regardless of how they are declared, all the result values are initialized to
the <a href="#The_zero_value">zero values</a> for their type upon entry to the
5320 5321
function. A "return" statement that specifies results sets the result parameters before
any deferred functions are executed.
5322 5323
</p>

5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338
<p>
Implementation restriction: A compiler may disallow an empty expression list
in a "return" statement if a different entity (constant, type, or variable)
with the same name as a result parameter is in
<a href="#Declarations_and_scope">scope</a> at the place of the return.
</p>

<pre>
func f(n int) (res int, err error) {
	if _, err := f(n-1); err != nil {
		return  // invalid return statement: err is shadowed
	}
	return
}
</pre>
5339

5340
<h3 id="Break_statements">Break statements</h3>
5341

Rob Pike's avatar
Rob Pike committed
5342 5343
<p>
A "break" statement terminates execution of the innermost
5344 5345
<a href="#For_statements">"for"</a>,
<a href="#Switch_statements">"switch"</a>, or
5346 5347
<a href="#Select_statements">"select"</a> statement
within the same function.
Rob Pike's avatar
Rob Pike committed
5348
</p>
5349

5350
<pre class="ebnf">
5351
BreakStmt = "break" [ Label ] .
5352
</pre>
5353

Rob Pike's avatar
Rob Pike committed
5354 5355
<p>
If there is a label, it must be that of an enclosing
5356 5357
"for", "switch", or "select" statement,
and that is the one whose execution terminates.
Rob Pike's avatar
Rob Pike committed
5358
</p>
5359

5360
<pre>
5361 5362 5363 5364 5365 5366 5367 5368 5369 5370 5371
OuterLoop:
	for i = 0; i &lt; n; i++ {
		for j = 0; j &lt; m; j++ {
			switch a[i][j] {
			case nil:
				state = Error
				break OuterLoop
			case item:
				state = Found
				break OuterLoop
			}
Russ Cox's avatar
Russ Cox committed
5372
		}
5373
	}
5374
</pre>
5375

5376
<h3 id="Continue_statements">Continue statements</h3>
5377

Rob Pike's avatar
Rob Pike committed
5378 5379
<p>
A "continue" statement begins the next iteration of the
5380
innermost <a href="#For_statements">"for" loop</a> at its post statement.
5381
The "for" loop must be within the same function.
Rob Pike's avatar
Rob Pike committed
5382
</p>
5383

5384
<pre class="ebnf">
5385
ContinueStmt = "continue" [ Label ] .
5386
</pre>
5387

Rob Pike's avatar
Rob Pike committed
5388
<p>
5389 5390
If there is a label, it must be that of an enclosing
"for" statement, and that is the one whose execution
5391
advances.
Rob Pike's avatar
Rob Pike committed
5392
</p>
5393

5394 5395 5396 5397 5398 5399 5400 5401 5402 5403 5404 5405
<pre>
RowLoop:
	for y, row := range rows {
		for x, data := range row {
			if data == endOfRow {
				continue RowLoop
			}
			row[x] = data + bias(x, y)
		}
	}
</pre>

5406
<h3 id="Goto_statements">Goto statements</h3>
5407

Rob Pike's avatar
Rob Pike committed
5408
<p>
5409 5410
A "goto" statement transfers control to the statement with the corresponding label
within the same function.
Rob Pike's avatar
Rob Pike committed
5411
</p>
5412

5413
<pre class="ebnf">
5414
GotoStmt = "goto" Label .
5415
</pre>
5416

5417 5418 5419
<pre>
goto Error
</pre>
5420

Rob Pike's avatar
Rob Pike committed
5421 5422
<p>
Executing the "goto" statement must not cause any variables to come into
Russ Cox's avatar
Russ Cox committed
5423 5424
<a href="#Declarations_and_scope">scope</a> that were not already in scope at the point of the goto.
For instance, this example:
Rob Pike's avatar
Rob Pike committed
5425
</p>
5426

5427
<pre>
Russ Cox's avatar
Russ Cox committed
5428 5429
	goto L  // BAD
	v := 3
5430 5431
L:
</pre>
5432

Rob Pike's avatar
Rob Pike committed
5433 5434 5435
<p>
is erroneous because the jump to label <code>L</code> skips
the creation of <code>v</code>.
Russ Cox's avatar
Russ Cox committed
5436 5437 5438 5439 5440 5441 5442 5443 5444 5445 5446 5447 5448 5449 5450 5451 5452 5453 5454 5455 5456
</p>

<p>
A "goto" statement outside a <a href="#Blocks">block</a> cannot jump to a label inside that block.
For instance, this example:
</p>

<pre>
if n%2 == 1 {
	goto L1
}
for n &gt; 0 {
	f()
	n--
L1:
	f()
	n--
}
</pre>

<p>
5457
is erroneous because the label <code>L1</code> is inside
Russ Cox's avatar
Russ Cox committed
5458
the "for" statement's block but the <code>goto</code> is not.
Rob Pike's avatar
Rob Pike committed
5459
</p>
5460

5461
<h3 id="Fallthrough_statements">Fallthrough statements</h3>
5462

Rob Pike's avatar
Rob Pike committed
5463 5464
<p>
A "fallthrough" statement transfers control to the first statement of the
Shenghou Ma's avatar
Shenghou Ma committed
5465
next case clause in an <a href="#Expression_switches">expression "switch" statement</a>.
5466
It may be used only as the final non-empty statement in such a clause.
Rob Pike's avatar
Rob Pike committed
5467
</p>
5468

5469
<pre class="ebnf">
5470
FallthroughStmt = "fallthrough" .
5471
</pre>
5472 5473


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

Rob Pike's avatar
Rob Pike committed
5476
<p>
5477 5478 5479 5480 5481
A "defer" statement invokes a function whose execution is deferred
to the moment the surrounding function returns, either because the
surrounding function executed a <a href="#Return_statements">return statement</a>,
reached the end of its <a href="#Function_declarations">function body</a>,
or because the corresponding goroutine is <a href="#Handling_panics">panicking</a>.
Rob Pike's avatar
Rob Pike committed
5482
</p>
Robert Griesemer's avatar
Robert Griesemer committed
5483

5484
<pre class="ebnf">
5485
DeferStmt = "defer" Expression .
5486
</pre>
Robert Griesemer's avatar
Robert Griesemer committed
5487

Rob Pike's avatar
Rob Pike committed
5488
<p>
5489 5490 5491 5492 5493 5494
The expression must be a function or method call; it cannot be parenthesized.
Calls of built-in functions are restricted as for
<a href="#Expression_statements">expression statements</a>.
</p>

<p>
5495
Each time a "defer" statement
5496 5497
executes, the function value and parameters to the call are
<a href="#Calls">evaluated as usual</a>
5498 5499
and saved anew but the actual function is not invoked.
Instead, deferred functions are invoked immediately before
5500 5501
the surrounding function returns, in the reverse order
they were deferred.
5502 5503
If a deferred function value evaluates
to <code>nil</code>, execution <a href="#Handling_panics">panics</a>
Rob Pike's avatar
Rob Pike committed
5504
when the function is invoked, not when the "defer" statement is executed.
5505 5506 5507 5508
</p>

<p>
For instance, if the deferred function is
Rob Pike's avatar
Rob Pike committed
5509
a <a href="#Function_literals">function literal</a> and the surrounding
5510 5511 5512
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.
5513 5514
If the deferred function has any return values, they are discarded when
the function completes.
5515 5516 5517
(See also the section on <a href="#Handling_panics">handling panics</a>.)
</p>

5518
<pre>
5519 5520
lock(l)
defer unlock(l)  // unlocking happens before surrounding function returns
Robert Griesemer's avatar
Robert Griesemer committed
5521

5522 5523
// prints 3 2 1 0 before surrounding function returns
for i := 0; i &lt;= 3; i++ {
5524
	defer fmt.Print(i)
5525
}
5526 5527 5528 5529 5530 5531 5532 5533

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

5536
<h2 id="Built-in_functions">Built-in functions</h2>
5537 5538

<p>
Rob Pike's avatar
Rob Pike committed
5539
Built-in functions are
5540 5541 5542 5543
<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
5544

5545 5546 5547 5548 5549 5550
<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>

5551
<h3 id="Close">Close</h3>
5552

Rob Pike's avatar
Rob Pike committed
5553
<p>
5554
For a channel <code>c</code>, the built-in function <code>close(c)</code>
5555 5556 5557 5558
records that no more values will be sent on the channel.
It is an error if <code>c</code> is a receive-only channel.
Sending to or closing a closed channel causes a <a href="#Run_time_panics">run-time panic</a>.
Closing the nil channel also causes a <a href="#Run_time_panics">run-time panic</a>.
5559
After calling <code>close</code>, and after any previously
5560
sent values have been received, receive operations will return
5561
the zero value for the channel's type without blocking.
5562 5563
The multi-valued <a href="#Receive_operator">receive operation</a>
returns a received value along with an indication of whether the channel is closed.
Rob Pike's avatar
Rob Pike committed
5564
</p>
5565

5566

5567
<h3 id="Length_and_capacity">Length and capacity</h3>
5568

Rob Pike's avatar
Rob Pike committed
5569
<p>
5570 5571 5572
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>.
5573 5574
</p>

5575
<pre class="grammar">
5576
Call      Argument type    Result
5577

5578 5579 5580 5581 5582
len(s)    string type      string length in bytes
          [n]T, *[n]T      array length (== n)
          []T              slice length
          map[K]T          map length (number of defined keys)
          chan T           number of elements queued in channel buffer
5583

5584 5585 5586
cap(s)    [n]T, *[n]T      array length (== n)
          []T              slice capacity
          chan T           channel buffer capacity
5587
</pre>
5588

5589 5590 5591 5592 5593
<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>
5594

5595
<pre>
Anthony Martin's avatar
Anthony Martin committed
5596
0 &lt;= len(s) &lt;= cap(s)
5597
</pre>
5598

5599
<p>
5600
The length of a <code>nil</code> slice, map or channel is 0.
5601
The capacity of a <code>nil</code> slice or channel is 0.
5602 5603
</p>

5604
<p>
5605 5606 5607 5608
The expression <code>len(s)</code> is <a href="#Constants">constant</a> if
<code>s</code> is a string constant. The expressions <code>len(s)</code> and
<code>cap(s)</code> are constants if the type of <code>s</code> is an array
or pointer to an array and the expression <code>s</code> does not contain
5609
<a href="#Receive_operator">channel receives</a> or (non-constant)
5610 5611 5612
<a href="#Calls">function calls</a>; in this case <code>s</code> is not evaluated.
Otherwise, invocations of <code>len</code> and <code>cap</code> are not
constant and <code>s</code> is evaluated.
5613
</p>
5614

5615 5616 5617 5618 5619 5620
<pre>
const (
	c1 = imag(2i)                    // imag(2i) = 2.0 is a constant
	c2 = len([10]float64{2})         // [10]float64{2} contains no function calls
	c3 = len([10]float64{c1})        // [10]float64{c1} contains no function calls
	c4 = len([10]float64{imag(2i)})  // imag(2i) is a constant and no function call is issued
Shenghou Ma's avatar
Shenghou Ma committed
5621
	c5 = len([10]float64{imag(z)})   // invalid: imag(z) is a (non-constant) function call
5622 5623 5624
)
var z complex128
</pre>
5625

5626
<h3 id="Allocation">Allocation</h3>
5627

Rob Pike's avatar
Rob Pike committed
5628
<p>
Robert Griesemer's avatar
Robert Griesemer committed
5629 5630 5631 5632 5633
The built-in function <code>new</code> takes a type <code>T</code>,
allocates storage for a <a href="#Variables">variable</a> of that type
at run time, and returns a value of type <code>*T</code>
<a href="#Pointer_types">pointing</a> to it.
The variable is initialized as described in the section on
5634
<a href="#The_zero_value">initial values</a>.
Rob Pike's avatar
Rob Pike committed
5635
</p>
5636

5637
<pre class="grammar">
5638 5639
new(T)
</pre>
5640

Rob Pike's avatar
Rob Pike committed
5641
<p>
5642
For instance
Rob Pike's avatar
Rob Pike committed
5643
</p>
5644

5645
<pre>
5646
type S struct { a int; b float64 }
5647 5648
new(S)
</pre>
5649

5650
<p>
Robert Griesemer's avatar
Robert Griesemer committed
5651
allocates storage for a variable of type <code>S</code>,
Rob Pike's avatar
Rob Pike committed
5652 5653
initializes it (<code>a=0</code>, <code>b=0.0</code>),
and returns a value of type <code>*S</code> containing the address
Robert Griesemer's avatar
Robert Griesemer committed
5654
of the location.
Rob Pike's avatar
Rob Pike committed
5655
</p>
Robert Griesemer's avatar
Robert Griesemer committed
5656

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

Rob Pike's avatar
Rob Pike committed
5659 5660 5661 5662 5663
<p>
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>).
5664 5665
The memory is initialized as described in the section on
<a href="#The_zero_value">initial values</a>.
Rob Pike's avatar
Rob Pike committed
5666
</p>
Robert Griesemer's avatar
Robert Griesemer committed
5667

5668
<pre class="grammar">
5669
Call             Type T     Result
Robert Griesemer's avatar
Robert Griesemer committed
5670

5671 5672
make(T, n)       slice      slice of type T with length n and capacity n
make(T, n, m)    slice      slice of type T with length n and capacity m
Robert Griesemer's avatar
Robert Griesemer committed
5673

5674
make(T)          map        map of type T
5675
make(T, n)       map        map of type T with initial space for approximately n elements
5676

5677 5678
make(T)          channel    unbuffered channel of type T
make(T, n)       channel    buffered channel of type T, buffer size n
5679
</pre>
Robert Griesemer's avatar
Robert Griesemer committed
5680 5681


Rob Pike's avatar
Rob Pike committed
5682
<p>
5683
The size arguments <code>n</code> and <code>m</code> must be of integer type or untyped.
5684 5685 5686
A <a href="#Constants">constant</a> size argument must be non-negative and
representable by a value of type <code>int</code>.
If both <code>n</code> and <code>m</code> are provided and are constant, then
5687 5688 5689
<code>n</code> must be no larger than <code>m</code>.
If <code>n</code> is negative or larger than <code>m</code> at run time,
a <a href="#Run_time_panics">run-time panic</a> occurs.
Rob Pike's avatar
Rob Pike committed
5690
</p>
Robert Griesemer's avatar
Robert Griesemer committed
5691

5692
<pre>
5693
s := make([]int, 10, 100)       // slice with len(s) == 10, cap(s) == 100
5694
s := make([]int, 1e3)           // slice with len(s) == cap(s) == 1000
5695
s := make([]int, 1&lt;&lt;63)         // illegal: len(s) is not representable by a value of type int
5696
s := make([]int, 10, 0)         // illegal: len(s) > cap(s)
5697
c := make(chan int, 10)         // channel with a buffer size of 10
5698
m := make(map[string]int, 100)  // map with initial space for approximately 100 elements
5699
</pre>
5700

5701 5702 5703 5704 5705 5706
<p>
Calling <code>make</code> with a map type and size hint <code>n</code> will
create a map with initial space to hold <code>n</code> map elements.
The precise behavior is implementation-dependent.
</p>

5707

Robert Griesemer's avatar
Robert Griesemer committed
5708
<h3 id="Appending_and_copying_slices">Appending to and copying slices</h3>
5709 5710

<p>
5711 5712 5713 5714
The built-in functions <code>append</code> and <code>copy</code> assist in
common slice operations.
For both functions, the result is independent of whether the memory referenced
by the arguments overlaps.
Robert Griesemer's avatar
Robert Griesemer committed
5715 5716 5717
</p>

<p>
5718 5719
The <a href="#Function_types">variadic</a> function <code>append</code>
appends zero or more values <code>x</code>
5720 5721
to <code>s</code> of type <code>S</code>, which must be a slice type, and
returns the resulting slice, also of type <code>S</code>.
5722 5723 5724 5725
The values <code>x</code> are passed to a parameter of type <code>...T</code>
where <code>T</code> is the <a href="#Slice_types">element type</a> of
<code>S</code> and the respective
<a href="#Passing_arguments_to_..._parameters">parameter passing rules</a> apply.
5726 5727 5728 5729
As a special case, <code>append</code> also accepts a first argument
assignable to type <code>[]byte</code> with a second argument of
string type followed by <code>...</code>. This form appends the
bytes of the string.
Robert Griesemer's avatar
Robert Griesemer committed
5730 5731 5732
</p>

<pre class="grammar">
5733
append(s S, x ...T) S  // T is the element type of S
Robert Griesemer's avatar
Robert Griesemer committed
5734 5735 5736 5737
</pre>

<p>
If the capacity of <code>s</code> is not large enough to fit the additional
5738 5739 5740
values, <code>append</code> allocates a new, sufficiently large underlying
array that fits both the existing slice elements and the additional values.
Otherwise, <code>append</code> re-uses the underlying array.
Robert Griesemer's avatar
Robert Griesemer committed
5741 5742 5743 5744
</p>

<pre>
s0 := []int{0, 0}
5745 5746 5747 5748
s1 := append(s0, 2)                // append a single element     s1 == []int{0, 0, 2}
s2 := append(s1, 3, 5, 7)          // append multiple elements    s2 == []int{0, 0, 2, 3, 5, 7}
s3 := append(s2, s0...)            // append a slice              s3 == []int{0, 0, 2, 3, 5, 7, 0, 0}
s4 := append(s3[3:6], s3[2:]...)   // append overlapping slice    s4 == []int{3, 5, 7, 2, 3, 5, 7, 0, 0}
5749 5750

var t []interface{}
5751
t = append(t, 42, 3.1415, "foo")   //                             t == []interface{}{42, 3.1415, "foo"}
5752 5753

var b []byte
5754
b = append(b, "bar"...)            // append string contents      b == []byte{'b', 'a', 'r' }
Robert Griesemer's avatar
Robert Griesemer committed
5755 5756 5757 5758
</pre>

<p>
The function <code>copy</code> copies slice elements from
5759
a source <code>src</code> to a destination <code>dst</code> and returns the
5760
number of elements copied.
5761
Both arguments must have <a href="#Type_identity">identical</a> element type <code>T</code> and must be
5762
<a href="#Assignability">assignable</a> to a slice of type <code>[]T</code>.
5763
The number of elements copied is the minimum of
5764
<code>len(src)</code> and <code>len(dst)</code>.
5765 5766 5767
As a special case, <code>copy</code> also accepts a destination argument assignable
to type <code>[]byte</code> with a source argument of a string type.
This form copies the bytes from the string into the byte slice.
5768 5769 5770 5771
</p>

<pre class="grammar">
copy(dst, src []T) int
5772
copy(dst []byte, src string) int
5773 5774 5775 5776 5777 5778 5779
</pre>

<p>
Examples:
</p>

<pre>
5780 5781
var a = [...]int{0, 1, 2, 3, 4, 5, 6, 7}
var s = make([]int, 6)
5782 5783 5784 5785
var b = make([]byte, 5)
n1 := copy(s, a[0:])            // 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}
n3 := copy(b, "Hello, World!")  // n3 == 5, b == []byte("Hello")
5786 5787
</pre>

5788 5789 5790 5791 5792 5793 5794 5795 5796 5797 5798 5799 5800 5801 5802

<h3 id="Deletion_of_map_elements">Deletion of map elements</h3>

<p>
The built-in function <code>delete</code> removes the element with key
<code>k</code> from a <a href="#Map_types">map</a> <code>m</code>. The
type of <code>k</code> must be <a href="#Assignability">assignable</a>
to the key type of <code>m</code>.
</p>

<pre class="grammar">
delete(m, k)  // remove element m[k] from map m
</pre>

<p>
5803 5804
If the map <code>m</code> is <code>nil</code> or the element <code>m[k]</code>
does not exist, <code>delete</code> is a no-op.
5805 5806 5807
</p>


5808
<h3 id="Complex_numbers">Manipulating complex numbers</h3>
Rob Pike's avatar
Rob Pike committed
5809 5810 5811

<p>
Three functions assemble and disassemble complex numbers.
5812
The built-in function <code>complex</code> constructs a complex
Rob Pike's avatar
Rob Pike committed
5813 5814 5815 5816 5817 5818
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">
5819
complex(realPart, imaginaryPart floatT) complexT
Rob Pike's avatar
Rob Pike committed
5820 5821 5822 5823 5824 5825
real(complexT) floatT
imag(complexT) floatT
</pre>

<p>
The type of the arguments and return value correspond.
5826
For <code>complex</code>, the two arguments must be of the same
Rob Pike's avatar
Rob Pike committed
5827 5828
floating-point type and the return type is the complex type
with the corresponding floating-point constituents:
5829 5830 5831 5832 5833 5834 5835 5836 5837 5838 5839 5840 5841 5842 5843 5844 5845 5846 5847 5848 5849 5850
<code>complex64</code> for <code>float32</code> arguments, and
<code>complex128</code> for <code>float64</code> arguments.
If one of the arguments evaluates to an untyped constant, it is first
<a href="#Conversions">converted</a> to the type of the other argument.
If both arguments evaluate to untyped constants, they must be non-complex
numbers or their imaginary parts must be zero, and the return value of
the function is an untyped complex constant.
</p>

<p>
For <code>real</code> and <code>imag</code>, the argument must be
of complex type, and the return type is the corresponding floating-point
type: <code>float32</code> for a <code>complex64</code> argument, and
<code>float64</code> for a <code>complex128</code> argument.
If the argument evaluates to an untyped constant, it must be a number,
and the return value of the function is an untyped floating-point constant.
</p>

<p>
The <code>real</code> and <code>imag</code> functions together form the inverse of
<code>complex</code>, so for a value <code>z</code> of a complex type <code>Z</code>,
<code>z&nbsp;==&nbsp;Z(complex(real(z),&nbsp;imag(z)))</code>.
Rob Pike's avatar
Rob Pike committed
5851 5852 5853 5854 5855 5856 5857 5858
</p>

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

<pre>
5859
var a = complex(2, -2)             // complex128
5860
const b = complex(1.0, -1.4)       // untyped complex constant 1 - 1.4i
5861 5862
x := float32(math.Cos(math.Pi/2))  // float32
var c64 = complex(5, -x)           // complex64
5863 5864
var s uint = complex(1, 0)         // untyped complex constant 1 + 0i can be converted to uint
_ = complex(1, 2&lt;&lt;s)               // illegal: 2 assumes floating-point type, cannot shift
5865
var rl = real(c64)                 // float32
5866 5867
var im = imag(a)                   // float64
const c = imag(b)                  // untyped constant -1.4
5868
_ = imag(3 &lt;&lt; s)                   // illegal: 3 assumes complex type, cannot shift
Rob Pike's avatar
Rob Pike committed
5869 5870
</pre>

Rob Pike's avatar
Rob Pike committed
5871 5872 5873 5874
<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>
5875
and program-defined error conditions.
Rob Pike's avatar
Rob Pike committed
5876 5877 5878 5879 5880 5881 5882 5883
</p>

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

<p>
5884 5885 5886
While executing a function <code>F</code>,
an explicit call to <code>panic</code> or a <a href="#Run_time_panics">run-time panic</a>
terminates the execution of <code>F</code>.
5887
Any functions <a href="#Defer_statements">deferred</a> by <code>F</code>
5888 5889 5890 5891
are then executed as usual.
Next, any deferred functions run by <code>F's</code> caller are run,
and so on up to any deferred by the top-level function in the executing goroutine.
At that point, the program is terminated and the error
5892 5893
condition is reported, including the value of the argument to <code>panic</code>.
This termination sequence is called <i>panicking</i>.
Rob Pike's avatar
Rob Pike committed
5894 5895
</p>

5896 5897 5898 5899 5900 5901
<pre>
panic(42)
panic("unreachable")
panic(Error("cannot parse"))
</pre>

Rob Pike's avatar
Rob Pike committed
5902 5903
<p>
The <code>recover</code> function allows a program to manage behavior
5904 5905 5906 5907 5908 5909 5910 5911 5912 5913 5914 5915 5916 5917 5918 5919
of a panicking goroutine.
Suppose a function <code>G</code> defers a function <code>D</code> that calls
<code>recover</code> and a panic occurs in a function on the same goroutine in which <code>G</code>
is executing.
When the running of deferred functions reaches <code>D</code>,
the return value of <code>D</code>'s call to <code>recover</code> will be the value passed to the call of <code>panic</code>.
If <code>D</code> returns normally, without starting a new
<code>panic</code>, the panicking sequence stops. In that case,
the state of functions called between <code>G</code> and the call to <code>panic</code>
is discarded, and normal execution resumes.
Any functions deferred by <code>G</code> before <code>D</code> are then run and <code>G</code>'s
execution terminates by returning to its caller.
</p>

<p>
The return value of <code>recover</code> is <code>nil</code> if any of the following conditions holds:
Rob Pike's avatar
Rob Pike committed
5920
</p>
5921 5922 5923 5924 5925 5926 5927 5928 5929 5930 5931
<ul>
<li>
<code>panic</code>'s argument was <code>nil</code>;
</li>
<li>
the goroutine is not panicking;
</li>
<li>
<code>recover</code> was not called directly by a deferred function.
</li>
</ul>
Rob Pike's avatar
Rob Pike committed
5932 5933

<p>
5934 5935 5936
The <code>protect</code> function in the example below invokes
the function argument <code>g</code> and protects callers from
run-time panics raised by <code>g</code>.
Rob Pike's avatar
Rob Pike committed
5937 5938 5939
</p>

<pre>
5940
func protect(g func()) {
Rob Pike's avatar
Rob Pike committed
5941
	defer func() {
5942
		log.Println("done")  // Println executes normally even if there is a panic
Rob Pike's avatar
Rob Pike committed
5943
		if x := recover(); x != nil {
5944
			log.Printf("run time panic: %v", x)
Rob Pike's avatar
Rob Pike committed
5945
		}
5946
	}()
5947 5948
	log.Println("start")
	g()
Rob Pike's avatar
Rob Pike committed
5949 5950 5951
}
</pre>

5952

5953 5954
<h3 id="Bootstrapping">Bootstrapping</h3>

5955
<p>
5956 5957 5958
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.
5959 5960
</p>

5961
<pre class="grammar">
5962
Function   Behavior
5963 5964 5965 5966 5967

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>

5968 5969 5970
<p>
Implementation restriction: <code>print</code> and <code>println</code> need not
accept arbitrary argument types, but printing of boolean, numeric, and string
5971
<a href="#Types">types</a> must be supported.
5972
</p>
5973

5974
<h2 id="Packages">Packages</h2>
5975

Rob Pike's avatar
Rob Pike committed
5976 5977
<p>
Go programs are constructed by linking together <i>packages</i>.
5978 5979 5980 5981 5982
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
5983 5984
</p>

5985
<h3 id="Source_file_organization">Source file organization</h3>
Rob Pike's avatar
Rob Pike committed
5986 5987 5988 5989 5990 5991

<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
5992
types, variables, and constants.
Rob Pike's avatar
Rob Pike committed
5993
</p>
5994

5995
<pre class="ebnf">
5996
SourceFile       = PackageClause ";" { ImportDecl ";" } { TopLevelDecl ";" } .
5997
</pre>
5998

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

6001
<p>
Rob Pike's avatar
Rob Pike committed
6002 6003 6004
A package clause begins each source file and defines the package
to which the file belongs.
</p>
6005

6006
<pre class="ebnf">
Robert Griesemer's avatar
Robert Griesemer committed
6007 6008
PackageClause  = "package" PackageName .
PackageName    = identifier .
Rob Pike's avatar
Rob Pike committed
6009
</pre>
6010

Robert Griesemer's avatar
Robert Griesemer committed
6011 6012 6013 6014
<p>
The PackageName must not be the <a href="#Blank_identifier">blank identifier</a>.
</p>

Rob Pike's avatar
Rob Pike committed
6015 6016
<pre>
package math
6017
</pre>
6018

Rob Pike's avatar
Rob Pike committed
6019 6020 6021 6022
<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>
6023

6024
<h3 id="Import_declarations">Import declarations</h3>
Rob Pike's avatar
Rob Pike committed
6025 6026

<p>
6027 6028 6029
An import declaration states that the source file containing the declaration
depends on functionality of the <i>imported</i> package
(<a href="#Program_initialization_and_execution">§Program initialization and execution</a>)
6030
and enables access to <a href="#Exported_identifiers">exported</a> identifiers
6031 6032
of that package.
The import names an identifier (PackageName) to be used for access and an ImportPath
Rob Pike's avatar
Rob Pike committed
6033
that specifies the package to be imported.
Rob Pike's avatar
Rob Pike committed
6034
</p>
6035

6036
<pre class="ebnf">
6037
ImportDecl       = "import" ( ImportSpec | "(" { ImportSpec ";" } ")" ) .
6038
ImportSpec       = [ "." | PackageName ] ImportPath .
6039
ImportPath       = string_lit .
6040
</pre>
6041

6042
<p>
Rob Pike's avatar
Rob Pike committed
6043
The PackageName is used in <a href="#Qualified_identifiers">qualified identifiers</a>
6044
to access exported identifiers of the package within the importing source file.
Rob Pike's avatar
Rob Pike committed
6045 6046
It is declared in the <a href="#Blocks">file block</a>.
If the PackageName is omitted, it defaults to the identifier specified in the
Robert Griesemer's avatar
Robert Griesemer committed
6047
<a href="#Package_clause">package clause</a> of the imported package.
Rob Pike's avatar
Rob Pike committed
6048
If an explicit period (<code>.</code>) appears instead of a name, all the
6049 6050
package's exported identifiers declared in that package's
<a href="#Blocks">package block</a> will be declared in the importing source
6051
file's file block and must be accessed without a qualifier.
Rob Pike's avatar
Rob Pike committed
6052 6053 6054 6055 6056 6057
</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
6058
</p>
Russ Cox's avatar
Russ Cox committed
6059

6060 6061 6062
<p>
Implementation restriction: A compiler may restrict ImportPaths to
non-empty strings using only characters belonging to
6063
<a href="http://www.unicode.org/versions/Unicode6.3.0/">Unicode's</a>
6064
L, M, N, P, and S general categories (the Graphic characters without
6065 6066 6067
spaces) and may also exclude the characters
<code>!"#$%&amp;'()*,:;&lt;=&gt;?[\]^`{|}</code>
and the Unicode replacement character U+FFFD.
6068 6069
</p>

6070
<p>
Rob Pike's avatar
Rob Pike committed
6071 6072 6073
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
6074
<code>"lib/math"</code>.
6075
This table illustrates how <code>Sin</code> is accessed in files
Rob Pike's avatar
Rob Pike committed
6076 6077
that import the package after the
various types of import declaration.
Rob Pike's avatar
Rob Pike committed
6078
</p>
6079

Rob Pike's avatar
Rob Pike committed
6080
<pre class="grammar">
6081
Import declaration          Local name of Sin
Rob Pike's avatar
Rob Pike committed
6082 6083

import   "lib/math"         math.Sin
6084
import m "lib/math"         m.Sin
Rob Pike's avatar
Rob Pike committed
6085
import . "lib/math"         Sin
6086
</pre>
6087

6088
<p>
Rob Pike's avatar
Rob Pike committed
6089 6090
An import declaration declares a dependency relation between
the importing and imported package.
6091 6092
It is illegal for a package to import itself, directly or indirectly,
or to directly import a package without
6093 6094 6095 6096 6097 6098 6099 6100 6101 6102
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>


6103
<h3 id="An_example_package">An example package</h3>
Rob Pike's avatar
Rob Pike committed
6104 6105 6106 6107

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

6109 6110 6111
<pre>
package main

Rob Pike's avatar
Rob Pike committed
6112 6113
import "fmt"

6114
// Send the sequence 2, 3, 4, … to channel 'ch'.
6115
func generate(ch chan&lt;- int) {
6116
	for i := 2; ; i++ {
6117
		ch &lt;- i  // Send 'i' to channel 'ch'.
6118
	}
6119 6120
}

Fazlul Shahriar's avatar
Fazlul Shahriar committed
6121
// Copy the values from channel 'src' to channel 'dst',
6122
// removing those divisible by 'prime'.
6123
func filter(src &lt;-chan int, dst chan&lt;- int, prime int) {
6124
	for i := range src {  // Loop over values received from 'src'.
6125
		if i%prime != 0 {
6126
			dst &lt;- i  // Send 'i' to channel 'dst'.
6127 6128
		}
	}
6129 6130 6131 6132
}

// The prime sieve: Daisy-chain filter processes together.
func sieve() {
6133 6134
	ch := make(chan int)  // Create a new channel.
	go generate(ch)       // Start generate() as a subprocess.
6135
	for {
6136 6137 6138 6139 6140
		prime := &lt;-ch
		fmt.Print(prime, "\n")
		ch1 := make(chan int)
		go filter(ch, ch1, prime)
		ch = ch1
6141
	}
6142
}
6143

6144
func main() {
6145
	sieve()
6146 6147
}
</pre>
6148

6149
<h2 id="Program_initialization_and_execution">Program initialization and execution</h2>
6150

6151
<h3 id="The_zero_value">The zero value</h3>
Rob Pike's avatar
Rob Pike committed
6152
<p>
Robert Griesemer's avatar
Robert Griesemer committed
6153 6154 6155 6156 6157 6158
When storage is allocated for a <a href="#Variables">variable</a>,
either through a declaration or a call of <code>new</code>, or when
a new value is created, either through a composite literal or a call
of <code>make</code>,
and no explicit initialization is provided, the variable or value is
given a default value.  Each element of such a variable or value is
6159
set to the <i>zero value</i> for its type: <code>false</code> for booleans,
Rob Pike's avatar
Rob Pike committed
6160
<code>0</code> for integers, <code>0.0</code> for floats, <code>""</code>
6161
for strings, and <code>nil</code> for pointers, functions, interfaces, slices, channels, and maps.
Rob Pike's avatar
Rob Pike committed
6162
This initialization is done recursively, so for instance each element of an
Rob Pike's avatar
Rob Pike committed
6163 6164
array of structs will have its fields zeroed if no value is specified.
</p>
6165
<p>
6166
These two simple declarations are equivalent:
Rob Pike's avatar
Rob Pike committed
6167
</p>
6168

6169
<pre>
6170 6171
var i int
var i int = 0
6172
</pre>
6173

Rob Pike's avatar
Rob Pike committed
6174
<p>
6175
After
Rob Pike's avatar
Rob Pike committed
6176
</p>
6177

6178
<pre>
6179
type T struct { i int; f float64; next *T }
6180
t := new(T)
6181
</pre>
6182

Rob Pike's avatar
Rob Pike committed
6183
<p>
6184
the following holds:
Rob Pike's avatar
Rob Pike committed
6185
</p>
6186

6187 6188 6189 6190 6191
<pre>
t.i == 0
t.f == 0.0
t.next == nil
</pre>
6192

Rob Pike's avatar
Rob Pike committed
6193 6194 6195 6196 6197 6198 6199 6200
<p>
The same would also be true after
</p>

<pre>
var t T
</pre>

6201
<h3 id="Package_initialization">Package initialization</h3>
6202 6203 6204 6205 6206 6207 6208 6209 6210 6211 6212 6213 6214 6215 6216 6217 6218

<p>
Within a package, package-level variables are initialized in
<i>declaration order</i> but after any of the variables
they <i>depend</i> on.
</p>

<p>
More precisely, a package-level variable is considered <i>ready for
initialization</i> if it is not yet initialized and either has
no <a href="#Variable_declarations">initialization expression</a> or
its initialization expression has no dependencies on uninitialized variables.
Initialization proceeds by repeatedly initializing the next package-level
variable that is earliest in declaration order and ready for initialization,
until there are no variables ready for initialization.
</p>

6219
<p>
6220 6221 6222 6223 6224 6225 6226 6227 6228 6229
If any variables are still uninitialized when this
process ends, those variables are part of one or more initialization cycles,
and the program is not valid.
</p>

<p>
The declaration order of variables declared in multiple files is determined
by the order in which the files are presented to the compiler: Variables
declared in the first file are declared before any of the variables declared
in the second file, and so on.
6230 6231 6232 6233 6234
</p>

<p>
Dependency analysis does not rely on the actual values of the
variables, only on lexical <i>references</i> to them in the source,
6235 6236 6237
analyzed transitively. For instance, if a variable <code>x</code>'s
initialization expression refers to a function whose body refers to
variable <code>y</code> then <code>x</code> depends on <code>y</code>.
6238 6239 6240 6241 6242 6243 6244 6245 6246 6247 6248 6249
Specifically:
</p>

<ul>
<li>
A reference to a variable or function is an identifier denoting that
variable or function.
</li>

<li>
A reference to a method <code>m</code> is a
<a href="#Method_values">method value</a> or
6250
<a href="#Method_expressions">method expression</a> of the form
6251 6252 6253 6254 6255 6256 6257 6258
<code>t.m</code>, where the (static) type of <code>t</code> is
not an interface type, and the method <code>m</code> is in the
<a href="#Method_sets">method set</a> of <code>t</code>.
It is immaterial whether the resulting function value
<code>t.m</code> is invoked.
</li>

<li>
6259
A variable, function, or method <code>x</code> depends on a variable
6260 6261 6262 6263 6264 6265
<code>y</code> if <code>x</code>'s initialization expression or body
(for functions and methods) contains a reference to <code>y</code>
or to a function or method that depends on <code>y</code>.
</li>
</ul>

Rob Pike's avatar
Rob Pike committed
6266
<p>
6267 6268 6269
Dependency analysis is performed per package; only references referring
to variables, functions, and methods declared in the current package
are considered.
Rob Pike's avatar
Rob Pike committed
6270
</p>
6271 6272 6273 6274 6275

<p>
For example, given the declarations
</p>

Rob Pike's avatar
Rob Pike committed
6276
<pre>
6277 6278 6279 6280 6281 6282 6283 6284 6285 6286 6287
var (
	a = c + b
	b = f()
	c = f()
	d = 3
)

func f() int {
	d++
	return d
}
Rob Pike's avatar
Rob Pike committed
6288
</pre>
6289

Rob Pike's avatar
Rob Pike committed
6290
<p>
6291
the initialization order is <code>d</code>, <code>b</code>, <code>c</code>, <code>a</code>.
Rob Pike's avatar
Rob Pike committed
6292
</p>
6293

6294
<p>
6295 6296
Variables may also be initialized using functions named <code>init</code>
declared in the package block, with no arguments and no result parameters.
6297
</p>
6298 6299 6300 6301 6302

<pre>
func init() { … }
</pre>

6303
<p>
6304 6305 6306 6307
Multiple such functions may be defined per package, even within a single
source file. In the package block, the <code>init</code> identifier can
be used only to declare <code>init</code> functions, yet the identifier
itself is not <a href="#Declarations_and_scope">declared</a>. Thus
6308 6309
<code>init</code> functions cannot be referred to from anywhere
in a program.
Rob Pike's avatar
Rob Pike committed
6310
</p>
6311

6312
<p>
6313 6314
A package with no imports is initialized by assigning initial values
to all its package-level variables followed by calling all <code>init</code>
6315 6316
functions in the order they appear in the source, possibly in multiple files,
as presented to the compiler.
6317
If a package has imports, the imported packages are initialized
6318
before initializing the package itself. If multiple packages import
6319 6320 6321
a package, the imported package will be initialized only once.
The importing of packages, by construction, guarantees that there
can be no cyclic initialization dependencies.
Rob Pike's avatar
Rob Pike committed
6322
</p>
6323

6324
<p>
6325 6326 6327 6328 6329 6330 6331 6332
Package initialization&mdash;variable initialization and the invocation of
<code>init</code> functions&mdash;happens in a single goroutine,
sequentially, one package at a time.
An <code>init</code> function may launch other goroutines, which can run
concurrently with the initialization code. However, initialization
always sequences
the <code>init</code> functions: it will not invoke the next one
until the previous one has returned.
Rob Pike's avatar
Rob Pike committed
6333
</p>
6334

6335 6336 6337 6338 6339 6340
<p>
To ensure reproducible initialization behavior, build systems are encouraged
to present multiple files belonging to the same package in lexical file name
order to a compiler.
</p>

6341 6342

<h3 id="Program_execution">Program execution</h3>
6343
<p>
6344 6345 6346 6347
A complete program is created by linking a single, unimported package
called the <i>main package</i> with all the packages it imports, transitively.
The main package must
have package name <code>main</code> and
6348
declare a function <code>main</code> that takes no
6349
arguments and returns no value.
Rob Pike's avatar
Rob Pike committed
6350
</p>
6351

6352
<pre>
6353
func main() { … }
6354
</pre>
6355

Rob Pike's avatar
Rob Pike committed
6356
<p>
6357 6358
Program execution begins by initializing the main package and then
invoking the function <code>main</code>.
6359
When that function invocation returns, the program exits.
6360
It does not wait for other (non-<code>main</code>) goroutines to complete.
Rob Pike's avatar
Rob Pike committed
6361
</p>
6362

Russ Cox's avatar
Russ Cox committed
6363 6364 6365 6366 6367 6368 6369 6370 6371 6372 6373 6374 6375 6376 6377 6378 6379 6380 6381 6382 6383 6384
<h2 id="Errors">Errors</h2>

<p>
The predeclared type <code>error</code> is defined as
</p>

<pre>
type error interface {
	Error() string
}
</pre>

<p>
It is the conventional interface for representing an error condition,
with the nil value representing no error.
For instance, a function to read data from a file might be defined:
</p>

<pre>
func Read(f *File, b []byte) (n int, err error)
</pre>

Evan Shaw's avatar
Evan Shaw committed
6385
<h2 id="Run_time_panics">Run-time panics</h2>
Rob Pike's avatar
Rob Pike committed
6386 6387 6388 6389 6390 6391

<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>.
6392
That type satisfies the predeclared interface type
Russ Cox's avatar
Russ Cox committed
6393 6394 6395
<a href="#Errors"><code>error</code></a>.
The exact error values that
represent distinct run-time error conditions are unspecified.
Rob Pike's avatar
Rob Pike committed
6396 6397 6398 6399 6400 6401
</p>

<pre>
package runtime

type Error interface {
Russ Cox's avatar
Russ Cox committed
6402 6403
	error
	// and perhaps other methods
Rob Pike's avatar
Rob Pike committed
6404 6405 6406
}
</pre>

6407
<h2 id="System_considerations">System considerations</h2>
6408

6409
<h3 id="Package_unsafe">Package <code>unsafe</code></h3>
6410

6411
<p>
Rob Pike's avatar
Rob Pike committed
6412 6413 6414
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>
6415 6416
must be vetted manually for type safety and may not be portable.
The package provides the following interface:
6417
</p>
6418

Rob Pike's avatar
Rob Pike committed
6419
<pre class="grammar">
6420
package unsafe
6421

6422 6423
type ArbitraryType int  // shorthand for an arbitrary Go type; it is not a real type
type Pointer *ArbitraryType
6424

6425
func Alignof(variable ArbitraryType) uintptr
Hong Ruiqi's avatar
Hong Ruiqi committed
6426
func Offsetof(selector ArbitraryType) uintptr
6427
func Sizeof(variable ArbitraryType) uintptr
6428
</pre>
6429

6430
<p>
6431 6432
A <code>Pointer</code> is a <a href="#Pointer_types">pointer type</a> but a <code>Pointer</code>
value may not be <a href="#Address_operators">dereferenced</a>.
6433
Any pointer or value of <a href="#Types">underlying type</a> <code>uintptr</code> can be converted to
6434
a type of underlying type <code>Pointer</code> and vice versa.
6435
The effect of converting between <code>Pointer</code> and <code>uintptr</code> is implementation-defined.
6436
</p>
6437 6438 6439 6440 6441 6442 6443

<pre>
var f float64
bits = *(*uint64)(unsafe.Pointer(&amp;f))

type ptr unsafe.Pointer
bits = *(*uint64)(ptr(&amp;f))
6444 6445

var p ptr = nil
6446 6447
</pre>

6448
<p>
6449 6450 6451
The functions <code>Alignof</code> and <code>Sizeof</code> take an expression <code>x</code>
of any type and return the alignment or size, respectively, of a hypothetical variable <code>v</code>
as if <code>v</code> was declared via <code>var v = x</code>.
6452
</p>
6453
<p>
6454
The function <code>Offsetof</code> takes a (possibly parenthesized) <a href="#Selectors">selector</a>
6455 6456 6457 6458
<code>s.f</code>, denoting a field <code>f</code> of the struct denoted by <code>s</code>
or <code>*s</code>, and returns the field offset in bytes relative to the struct's address.
If <code>f</code> is an <a href="#Struct_types">embedded field</a>, it must be reachable
without pointer indirections through fields of the struct.
Rob Pike's avatar
Rob Pike committed
6459
For a struct <code>s</code> with field <code>f</code>:
6460
</p>
6461

6462
<pre>
6463
uintptr(unsafe.Pointer(&amp;s)) + unsafe.Offsetof(s.f) == uintptr(unsafe.Pointer(&amp;s.f))
6464
</pre>
6465

6466
<p>
6467 6468 6469 6470 6471 6472 6473
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>
6474

6475
<pre>
6476
uintptr(unsafe.Pointer(&amp;x)) % unsafe.Alignof(x) == 0
6477
</pre>
6478

6479 6480
<p>
Calls to <code>Alignof</code>, <code>Offsetof</code>, and
6481
<code>Sizeof</code> are compile-time constant expressions of type <code>uintptr</code>.
Rob Pike's avatar
Rob Pike committed
6482
</p>
6483

6484
<h3 id="Size_and_alignment_guarantees">Size and alignment guarantees</h3>
6485

6486
<p>
6487
For the <a href="#Numeric_types">numeric types</a>, the following sizes are guaranteed:
6488
</p>
6489

Rob Pike's avatar
Rob Pike committed
6490
<pre class="grammar">
6491
type                                 size in bytes
6492

6493 6494 6495 6496 6497
byte, uint8, int8                     1
uint16, int16                         2
uint32, int32, float32                4
uint64, int64, float64, complex64     8
complex128                           16
6498
</pre>
6499

6500
<p>
6501
The following minimal alignment properties are guaranteed:
Rob Pike's avatar
Rob Pike committed
6502
</p>
6503
<ol>
6504
<li>For a variable <code>x</code> of any type: <code>unsafe.Alignof(x)</code> is at least 1.
6505
</li>
6506

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

6511
<li>For a variable <code>x</code> of array type: <code>unsafe.Alignof(x)</code> is the same as
6512
	the alignment of a variable of the array's element type.
6513
</li>
6514
</ol>
6515

6516 6517 6518
<p>
A struct or array type has size zero if it contains no fields (or elements, respectively) that have a size greater than zero. Two distinct zero-size variables may have the same address in memory.
</p>