3 回答

TA贡献1785条经验 获得超8个赞
推迟陈述
“ defer”语句调用一个函数,该函数的执行被推迟到周围函数返回的那一刻。
DeferStmt =“ defer”表达式。
表达式必须是函数或方法调用。每次执行“ defer”语句时,都会对函数调用的参数进行评估并重新保存,但不会调用该函数。延迟的函数调用将在周围函数返回之前立即以LIFO顺序执行,但是在对返回值(如果有)进行求值之后才执行。
lock(l);
defer unlock(l); // unlocking happens before surrounding function returns
// prints 3 2 1 0 before surrounding function returns
for i := 0; i <= 3; i++ {
defer fmt.Print(i);
}
更新:
defer现在也处理惯用方式panic在例外样方式:
package main
import "fmt"
func main() {
f()
fmt.Println("Returned normally from f.")
}
func f() {
defer func() {
if r := recover(); r != nil {
fmt.Println("Recovered in f", r)
}
}()
fmt.Println("Calling g.")
g(0)
fmt.Println("Returned normally from g.")
}
func g(i int) {
if i > 3 {
fmt.Println("Panicking!")
panic(fmt.Sprintf("%v", i))
}
defer fmt.Println("Defer in g", i)
fmt.Println("Printing in g", i)
g(i+1)
}

TA贡献1804条经验 获得超3个赞
Go对象文件实际上包含明文标题:
jurily@jurily ~/workspace/go/euler31 $ 6g euler31.go
jurily@jurily ~/workspace/go/euler31 $ cat euler31.6
amd64
exports automatically generated from
euler31.go in package "main"
import
$$ // exports
package main
var main.coin [9]int
func main.howmany (amount int, max int) (? int)
func main.main ()
var main.initdone· uint8
func main.init ()
$$ // local types
type main.dsigddd_1·1 struct { ? int }
$$
!
<binary segment>

TA贡献1816条经验 获得超4个赞
我看到几个人抱怨“ for-loop”,类似“为什么i = 0; i < len; i++在这个时代必须说?”。
我不同意,我喜欢for结构。如果愿意,可以使用长版本,但是惯用的Go是
var a = []int{1, 2, 3}
for i, v := range a {
fmt.Println(i, v)
}
该for .. range构造在所有元素上循环并提供两个值-索引i和值v。
range 也适用于地图和频道。
不过,如果您不喜欢for任何形式,则可以在以下几行中定义each,map等等:
type IntArr []int
// 'each' takes a function argument.
// The function must accept two ints, the index and value,
// and will be called on each element in turn.
func (a IntArr) each(fn func(index, value int)) {
for i, v := range a {
fn(i, v)
}
}
func main() {
var a = IntArr([]int{2, 0, 0, 9}) // create int slice and cast to IntArr
var fnPrint = func(i, v int) {
fmt.Println(i, ":", v)
} // create a function
a.each(fnPrint) // call on each element
}
印刷
0 : 2
1 : 0
2 : 0
3 : 9
我开始非常喜欢Go :)
- 3 回答
- 0 关注
- 274 浏览
添加回答
举报