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 關注
- 267 瀏覽
添加回答
舉報