mirror of
https://github.com/golang/go
synced 2024-11-25 07:37:57 -07:00
- blank identifier
- fixed some links DELTA=51 (32 added, 1 deleted, 18 changed) OCL=34497 CL=34515
This commit is contained in:
parent
0631d65dc5
commit
4e56b33b42
@ -167,7 +167,7 @@ _x9
|
|||||||
ThisVariableIsExported
|
ThisVariableIsExported
|
||||||
αβ
|
αβ
|
||||||
</pre>
|
</pre>
|
||||||
Some identifiers are predeclared (§<a href="#Predeclared_identifiers">Predeclared identifiers</a>).
|
Some identifiers are <a href="#Predeclared_identifiers">predeclared</a>.
|
||||||
|
|
||||||
<h3 id="Keywords">Keywords</h3>
|
<h3 id="Keywords">Keywords</h3>
|
||||||
|
|
||||||
@ -665,8 +665,8 @@ new([100]int)[0:50]
|
|||||||
<p>
|
<p>
|
||||||
A struct is a sequence of named
|
A struct is a sequence of named
|
||||||
elements, called fields, with various types. A struct type declares
|
elements, called fields, with various types. A struct type declares
|
||||||
an identifier and type for each field. Within a struct, field identifiers
|
an identifier and type for each field. Within a struct, non-<a href="#Blank_identifier">blank</a>
|
||||||
must be unique.
|
field identifiers must be unique.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="ebnf">
|
<pre class="ebnf">
|
||||||
@ -680,10 +680,11 @@ Tag = StringLit .
|
|||||||
// An empty struct.
|
// An empty struct.
|
||||||
struct {}
|
struct {}
|
||||||
|
|
||||||
// A struct with 5 fields.
|
// A struct with 6 fields.
|
||||||
struct {
|
struct {
|
||||||
x, y int;
|
x, y int;
|
||||||
u float;
|
u float;
|
||||||
|
_ float; // padding
|
||||||
A *[]int;
|
A *[]int;
|
||||||
F func();
|
F func();
|
||||||
}
|
}
|
||||||
@ -1168,6 +1169,9 @@ A bidirectional channel <code>c</code> can be assigned to a channel variable
|
|||||||
<code>v</code> with compatible channel value type
|
<code>v</code> with compatible channel value type
|
||||||
if the type of <code>c</code> or <code>v</code> is unnamed.
|
if the type of <code>c</code> or <code>v</code> is unnamed.
|
||||||
</li>
|
</li>
|
||||||
|
<li>
|
||||||
|
A value can always be assigned to the <a href="#Blank_identifier">blank identifier</a>.
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
<h3 id="Comparison_compatibility">Comparison compatibility</h3>
|
<h3 id="Comparison_compatibility">Comparison compatibility</h3>
|
||||||
@ -1244,7 +1248,7 @@ In addition to explicit blocks in the source code, there are implicit blocks:
|
|||||||
<ol>
|
<ol>
|
||||||
<li>The <i>universe block</i> encompasses all Go source text.</li>
|
<li>The <i>universe block</i> encompasses all Go source text.</li>
|
||||||
|
|
||||||
<li>Each package (§<a href="#Packages">Packages</a>) has a <i>package block</i> containing all
|
<li>Each <a href="#Packages">package</a> has a <i>package block</i> containing all
|
||||||
Go source text for that package.</li>
|
Go source text for that package.</li>
|
||||||
|
|
||||||
<li>Each file has a <i>file block</i> containing all Go source text
|
<li>Each file has a <i>file block</i> containing all Go source text
|
||||||
@ -1258,14 +1262,15 @@ In addition to explicit blocks in the source code, there are implicit blocks:
|
|||||||
</ol>
|
</ol>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Blocks nest and influence scoping (§<a href="#Declarations_and_scope">Declarations and scope</a>).
|
Blocks nest and influence <a href="#Declarations_and_scope">scoping</a>.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
||||||
<h2 id="Declarations_and_scope">Declarations and scope</h2>
|
<h2 id="Declarations_and_scope">Declarations and scope</h2>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
A declaration binds an identifier to a constant, type, variable, function, or package.
|
A declaration binds a non-<a href="#Blank_identifier">blank</a>
|
||||||
|
identifier to a constant, type, variable, function, or package.
|
||||||
Every identifier in a program must be declared.
|
Every identifier in a program must be declared.
|
||||||
No identifier may be declared twice in the same block, and
|
No identifier may be declared twice in the same block, and
|
||||||
no identifier may be declared in both the file and package block.
|
no identifier may be declared in both the file and package block.
|
||||||
@ -1372,6 +1377,14 @@ All other identifiers are not exported.
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
|
||||||
|
<h3 id="Blank_identifier">Blank identifier</h3>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The <i>blank identifier</i>, represented by the underscore character <code>_</code>, may be used in a declaration like
|
||||||
|
any other identifier but the declaration does not introduce a new binding.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
|
||||||
<h3 id="Const_declarations">Const declarations</h3>
|
<h3 id="Const_declarations">Const declarations</h3>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
@ -1449,7 +1462,7 @@ set of related constants:
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
const ( // iota is reset to 0
|
const ( // iota is reset to 0
|
||||||
c0 = iota; // c0 == 0
|
c0 = iota; // c0 == 0
|
||||||
c1 = iota; // c1 == 1
|
c1 = iota; // c1 == 1
|
||||||
c2 = iota // c2 == 2
|
c2 = iota // c2 == 2
|
||||||
@ -1480,7 +1493,8 @@ it is only incremented at a semicolon:
|
|||||||
const (
|
const (
|
||||||
bit0, mask0 = 1 << iota, 1 << iota - 1; // bit0 == 1, mask0 == 0
|
bit0, mask0 = 1 << iota, 1 << iota - 1; // bit0 == 1, mask0 == 0
|
||||||
bit1, mask1; // bit1 == 2, mask1 == 1
|
bit1, mask1; // bit1 == 2, mask1 == 1
|
||||||
bit2, mask2; // bit2 == 4, mask2 == 3
|
_, _; // skips iota == 2
|
||||||
|
bit3, mask3; // bit3 == 8, mask3 == 7
|
||||||
)
|
)
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
@ -1542,6 +1556,8 @@ var (
|
|||||||
i int;
|
i int;
|
||||||
u, v, s = 2.0, 3.0, "bar"
|
u, v, s = 2.0, 3.0, "bar"
|
||||||
)
|
)
|
||||||
|
var re, im = complexSqrt(-1)
|
||||||
|
var _, found = entries[name]; // map lookup; only interested in "found"
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
@ -1589,12 +1605,13 @@ i, j := 0, 10;
|
|||||||
f := func() int { return 7; }
|
f := func() int { return 7; }
|
||||||
ch := make(chan int);
|
ch := make(chan int);
|
||||||
r, w := os.Pipe(fd); // os.Pipe() returns two values
|
r, w := os.Pipe(fd); // os.Pipe() returns two values
|
||||||
|
_, y, _ := coord(p); // coord() returns three values; only interested in y "projection"
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
Unlike regular variable declarations, a short variable declaration may redeclare variables provided they
|
Unlike regular variable declarations, a short variable declaration may redeclare variables provided they
|
||||||
were originally declared in the same block with the same type, and at
|
were originally declared in the same block with the same type, and at
|
||||||
least one of the variables is new. As a consequence, redeclaration
|
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.
|
can only appear in a multi-variable short declaration.
|
||||||
Redeclaration does not introduce a new
|
Redeclaration does not introduce a new
|
||||||
variable; it just assigns a new value to the original.
|
variable; it just assigns a new value to the original.
|
||||||
@ -1734,12 +1751,11 @@ Constants have values that are known at compile time.
|
|||||||
<h3 id="Qualified_identifiers">Qualified identifiers</h3>
|
<h3 id="Qualified_identifiers">Qualified identifiers</h3>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
A qualified identifier is an identifier qualified by a package name prefix.
|
A qualified identifier is a non-<a href="#Blank_identifier">blank</a> identifier qualified by a package name prefix.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="ebnf">
|
<pre class="ebnf">
|
||||||
QualifiedIdent = [ PackageName "." ] identifier .
|
QualifiedIdent = [ PackageName "." ] identifier .
|
||||||
PackageName = identifier .
|
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
@ -1752,6 +1768,10 @@ package, which means that it must begin with a Unicode upper case letter.
|
|||||||
Math.Sin
|
Math.Sin
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<font color=red>TODO: Unify this section with Selectors - it's the same syntax.</font>
|
||||||
|
</p>
|
||||||
|
|
||||||
<h3 id="Composite_literals">Composite literals</h3>
|
<h3 id="Composite_literals">Composite literals</h3>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
@ -1998,7 +2018,7 @@ denotes the field or method <code>f</code> of the value denoted by <code>x</code
|
|||||||
(or of <code>*x</code> if
|
(or of <code>*x</code> if
|
||||||
<code>x</code> is of pointer type). The identifier <code>f</code>
|
<code>x</code> is of pointer type). The identifier <code>f</code>
|
||||||
is called the (field or method)
|
is called the (field or method)
|
||||||
<i>selector</i>.
|
<i>selector</i>; it must not be the <a href="#Blank_identifier">blank identifier</a>.
|
||||||
The type of the expression is the type of <code>f</code>.
|
The type of the expression is the type of <code>f</code>.
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
@ -3096,7 +3116,7 @@ assign_op = [ add_op | mul_op ] "=" .
|
|||||||
|
|
||||||
<p>
|
<p>
|
||||||
Each left-hand side operand must be a variable, pointer indirection,
|
Each left-hand side operand must be a variable, pointer indirection,
|
||||||
field selector, or index expression.
|
field selector, index expression, or <a href="#Blank_identifier">blank identifier</a>.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
@ -3126,7 +3146,7 @@ first, the right hand operand is a single multi-valued expression
|
|||||||
such as a function evaluation or <a href="#Channel_types">channel</a> or
|
such as a function evaluation or <a href="#Channel_types">channel</a> or
|
||||||
<a href="#Map_types">map</a> operation or a <a href="#Type_assertions">type assertion</a>.
|
<a href="#Map_types">map</a> operation or a <a href="#Type_assertions">type assertion</a>.
|
||||||
The number of operands on the left
|
The number of operands on the left
|
||||||
hand side must match the number of values. For instance, If
|
hand side must match the number of values. For instance, if
|
||||||
<code>f</code> is a function returning two values,
|
<code>f</code> is a function returning two values,
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@ -3136,8 +3156,14 @@ x, y = f()
|
|||||||
|
|
||||||
<p>
|
<p>
|
||||||
assigns the first value to <code>x</code> and the second to <code>y</code>.
|
assigns the first value to <code>x</code> and the second to <code>y</code>.
|
||||||
|
The <a href="#Blank_identifier">blank identifier</a> provides a convenient
|
||||||
|
way to ignore values returned by a multi-valued expression:
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
x, _ = f() // ignore second value returned by f()
|
||||||
|
</pre>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
In the second form, the number of operands on the left must equal the number
|
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
|
of expressions on the right, each of which must be single-valued, and the
|
||||||
@ -3998,7 +4024,7 @@ m := make(map[string] int, 100); # map with initial space for 100 elements
|
|||||||
Go programs are constructed by linking together <i>packages</i>.
|
Go programs are constructed by linking together <i>packages</i>.
|
||||||
A package is in turn constructed from one or more source files that
|
A package is in turn constructed from one or more source files that
|
||||||
together provide access to a set of types, constants, functions,
|
together provide access to a set of types, constants, functions,
|
||||||
and variables. Those elements may be <i>imported</i> and used in
|
and variables. Those elements may be <i>exported</i> and used in
|
||||||
another package.
|
another package.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@ -4024,9 +4050,14 @@ to which the file belongs.
|
|||||||
</p>
|
</p>
|
||||||
|
|
||||||
<pre class="ebnf">
|
<pre class="ebnf">
|
||||||
PackageClause = "package" PackageName .
|
PackageClause = "package" PackageName .
|
||||||
|
PackageName = identifier .
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The PackageName must not be the <a href="#Blank_identifier">blank identifier</a>.
|
||||||
|
</p>
|
||||||
|
|
||||||
<pre>
|
<pre>
|
||||||
package math
|
package math
|
||||||
</pre>
|
</pre>
|
||||||
|
Loading…
Reference in New Issue
Block a user