面试题答案
一键面试基本原理
- Future模式:是一种异步编程模型,将任务的执行和结果的获取分离。在Go语言中,通过
goroutine
实现异步任务执行,通过channel
来传递任务的结果。当一个任务启动时,立即返回一个Future
对象(在Go中可理解为一个channel
),调用者可以继续执行其他任务,之后通过这个Future
对象来获取任务的执行结果。
实现步骤
- 创建任务:使用
goroutine
启动并发任务。 - 创建结果通道:定义一个
channel
用于传递任务的执行结果。 - 执行任务并发送结果:在
goroutine
中执行任务,并将结果通过channel
发送出去。 - 获取结果:在需要结果的地方从
channel
接收结果。
示例代码
package main
import (
"fmt"
)
// 模拟一个耗时任务
func longRunningTask() int {
// 这里模拟一个耗时操作,例如计算等
var result int
for i := 0; i < 1000000; i++ {
result += i
}
return result
}
func main() {
// 创建一个用于接收任务结果的通道
resultChan := make(chan int)
// 使用goroutine启动任务
go func() {
result := longRunningTask()
resultChan <- result
}()
// 这里可以继续执行其他任务
// 获取任务结果
result := <-resultChan
fmt.Println("任务结果:", result)
// 关闭通道,虽然这里不是必须,但是良好的习惯
close(resultChan)
}
在上述代码中:
longRunningTask
函数模拟了一个耗时的任务。- 在
main
函数中,创建了一个int
类型的channel
resultChan
用于接收任务结果。 - 使用
go
关键字启动一个goroutine
来执行longRunningTask
,并将结果发送到resultChan
。 - 最后从
resultChan
接收结果并打印。