为了账号安全,请及时绑定邮箱和手机立即绑定

函数变量的传递过程

员工ID生成器定义了一个函数,EmployeeIdGenerator

main函数先执行,定义了变量generator 属于 EmployeeIdGenerator的函数类型

并给变量 generator进行赋值

赋值过程中启动了 appendSn 函数,这个函数最终反回了一个 string,并把这个string赋值给了generator

最后打印时,执行了generateId这个函数,像函数内传递两个变量

这时,generateId这个函数接收到并在自己函数内部使用的变量【generator EmployeeIdGenerator】

要怎么去理解?他接收到的值是个应该是个函数,但在这个函数内部的使用有点没看懂。请老师给讲解一下好吗

正在回答

2 回答

个人理解:我觉得是main函数里,首先声明"generator"变量,再给"generator"变量赋值,最后将"generator"作为"generateId"函数的形参传入了函数里去执行相关逻辑

0 回复 有任何疑惑可以回复我~

我说下我的理解,我是个菜鸡,所说的仅是我个人理解,不一定对,讲出来也不是为了误导各位,只是给个想法,其他同学也多个考虑的方向;

package main

import (

    "fmt"

"strconv"

"sync/atomic"

)


type EmployeeIdGenerator func(company string, department string, sn uint32) string

var company = "Gophers"

var sn uint32


func generateId(generator EmployeeIdGenerator, department2 string) (string, bool) {

//这里修改变量department为department2,会好理解一点

if generator == nil {

return "", false


newSn := atomic.AddUint32(&sn, 1)

return generator(company, department2, newSn), true

}


func appendSn(firstPart string, sn uint32) string {

return firstPart + strconv.FormatUint(uint64(sn), 10)

}


func main() {

var generator EmployeeIdGenerator

generator = func(company string, department string, sn uint32) string {

    return appendSn(company+"-"+department+"-", sn)

}

fmt.Println(generateId(generator, "RD"))

}

从main函数看,先执行generateId函数,返回值为 generator("Gophers", "RD", 1), true

generator 再执行重写的方法 返回值为 appendSn("Gophers"+"-"+"RD"+"-", 1)

最终结果为 Gophers-RD-1 true



0 回复 有任何疑惑可以回复我~
#1

nitros 提问者

感谢回答。但是我也是小白,大家一起进步。 但是我觉得先看main函数的话,应该是先触发了变量定义的appendSn函数,这时给变量generator赋值了吧?然后把这个值变量传递给了函数generateId。这个时候才启动了generateId这个函数,并在函数印数部分设置了该函数下应用的引数接收了变量。同样的在该变量下另一个引数department2只是接引了“RD”这个数字串,所以是department还是department2都一样的。 我最终理解为,传过来的数值是nil就报false。不是的话就按照定好的函数结构EmployeeIdGenerator一一导入变量。结束。
2019-12-09 回复 有任何疑惑可以回复我~
#2

慕函数7347090 回复 nitros 提问者

我理解 generator EmployeeIdGenerator 这个的意思是,因为generator的类型是一个函数,所以在后面需要跟函数类型声明
2020-01-01 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Go语言第一课
  • 参与学习       107793    人
  • 解答问题       148    个

Go语言入门教程,编程之必备知识扩散,打好Go语言编程基础

进入课程

函数变量的传递过程

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信