mirror of
https://github.com/golang/go
synced 2024-11-24 21:10:04 -07:00
doc/go1: the simpler package changes
R=golang-dev, fullung, dsymonds, r, adg CC=golang-dev https://golang.org/cl/5477056
This commit is contained in:
parent
2cb1aa4681
commit
ebdcbf1cdc
176
doc/go1.html
176
doc/go1.html
@ -217,7 +217,7 @@ Go 1 introduces a new built-in type, <code>error</code>, which has the following
|
|||||||
|
|
||||||
<p>
|
<p>
|
||||||
Since the consequences of this type are all in the package library,
|
Since the consequences of this type are all in the package library,
|
||||||
it is discussed <a href="errors">below</a>.
|
it is discussed <a href="#errors">below</a>.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<h3 id="delete">Deleting from maps</h3>
|
<h3 id="delete">Deleting from maps</h3>
|
||||||
@ -547,15 +547,73 @@ by hand.
|
|||||||
|
|
||||||
<h3 id="errors">The error type and errors package</h3>
|
<h3 id="errors">The error type and errors package</h3>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
As mentioned above, Go 1 introduces a new built-in interface type called <code>error</code>.
|
||||||
|
Its intent is to replace the old <code>os.Error</code> type with a more central concept.
|
||||||
|
So the widely-used <code>String</code> method does not cause accidental satisfaction
|
||||||
|
of the <code>error</code> interface, the <code>error</code> interface uses instead
|
||||||
|
the name <code>Error</code> for that method:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
type error interface {
|
||||||
|
Error() string
|
||||||
|
}
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The <code>fmt</code> library automatically invokes <code>Error</code>, as it already
|
||||||
|
does for <code>String</code>, for easy printing of error values.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre><!--{{code "progs/go1.go" `/START ERROR EXAMPLE/` `/END ERROR EXAMPLE/`}}
|
||||||
|
-->type SyntaxError struct {
|
||||||
|
File string
|
||||||
|
Line int
|
||||||
|
Message string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (se *SyntaxError) Error() string {
|
||||||
|
return fmt.Sprintf("%s:%d: %s", se.File, se.Line, se.Message)
|
||||||
|
}
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
All standard packages have been updated to use the new interface; the old <code>os.Error</code> is gone.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
A new package, <a href="/pkg/errors/"><code>errors</code></a>, contains the function
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
func New(text string) error
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
to turn a string into an error. It replaces the old <code>os.NewError</code>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre><!--{{code "progs/go1.go" `/ErrSyntax/`}}
|
||||||
|
--> var ErrSyntax = errors.New("syntax error")
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<em>Updating</em>:
|
||||||
|
Gofix will update almost all code affected by the change.
|
||||||
|
Code that defines error types with a <code>String</code> method will need to be updated
|
||||||
|
by hand to rename the methods to <code>Error</code>.
|
||||||
|
</p>
|
||||||
|
|
||||||
<h3 id="errno">System call errors</h3>
|
<h3 id="errno">System call errors</h3>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
In Go 1, the
|
In Go 1, the
|
||||||
<a href="http://golang.org/pkg/syscall"><code>syscall</code></a>
|
<a href="/pkg/syscall/"><code>syscall</code></a>
|
||||||
package returns an <code>error</code> for system call errors,
|
package returns an <code>error</code> for system call errors,
|
||||||
rather than plain integer <code>errno</code> values.
|
rather than plain integer <code>errno</code> values.
|
||||||
On Unix, the implementation is done by a
|
On Unix, the implementation is done by a
|
||||||
<a href="http://golang.org/pkg/syscall/#Errno"><code>syscall.Errno</code></a> type
|
<a href="/pkg/syscall/#Errno"><code>syscall.Errno</code></a> type
|
||||||
that satisfies <code>error</code> and replaces the old <code>os.Errno</code>.
|
that satisfies <code>error</code> and replaces the old <code>os.Errno</code>.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@ -568,15 +626,13 @@ rather than <code>syscall</code> and so will be unaffected.
|
|||||||
|
|
||||||
<h3 id="time">Time</h3>
|
<h3 id="time">Time</h3>
|
||||||
|
|
||||||
<h3 id="html">The html package</h3>
|
|
||||||
|
|
||||||
<h3 id="http">The http package</h3>
|
<h3 id="http">The http package</h3>
|
||||||
|
|
||||||
<h3 id="strconv">The strconv package</h3>
|
<h3 id="strconv">The strconv package</h3>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
In Go 1, the
|
In Go 1, the
|
||||||
<a href="http://golang.org/pkg/syscall"><code>strconv</code></a>
|
<a href="/pkg/strconv/"><code>strconv</code></a>
|
||||||
package has been significantly reworked to make it more Go-like and less C-like,
|
package has been significantly reworked to make it more Go-like and less C-like,
|
||||||
although <code>Atoi</code> lives on (it's similar to
|
although <code>Atoi</code> lives on (it's similar to
|
||||||
<code>int(ParseInt(x, 10, 0))</code>, as does
|
<code>int(ParseInt(x, 10, 0))</code>, as does
|
||||||
@ -587,7 +643,7 @@ return strings, to allow control over allocation.
|
|||||||
|
|
||||||
<p>
|
<p>
|
||||||
This table summarizes the renamings; see the
|
This table summarizes the renamings; see the
|
||||||
<a href="/pkg/strconv">package documentation</a>
|
<a href="/pkg/strconv/">package documentation</a>
|
||||||
for full details.
|
for full details.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@ -666,33 +722,99 @@ they may require
|
|||||||
a cast that must be added by hand; gofix will warn about it.
|
a cast that must be added by hand; gofix will warn about it.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
<h3 id="os_fileinfo">The os.FileInfo type</h3>
|
||||||
|
|
||||||
<h3 id="exp">The package tree exp</h3>
|
<h3 id="exp">The package tree exp</h3>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Because they are not standardized, the packages under the <code>exp</code> directory will not be available in the
|
||||||
|
standard Go 1 release distributions, although they will be available in source code form
|
||||||
|
in <a href="http://code.google.com/p/go/">the repository</a> for
|
||||||
|
developers who wish to use them.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Several packages have moved under <code>exp</code> at the time of Go 1's release:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li><code>ebnf</code></li>
|
||||||
|
<li><code>go/types</code></li>
|
||||||
|
<li><code>http/spdy</code></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
All these packages are available under the same names, with <code>exp/</code> prefixed: <code>exp/ebnf</code> etc.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Also, the <code>gotype</code> command now resides in <code>exp/gotype</code>, while
|
||||||
|
<code>ebnflint</code> is now in <code>exp/ebnflint</code>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<em>Updating</em>:
|
||||||
|
Code that uses packages in <code>exp</code> will need to be updated by hand,
|
||||||
|
or else compiled from an installation that has <code>exp</code> available.
|
||||||
|
Gofix will warn about such uses.
|
||||||
|
<br>
|
||||||
|
<font color="red">TODO: gofix should warn about such uses.</font>
|
||||||
|
</p>
|
||||||
|
|
||||||
<h3 id="old">The package tree old</h3>
|
<h3 id="old">The package tree old</h3>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Because they are deprecated, the packages under the <code>old</code> directory will not be available in the
|
||||||
|
standard Go 1 release distributions, although they will be available in source code form for
|
||||||
|
developers who wish to use them.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The packages in their new locations are:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li><code>old/netchan</code></li>
|
||||||
|
<li><code>old/regexp</code></li>
|
||||||
|
<li><code>old/template</code></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<em>Updating</em>:
|
||||||
|
Code that uses packages now in <code>old</code> will need to be updated by hand,
|
||||||
|
or else compiled from an installation that has <code>old</code> available.
|
||||||
|
Gofix will warn about such uses.
|
||||||
|
<br>
|
||||||
|
<font color="red">TODO: gofix should warn about such uses.</font>
|
||||||
|
</p>
|
||||||
|
|
||||||
<h3 id="deleted">Deleted packages</h3>
|
<h3 id="deleted">Deleted packages</h3>
|
||||||
|
|
||||||
<!--
|
<p>
|
||||||
|
Go 1 deletes several packages outright:
|
||||||
|
</p>
|
||||||
|
|
||||||
moving to exp/* (and thus not in Go 1):
|
<ul>
|
||||||
ebnf, command ebnflint
|
<li><code>container/vector</code></li>
|
||||||
go/types, command gotype
|
<li><code>exp/datafmt</code></li>
|
||||||
http/spdy
|
<li><code>go/typechecker</code></li>
|
||||||
|
<li><code>try</code></li>
|
||||||
deleted:
|
</ul>
|
||||||
container/vector
|
|
||||||
exp/datafmt
|
|
||||||
go/typechecker
|
|
||||||
try, command gotry
|
|
||||||
|
|
||||||
go/typechecker
|
<p>
|
||||||
go/types
|
and also the command <code>gotry</code>.
|
||||||
ebnf (and cmd/ebnflint)
|
</p>
|
||||||
container/vector
|
|
||||||
try (and gotry)
|
<p>
|
||||||
exp/datafmt
|
<em>Updating</em>:
|
||||||
netchan
|
Code that uses <code>container/vector</code> should be updated to use
|
||||||
-->
|
slices directly. See
|
||||||
|
<a href="http://code.google.com/p/go-wiki/wiki/SliceTricks">the Go
|
||||||
|
Language Community Wiki</a> for some suggestions.
|
||||||
|
Code that uses the other packages (there should be almost zero) will need to be rethought.
|
||||||
|
<br>
|
||||||
|
<font color="red">TODO: gofix should warn such uses.</font>
|
||||||
|
</p>
|
||||||
|
|
||||||
<h3 id="subrepo">Packages moving to subrepositories</h3>
|
<h3 id="subrepo">Packages moving to subrepositories</h3>
|
||||||
|
|
||||||
@ -701,8 +823,6 @@ crypto/openpgp to XXX
|
|||||||
maybe exp/ssh?
|
maybe exp/ssh?
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<h3 id="os_fileinfo">The os.FileInfo type</h3>
|
|
||||||
|
|
||||||
<h2 id="go_command">The go command</h2>
|
<h2 id="go_command">The go command</h2>
|
||||||
|
|
||||||
<h2 id="releases">Packaged releases</h2>
|
<h2 id="releases">Packaged releases</h2>
|
||||||
|
164
doc/go1.tmpl
164
doc/go1.tmpl
@ -163,7 +163,7 @@ Go 1 introduces a new built-in type, <code>error</code>, which has the following
|
|||||||
|
|
||||||
<p>
|
<p>
|
||||||
Since the consequences of this type are all in the package library,
|
Since the consequences of this type are all in the package library,
|
||||||
it is discussed <a href="errors">below</a>.
|
it is discussed <a href="#errors">below</a>.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
<h3 id="delete">Deleting from maps</h3>
|
<h3 id="delete">Deleting from maps</h3>
|
||||||
@ -462,15 +462,61 @@ by hand.
|
|||||||
|
|
||||||
<h3 id="errors">The error type and errors package</h3>
|
<h3 id="errors">The error type and errors package</h3>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
As mentioned above, Go 1 introduces a new built-in interface type called <code>error</code>.
|
||||||
|
Its intent is to replace the old <code>os.Error</code> type with a more central concept.
|
||||||
|
So the widely-used <code>String</code> method does not cause accidental satisfaction
|
||||||
|
of the <code>error</code> interface, the <code>error</code> interface uses instead
|
||||||
|
the name <code>Error</code> for that method:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
type error interface {
|
||||||
|
Error() string
|
||||||
|
}
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The <code>fmt</code> library automatically invokes <code>Error</code>, as it already
|
||||||
|
does for <code>String</code>, for easy printing of error values.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
{{code "progs/go1.go" `/START ERROR EXAMPLE/` `/END ERROR EXAMPLE/`}}
|
||||||
|
|
||||||
|
<p>
|
||||||
|
All standard packages have been updated to use the new interface; the old <code>os.Error</code> is gone.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
A new package, <a href="/pkg/errors/"><code>errors</code></a>, contains the function
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<pre>
|
||||||
|
func New(text string) error
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
to turn a string into an error. It replaces the old <code>os.NewError</code>.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
{{code "progs/go1.go" `/ErrSyntax/`}}
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<em>Updating</em>:
|
||||||
|
Gofix will update almost all code affected by the change.
|
||||||
|
Code that defines error types with a <code>String</code> method will need to be updated
|
||||||
|
by hand to rename the methods to <code>Error</code>.
|
||||||
|
</p>
|
||||||
|
|
||||||
<h3 id="errno">System call errors</h3>
|
<h3 id="errno">System call errors</h3>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
In Go 1, the
|
In Go 1, the
|
||||||
<a href="http://golang.org/pkg/syscall"><code>syscall</code></a>
|
<a href="/pkg/syscall/"><code>syscall</code></a>
|
||||||
package returns an <code>error</code> for system call errors,
|
package returns an <code>error</code> for system call errors,
|
||||||
rather than plain integer <code>errno</code> values.
|
rather than plain integer <code>errno</code> values.
|
||||||
On Unix, the implementation is done by a
|
On Unix, the implementation is done by a
|
||||||
<a href="http://golang.org/pkg/syscall/#Errno"><code>syscall.Errno</code></a> type
|
<a href="/pkg/syscall/#Errno"><code>syscall.Errno</code></a> type
|
||||||
that satisfies <code>error</code> and replaces the old <code>os.Errno</code>.
|
that satisfies <code>error</code> and replaces the old <code>os.Errno</code>.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@ -483,15 +529,13 @@ rather than <code>syscall</code> and so will be unaffected.
|
|||||||
|
|
||||||
<h3 id="time">Time</h3>
|
<h3 id="time">Time</h3>
|
||||||
|
|
||||||
<h3 id="html">The html package</h3>
|
|
||||||
|
|
||||||
<h3 id="http">The http package</h3>
|
<h3 id="http">The http package</h3>
|
||||||
|
|
||||||
<h3 id="strconv">The strconv package</h3>
|
<h3 id="strconv">The strconv package</h3>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
In Go 1, the
|
In Go 1, the
|
||||||
<a href="http://golang.org/pkg/syscall"><code>strconv</code></a>
|
<a href="/pkg/strconv/"><code>strconv</code></a>
|
||||||
package has been significantly reworked to make it more Go-like and less C-like,
|
package has been significantly reworked to make it more Go-like and less C-like,
|
||||||
although <code>Atoi</code> lives on (it's similar to
|
although <code>Atoi</code> lives on (it's similar to
|
||||||
<code>int(ParseInt(x, 10, 0))</code>, as does
|
<code>int(ParseInt(x, 10, 0))</code>, as does
|
||||||
@ -502,7 +546,7 @@ return strings, to allow control over allocation.
|
|||||||
|
|
||||||
<p>
|
<p>
|
||||||
This table summarizes the renamings; see the
|
This table summarizes the renamings; see the
|
||||||
<a href="/pkg/strconv">package documentation</a>
|
<a href="/pkg/strconv/">package documentation</a>
|
||||||
for full details.
|
for full details.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
@ -581,33 +625,99 @@ they may require
|
|||||||
a cast that must be added by hand; gofix will warn about it.
|
a cast that must be added by hand; gofix will warn about it.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
<h3 id="os_fileinfo">The os.FileInfo type</h3>
|
||||||
|
|
||||||
<h3 id="exp">The package tree exp</h3>
|
<h3 id="exp">The package tree exp</h3>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Because they are not standardized, the packages under the <code>exp</code> directory will not be available in the
|
||||||
|
standard Go 1 release distributions, although they will be available in source code form
|
||||||
|
in <a href="http://code.google.com/p/go/">the repository</a> for
|
||||||
|
developers who wish to use them.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Several packages have moved under <code>exp</code> at the time of Go 1's release:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li><code>ebnf</code></li>
|
||||||
|
<li><code>go/types</code></li>
|
||||||
|
<li><code>http/spdy</code></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
All these packages are available under the same names, with <code>exp/</code> prefixed: <code>exp/ebnf</code> etc.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Also, the <code>gotype</code> command now resides in <code>exp/gotype</code>, while
|
||||||
|
<code>ebnflint</code> is now in <code>exp/ebnflint</code>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<em>Updating</em>:
|
||||||
|
Code that uses packages in <code>exp</code> will need to be updated by hand,
|
||||||
|
or else compiled from an installation that has <code>exp</code> available.
|
||||||
|
Gofix will warn about such uses.
|
||||||
|
<br>
|
||||||
|
<font color="red">TODO: gofix should warn about such uses.</font>
|
||||||
|
</p>
|
||||||
|
|
||||||
<h3 id="old">The package tree old</h3>
|
<h3 id="old">The package tree old</h3>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Because they are deprecated, the packages under the <code>old</code> directory will not be available in the
|
||||||
|
standard Go 1 release distributions, although they will be available in source code form for
|
||||||
|
developers who wish to use them.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
The packages in their new locations are:
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<ul>
|
||||||
|
<li><code>old/netchan</code></li>
|
||||||
|
<li><code>old/regexp</code></li>
|
||||||
|
<li><code>old/template</code></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<em>Updating</em>:
|
||||||
|
Code that uses packages now in <code>old</code> will need to be updated by hand,
|
||||||
|
or else compiled from an installation that has <code>old</code> available.
|
||||||
|
Gofix will warn about such uses.
|
||||||
|
<br>
|
||||||
|
<font color="red">TODO: gofix should warn about such uses.</font>
|
||||||
|
</p>
|
||||||
|
|
||||||
<h3 id="deleted">Deleted packages</h3>
|
<h3 id="deleted">Deleted packages</h3>
|
||||||
|
|
||||||
<!--
|
<p>
|
||||||
|
Go 1 deletes several packages outright:
|
||||||
|
</p>
|
||||||
|
|
||||||
moving to exp/* (and thus not in Go 1):
|
<ul>
|
||||||
ebnf, command ebnflint
|
<li><code>container/vector</code></li>
|
||||||
go/types, command gotype
|
<li><code>exp/datafmt</code></li>
|
||||||
http/spdy
|
<li><code>go/typechecker</code></li>
|
||||||
|
<li><code>try</code></li>
|
||||||
deleted:
|
</ul>
|
||||||
container/vector
|
|
||||||
exp/datafmt
|
|
||||||
go/typechecker
|
|
||||||
try, command gotry
|
|
||||||
|
|
||||||
go/typechecker
|
<p>
|
||||||
go/types
|
and also the command <code>gotry</code>.
|
||||||
ebnf (and cmd/ebnflint)
|
</p>
|
||||||
container/vector
|
|
||||||
try (and gotry)
|
<p>
|
||||||
exp/datafmt
|
<em>Updating</em>:
|
||||||
netchan
|
Code that uses <code>container/vector</code> should be updated to use
|
||||||
-->
|
slices directly. See
|
||||||
|
<a href="http://code.google.com/p/go-wiki/wiki/SliceTricks">the Go
|
||||||
|
Language Community Wiki</a> for some suggestions.
|
||||||
|
Code that uses the other packages (there should be almost zero) will need to be rethought.
|
||||||
|
<br>
|
||||||
|
<font color="red">TODO: gofix should warn such uses.</font>
|
||||||
|
</p>
|
||||||
|
|
||||||
<h3 id="subrepo">Packages moving to subrepositories</h3>
|
<h3 id="subrepo">Packages moving to subrepositories</h3>
|
||||||
|
|
||||||
@ -616,8 +726,6 @@ crypto/openpgp to XXX
|
|||||||
maybe exp/ssh?
|
maybe exp/ssh?
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<h3 id="os_fileinfo">The os.FileInfo type</h3>
|
|
||||||
|
|
||||||
<h2 id="go_command">The go command</h2>
|
<h2 id="go_command">The go command</h2>
|
||||||
|
|
||||||
<h2 id="releases">Packaged releases</h2>
|
<h2 id="releases">Packaged releases</h2>
|
||||||
|
@ -7,6 +7,8 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
"unicode"
|
"unicode"
|
||||||
)
|
)
|
||||||
@ -19,6 +21,7 @@ func main() {
|
|||||||
structEquality()
|
structEquality()
|
||||||
compositeLiterals()
|
compositeLiterals()
|
||||||
runeType()
|
runeType()
|
||||||
|
errorExample()
|
||||||
}
|
}
|
||||||
|
|
||||||
func mapDelete() {
|
func mapDelete() {
|
||||||
@ -130,6 +133,29 @@ func runeType() {
|
|||||||
// ENDRUNE OMIT
|
// ENDRUNE OMIT
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// START ERROR EXAMPLE OMIT
|
||||||
|
type SyntaxError struct {
|
||||||
|
File string
|
||||||
|
Line int
|
||||||
|
Message string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (se *SyntaxError) Error() string {
|
||||||
|
return fmt.Sprintf("%s:%d: %s", se.File, se.Line, se.Message)
|
||||||
|
}
|
||||||
|
// END ERROR EXAMPLE OMIT
|
||||||
|
|
||||||
|
func errorExample() {
|
||||||
|
var ErrSyntax = errors.New("syntax error")
|
||||||
|
_ = ErrSyntax
|
||||||
|
se := &SyntaxError{"file", 7, "error"}
|
||||||
|
got := fmt.Sprint(se)
|
||||||
|
const expect = "file:7: error"
|
||||||
|
if got != expect {
|
||||||
|
log.Fatalf("errorsPackage: expected %q got %q", expect, got)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func f(string, int) {
|
func f(string, int) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user