Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
G
golang
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
go
golang
Commits
56ca6972
Commit
56ca6972
authored
May 08, 2010
by
Robert Griesemer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
go spec: simplify section on channel types
R=rsc, iant, r CC=golang-dev
https://golang.org/cl/1171041
parent
f023e859
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
18 additions
and
20 deletions
+18
-20
go_spec.html
doc/go_spec.html
+18
-20
No files found.
doc/go_spec.html
View file @
56ca6972
<!-- title The Go Programming Language Specification -->
<!-- subtitle Version of May
4
, 2010 -->
<!-- subtitle Version of May
7
, 2010 -->
<!--
Todo
...
...
@@ -1154,41 +1154,39 @@ A value of channel type may be <code>nil</code>.
</p>
<pre
class=
"ebnf"
>
ChannelType = Channel | SendChannel | RecvChannel .
Channel = "chan" ElementType .
SendChannel = "chan" "
<
-" ElementType .
RecvChannel = "
<
-" "chan" ElementType .
ChannelType = ( "chan" [ "
<
-" ] | "
<
-" "chan" ) ElementType .
</pre>
<p>
To avoid a parsing ambiguity in cases such as
<code>
chan
<
- chan int
</code>
,
the Channel production's ElementType cannot be a RecvChannel.
To construct such a type, parenthesize the RecvChannel first.
The
<code>
<
-
</code>
operator specifies the channel
<i>
direction
</i>
,
<i>
send
</i>
or
<i>
receive
</i>
. If no direction is given, the channel is
<i>
bi-directional
</i>
.
A channel may be constrained only to send or only to receive by
<a
href=
"#Conversions"
>
conversion
</a>
or
<a
href=
"#Assignments"
>
assignment
</a>
.
</p>
<pre>
chan
<
- chan int // same as chan
<
- (chan int)
chan
<
-
<
-chan int // same as chan
<
- (
<
-chan int)
<
-chan
<
-chan int // same as
<
-chan (
<
-chan int)
chan (
<
-chan int)
chan T // can be used to send and receive values of type T
chan
<
- float // can only be used to send floats
<
-chan int // can only be used to receive ints
</pre>
<p>
Upon creation, a channel can be used both to send and to receive values.
By conversion or assignment, a channel may be constrained only to send or
to receive. This constraint is called a channel's
<i>
direction
</i>
; either
<i>
send
</i>
,
<i>
receive
</i>
, or
<i>
bi-directional
</i>
(unconstrained).
The
<code>
<
-
</code>
operator associates with the leftmost
<code>
chan
</code>
possible:
</p>
<pre>
chan T // can be used to send and receive values of type T
chan
<
- float // can only be used to send floats
<
-chan int // can only be used to receive ints
chan
<
- chan int // same as chan
<
- (chan int)
chan
<
-
<
-chan int // same as chan
<
- (
<
-chan int)
<
-chan
<
-chan int // same as
<
-chan (
<
-chan int)
chan (
<
-chan int)
</pre>
<p>
The value of an uninitialized channel is
<code>
nil
</code>
. A new, initialized channel
value can be made using the built-in function
<code>
make
</code>
,
value can be made using the built-in function
<a
href=
"#Making_slices_maps_and_channels"
><code>
make
</code></a>
,
which takes the channel type and an optional capacity as arguments:
</p>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment