You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Go语言函数类型学习实践:代码相关技术咨询

Go语言函数类型代码修正与核心知识点解析

嘿,看起来你在尝试Go里的函数类型传递,思路完全没问题!只是最后一行代码有个小拼写失误,我帮你修正并拆解下相关知识点:

首先,你的代码末尾截断的部分是变量名拼写错误——gree应该是greet,这是你前面用test1返回值赋值的变量名。下面是修正后的完整可运行代码:

package main
import "fmt"

func myfn1(i string) { fmt.Println(i) }
func myfunc2(firstName string, lastName string) string { 
    return "Hello " + firstName + " " + lastName + "!" 
}

func test(do func(string), val string) { do(val) }
func test1(t func(string,string), fname string, lname string) string { 
    opt := t(fname, lname) 
    return opt 
}

func main() { 
    test(myfn1, "Aishu") 
    greet := test1(myfunc2, "Aishu","S") 
    fmt.Println(greet) // 修正拼写错误:gree → greet
}

接下来聊聊你用到的核心知识点——Go的函数类型与函数作为参数传递:

  • Go里的函数是一等公民,意味着函数可以作为参数、返回值,也可以赋值给变量。你定义的test和test1函数,就是把函数类型作为参数来接收的典型例子。
  • 比如test的第一个参数do func(string),它定义了一个函数类型:接收一个string类型参数,没有返回值。myfn1的签名完全匹配这个类型,所以可以直接传递给test。
  • test1的第一个参数t func(string,string)则是另一种函数类型:接收两个string参数,返回一个string值,这正好和myfunc2的签名对应,所以能成功调用并拿到返回值。

你的代码逻辑本身是对的,只是最后一行的小笔误导致代码截断报错,修正后就能正常运行啦~

内容的提问来源于stack exchange,提问作者Aishu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:30:26