Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
go
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
go
Commits
fc61b777
Commit
fc61b777
authored
Sep 28, 2009
by
Robert Griesemer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
- clarify type declaration (specifying status quo)
DELTA=68 (51 added, 8 deleted, 9 changed) OCL=35038 CL=35046
parent
7743ffea
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
60 additions
and
17 deletions
+60
-17
doc/go_spec.html
doc/go_spec.html
+60
-17
No files found.
doc/go_spec.html
View file @
fc61b777
...
@@ -57,13 +57,6 @@ and convert §Foo into §<a href="#Foo">Foo</a>:
...
@@ -57,13 +57,6 @@ and convert §Foo into §<a href="#Foo">Foo</a>:
<div
id=
"nav"
></div>
<div
id=
"nav"
></div>
<!--
<!--
Open issues:
[ ] Semantics of type declaration:
- creating a new type (status quo), or only a new type name?
- declaration "type T S" strips methods of S. why/why not?
- no mechanism to declare a local type name: type T P.T
Todo
Todo
[ ] clarify: two equal lowercase identifiers from different packages denote different objects
[ ] clarify: two equal lowercase identifiers from different packages denote different objects
[ ] need language about function/method calls and parameter passing rules
[ ] need language about function/method calls and parameter passing rules
...
@@ -539,8 +532,11 @@ TypeLit = ArrayType | StructType | PointerType | FunctionType | InterfaceType
...
@@ -539,8 +532,11 @@ TypeLit = ArrayType | StructType | PointerType | FunctionType | InterfaceType
</pre>
</pre>
<p>
<p>
Named instances of the boolean, numeric, and string types are
<a
href=
"#Predeclared_identifiers"
>
predeclared
</a>
.
Named instances of the boolean, numeric, and string types are
Array, struct, pointer, function, interface, slice, map, and channel types may be constructed using type literals.
<a
href=
"#Predeclared_identifiers"
>
predeclared
</a>
.
<i>
Composite types
</i>
—
array, struct, pointer, function,
interface, slice, map, and channel types
—
may be constructed using
type literals.
</p>
</p>
<p>
<p>
...
@@ -548,8 +544,7 @@ A type may have a <i>method set</i> associated with it
...
@@ -548,8 +544,7 @@ A type may have a <i>method set</i> associated with it
(§
<a
href=
"#Interface_types"
>
Interface types
</a>
, §
<a
href=
"#Method_declarations"
>
Method declarations
</a>
).
(§
<a
href=
"#Interface_types"
>
Interface types
</a>
, §
<a
href=
"#Method_declarations"
>
Method declarations
</a>
).
The method set of an
<a
href=
"#Interface_types"
>
interface type
</a>
is its interface.
The method set of an
<a
href=
"#Interface_types"
>
interface type
</a>
is its interface.
The method set of any other named type
<code>
T
</code>
The method set of any other named type
<code>
T
</code>
consists of all methods with receiver
consists of all methods with receiver type
<code>
T
</code>
.
type
<code>
T
</code>
.
The method set of the corresponding pointer type
<code>
*T
</code>
The method set of the corresponding pointer type
<code>
*T
</code>
is the set of all methods with receiver
<code>
*T
</code>
or
<code>
T
</code>
is the set of all methods with receiver
<code>
*T
</code>
or
<code>
T
</code>
(that is, it also contains the method set of
<code>
T
</code>
).
(that is, it also contains the method set of
<code>
T
</code>
).
...
@@ -634,7 +629,7 @@ The predeclared string type is <code>string</code>.
...
@@ -634,7 +629,7 @@ The predeclared string type is <code>string</code>.
<p>
<p>
The elements of strings have type
<code>
byte
</code>
and may be
The elements of strings have type
<code>
byte
</code>
and may be
accessed using the usual
indexing operations (§
<a
href=
"#Indexes"
>
Indexes
</a>
)
. It is
accessed using the usual
<a
href=
"#Indexes"
>
indexing operations
</a>
. It is
illegal to take the address of such an element; if
illegal to take the address of such an element; if
<code>
s[i]
</code>
is the
<i>
i
</i>
th byte of a
<code>
s[i]
</code>
is the
<i>
i
</i>
th byte of a
string,
<code>
&
s[i]
</code>
is invalid. The length of string
string,
<code>
&
s[i]
</code>
is invalid. The length of string
...
@@ -1130,8 +1125,9 @@ received, <code>closed(c)</code> returns true.
...
@@ -1130,8 +1125,9 @@ received, <code>closed(c)</code> returns true.
<h2
id=
"Properties_of_types_and_values"
>
Properties of types and values
</h2>
<h2
id=
"Properties_of_types_and_values"
>
Properties of types and values
</h2>
<p>
<p>
Two types may be
<i>
identical
</i>
,
<i>
compatible
</i>
, or
<i>
incompatible
</i>
.
Two types are either
<i>
identical
</i>
or
<i>
different
</i>
, and they are
Two identical types are always compatible, but two compatible types may not be identical.
either
<i>
compatible
</i>
or
<i>
incompatible
</i>
.
Identical types are always compatible, but compatible types need not be identical.
</p>
</p>
<h3
id=
"Type_identity_and_compatibility"
>
Type identity and compatibility
</h3>
<h3
id=
"Type_identity_and_compatibility"
>
Type identity and compatibility
</h3>
...
@@ -1609,8 +1605,11 @@ last non-empty expression list.
...
@@ -1609,8 +1605,11 @@ last non-empty expression list.
<h3
id=
"Type_declarations"
>
Type declarations
</h3>
<h3
id=
"Type_declarations"
>
Type declarations
</h3>
<p>
<p>
A type declaration binds an identifier, the
<i>
type name
</i>
,
A type declaration binds an identifier, the
<i>
type name
</i>
, to a new type
to a new type.
<font
color=
red
>
TODO: what exactly is a "new type"?
</font>
that has the same definition (element, fields, channel direction, etc.) as
an existing type. The new type is
<a
href=
"#Properties_of_types_and_values"
>
compatible
</a>
with, but
<a
href=
"#Properties_of_types_and_values"
>
different
</a>
from, the existing type.
</p>
</p>
<pre
class=
"ebnf"
>
<pre
class=
"ebnf"
>
...
@@ -1639,6 +1638,49 @@ type Cipher interface {
...
@@ -1639,6 +1638,49 @@ type Cipher interface {
}
}
</pre>
</pre>
<p>
The declared type does not inherit any
<a
href=
"#Method_declarations"
>
methods
</a>
bound to the existing type, but the
<a
href=
"#Types"
>
method set
</a>
of elements of a composite type is not changed:
</p>
<pre>
// A Mutex is a data type with two methods Lock and Unlock.
type Mutex struct { /* Mutex fields */ }
func (m *Mutex) Lock() { /* Lock implementation */ }
func (m *Mutex) Unlock() { /* Unlock implementation */ }
// NewMutex has the same composition as Mutex but its method set is empty.
type NewMutex Mutex
// PrintableMutex has no methods bound to it, but the method set contains
// the methods Lock and Unlock bound to its anonymous field Mutex.
type PrintableMutex struct {
Mutex;
}
</pre>
<p>
A type declaration may be used to define a different boolean, numeric, or string
type and attach methods to it:
</p>
<pre>
type TimeZone int
const (
EST TimeZone = -(5 + iota);
CST;
MST;
PST;
)
func (tz TimeZone) String() string {
return fmt.Sprintf("GMT+%dh", tz);
}
</pre>
<h3
id=
"Variable_declarations"
>
Variable declarations
</h3>
<h3
id=
"Variable_declarations"
>
Variable declarations
</h3>
<p>
<p>
...
@@ -1775,8 +1817,9 @@ which is a function with a <i>receiver</i>.
...
@@ -1775,8 +1817,9 @@ which is a function with a <i>receiver</i>.
</p>
</p>
<pre
class=
"ebnf"
>
<pre
class=
"ebnf"
>
MethodDecl = "func" Receiver MethodName Signature [ Body ] .
MethodDecl = "func" Receiver MethodName Signature [ Body ] .
Receiver = "(" [ identifier ] [ "*" ] TypeName ")" .
Receiver = "(" [ identifier ] [ "*" ]
Base
TypeName ")" .
MethodName = identifier .
MethodName = identifier .
BaseTypeName = identifier .
</pre>
</pre>
<p>
<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