Chủ đề Go quan trọng
Go Closures and Function Values
Functions are values in Go: store them, pass them, return them, and let them remember variables.
Bạn sẽ học được gì
- Functions as values
- Closures keep state
- Passing a function
next := counter()
1next()
2next()
3next()
A function that remembers
In Go a function is a value: you can store it in a variable, pass it to another function or return it. A closure is a function that keeps using variables from the place where it was created.
counter returns a function that remembers its own count between calls, and each call to counter creates a separate count. apply takes a function as a parameter. The function literal passed to apply reads bonus from main.
Những điểm quan trọng
- counter returns a function with its own count.
- Each call to counter starts a new count.
- A function literal can use variables around it.
Ví dụ Go chạy được
main.go
package main
import "fmt"
func counter() func() int {
count := 0
return func() int {
count++
return count
}
}
func apply(values []int, transform func(int) int) []int {
result := make([]int, len(values))
for i, value := range values {
result[i] = transform(value)
}
return result
}
func main() {
next := counter()
fmt.Println(next(), next(), next())
other := counter() // a separate count
fmt.Println(other())
bonus := 10
fmt.Println(apply([]int{1, 2, 3}, func(n int) int { return n*2 + bonus }))
}
1 2 3
1
[12 14 16]Luyện tập
Mở ví dụ trong trình biên dịch online, đổi một giá trị hoặc thêm một dòng, rồi đoán kết quả trước khi chạy. Sau đó cố ý làm code bị lỗi và đọc thông báo của trình biên dịch.
Bạn học xong bài này chưa?
Đánh dấu đã học để theo dõi tiến độ của bạn.
Tiến độ của bạn đang được lưu trong trình duyệt này Đăng nhập để giữ tiến độ trên mọi thiết bị.
Luyện tập với thử thách
Áp dụng kiến thức của bài học này để giải một bài toán thực tế. Mỗi thử thách chạy ngay trên trình duyệt, có kiểm thử tức thì và AI nhận xét.
- Sắp xếp theo khóa được chọn Sắp xếp mọi người theo tên hoặc theo tuổi bằng một comparer được chọn khi chạy, đồng thời phá vỡ các trường hợp bằng nhau một cách nhất quán. Dễ
- Người đăng ký sự kiện Gửi sự kiện tới những người đăng ký từng chủ đề theo kiểu observer và đếm số thông báo mỗi người nhận được. Dễ