登录
首页 >  Golang >  Go问答

Go语言为什么采用晚绑定?

来源:SegmentFault

时间:2023-04-11 18:17:56 492浏览 收藏

偷偷努力,悄无声息地变强,然后惊艳所有人!哈哈,小伙伴们又来学习啦~今天我将给大家介绍《Go语言为什么采用晚绑定?》,这篇文章主要会讲到等等知识点,不知道大家对其都有多少了解,下面我们就一起来看一吧!当然,非常希望大家能多多评论,给出合理的建议,我们一起学习,一起进步!

问题内容

创建一个空数组,数组元素类型为 void -> int 的函数,最后遍历数组并依次调用数组内的函数

正确答案

除了一楼的方式外,你还可以:

package main

import "fmt"

const LS_SIZE int = 5

func main() {
    // Creating empty array
    var fns [LS_SIZE]func(x int) int    // 更改此处数组函数声明
    // Loop
    for i := 0; i 

输出:

fns[0]: 0
fns[1]: 1
fns[2]: 2
fns[3]: 3
fns[4]: 4

这种闭包问题很常见,fns的值在若干次循环中都是同一个内存地址,而i也在若干次循环后,更新到了 i++ 后的值。所以在你调用 fmt.Printf("fns[%d]: %d\n", n, fns[n]()) 的时候,不论是 fns[0]() 还是 fns[4]()等等,代表的都是同一个函数对象,fns[n]() 中i得值已经在上一个for循环执行完毕被更新到了5,而故而你最终得到的结果都是5.

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>