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
5cff1903
Commit
5cff1903
authored
Feb 20, 2012
by
Rob Pike
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
FAQ: many small fixes and adjustments
R=golang-dev, bradfitz CC=golang-dev
https://golang.org/cl/5685048
parent
05e80cff
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
28 additions
and
18 deletions
+28
-18
doc/go_faq.html
doc/go_faq.html
+28
-18
No files found.
doc/go_faq.html
View file @
5cff1903
...
...
@@ -485,6 +485,7 @@ or how the <code>image</code> packages generate compressed
image files. All these ideas stem from a single interface
(
<code>
io.Writer
</code>
) representing a single method
(
<code>
Write
</code>
). And that's only scratching the surface.
Go's interfaces have a profound influence on how programs are structured.
</p>
<p>
...
...
@@ -840,12 +841,12 @@ there are multiple considerations involving shallow vs. deep comparison, pointer
value comparison, how to deal with recursive types, and so on.
We may revisit this issue
—
and implementing equality for slices
will not invalidate any existing programs
—
but without a clear idea of what
equality of s
tructs and array
s should mean, it was simpler to leave it out for now.
equality of s
lice
s should mean, it was simpler to leave it out for now.
</p>
<p>
In Go 1, equality is defined for structs and arrays, so such
types can be used as map keys
, but slices still do not have a definition of equality
.
In Go 1,
unlike prior releases,
equality is defined for structs and arrays, so such
types can be used as map keys
. Slices still do not have a definition of equality, though
.
</p>
<h3
id=
"references"
>
...
...
@@ -941,7 +942,7 @@ func (s MyStruct) valueMethod() { } // method on value
For programmers unaccustomed to pointers, the distinction between these
two examples can be confusing, but the situation is actually very simple.
When defining a method on a type, the receiver (
<code>
s
</code>
in the above
example) behaves exactly as if it were an argument to the method.
example
s
) behaves exactly as if it were an argument to the method.
Whether to define the receiver as a value or as a pointer is the same
question, then, as whether a function argument should be a value or
a pointer.
...
...
@@ -1082,15 +1083,15 @@ See the <a href="/doc/codewalk/sharemem/">Share Memory By Communicating</a> code
Why doesn't my multi-goroutine program use multiple CPUs?
</h3>
<p>
You must set
<code>
GOMAXPROCS
</code>
to allow the
You must set the
<code>
GOMAXPROCS
</code>
shell environment variable
or use the similarly-named
<a
href=
"/pkg/runtime/#GOMAXPROCS"
><code>
function
</code></a>
of the runtime package to allow the
run-time support to utilize more than one OS thread.
</p>
<p>
Programs that perform parallel computation should benefit from an increase in
<code>
GOMAXPROCS
</code>
. (See the
<a
href=
"http://golang.org/pkg/runtime/#GOMAXPROCS"
><code>
runtime
</code>
package's
documentation
</a>
.)
<code>
GOMAXPROCS
</code>
.
</p>
<h3
id=
"Why_GOMAXPROCS"
>
...
...
@@ -1148,7 +1149,10 @@ there is no useful way for a method call to obtain a pointer.
</p>
<p>
If not for this restriction, this code:
Even in cases where the compiler could take the address of a value
to pass to the method, if the method modifies the value the changes
will be lost in the caller.
As a common example, this code:
</p>
<pre>
...
...
@@ -1174,7 +1178,7 @@ Consider the following program:
func main() {
done := make(chan bool)
values := []string{
"a", "b", "c"
}
values := []string{
"a", "b", "c"
}
for _, v := range values {
go func() {
fmt.Println(v)
...
...
@@ -1268,18 +1272,21 @@ func TestFoo(t *testing.T) {
</pre>
<p>
Run
<code>
gotest
</code>
in that directory.
Run
<code>
go
test
</code>
in that directory.
That script finds the
<code>
Test
</code>
functions,
builds a test binary, and runs it.
</p>
<p>
See the
<a
href=
"/doc/code.html"
>
How to Write Go Code
</a>
document for more details.
</p>
<p>
See the
<a
href=
"/doc/code.html"
>
How to Write Go Code
</a>
document,
the
<a
href=
"/pkg/testing/"
><code>
testing
</code></a>
package
and the
<a
href=
"/cmd/go/#Test_packages"
><code>
go test
</code></a>
subcommand for more details.
</p>
<h3
id=
"testing_framework"
>
Where is my favorite helper function for testing?
</h3>
<p>
Go's standard
<
code>
testing
</code
>
package makes it easy to write unit tests, but it lacks
Go's standard
<
a
href=
"/pkg/testing/"
><code>
testing
</code></a
>
package makes it easy to write unit tests, but it lacks
features provided in other language's testing frameworks such as assertion functions.
An
<a
href=
"#assertions"
>
earlier section
</a>
of this document explained why Go
doesn't have assertions, and
...
...
@@ -1371,9 +1378,9 @@ type checks, reflection, and even panic-time stack traces.
<p>
A trivial C "hello, world" program compiled and linked statically using gcc
on Linux is around 750 kB. An equivalent Go program
is around 1.1 MB, but
that includes more powerful run-time support. We believe that with some effor
t
th
e size of Go binaries can be reduced
.
on Linux is around 750 kB. An equivalent Go program
using
<code>
fmt.Printf
</code>
is around 1.3 MB, bu
t
th
at includes more powerful run-time support
.
</p>
<h3
id=
"unused_variables_and_imports"
>
...
...
@@ -1438,7 +1445,7 @@ Why does Go perform badly on benchmark X?</h3>
<p>
One of Go's design goals is to approach the performance of C for comparable
programs, yet on some benchmarks it does quite poorly, including several
in
<a
href=
"/test/bench/
"
>
test/bench
</a>
. The slowest depend on libraries
in
<a
href=
"/test/bench/
shootout/"
>
test/bench/shootout
</a>
. The slowest depend on libraries
for which versions of comparable performance are not available in Go.
For instance,
<a
href=
"/test/bench/shootout/pidigits.go"
>
pidigits.go
</a>
depends on a multi-precision math package, and the C
...
...
@@ -1467,7 +1474,10 @@ garbage can have a huge effect.)
</p>
<p>
In any case, Go can often be very competitive. See the blog post about
In any case, Go can often be very competitive.
There has been significant improvement in the performance of many programs
as the language and tools have developed.
See the blog post about
<a
href=
"http://blog.golang.org/2011/06/profiling-go-programs.html"
>
profiling
Go programs
</a>
for an informative example.
...
...
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