Go函数强制显式声明参数和返回类型,不支持默认参数、重载或可选参数;匿名函数为一等公民并支持闭包;方法需显式声明接收者;接口实现隐式但类型必须完全匹配。

Go语言函数必须显式声明参数类型和返回类型,没有默认参数、重载或可选参数,这是和其他主流语言最直观的差异。
函数基本语法:func关键字 + 明确类型签名
Go函数定义强制要求每个参数和返回值都标注类型,且参数列表不能省略括号(哪怕无参也要写 func name() {})。返回类型写在参数列表之后,多个返回值用括号包裹。
-
func add(a int, b int) int—— 正确;func add(a, b int) int也合法(同类型参数可合并) - 不支持
func add(a, b int = 0) int这类默认值写法 - 返回多个值时写成
func split(n int) (int, int),调用时可解构:x, y := split(10) - 命名返回值(如
func split(n int) (q, r int))会让返回语句变简洁(直接写return),但容易掩盖实际赋值逻辑,慎用
匿名函数与闭包:func() {} 可直接调用或赋值
Go中匿名函数不是语法糖,而是真实的一等公民,能捕获外层作用域变量形成闭包——这点常被初学者忽略,导致循环中 goroutine 捕获变量出错。
- 立即执行:
func() { fmt.Println("hello") }() - 赋值给变量:
f := func(x int) int { return x * 2 },此时f类型是func(int) int - 闭包陷阱示例:for 循环中启动 goroutine 调用匿名函数,若直接引用循环变量
i,所有 goroutine 最终看到的是同一个i的最终值;应传参或用let i = i方式捕获副本(Go 1.22+ 支持更自然的循环变量作用域)
方法定义:接收者必须显式写在 func 后、函数名前
Go没有“类”,只有“为类型定义的方法”。接收者不是隐式 this 或 self,而是作为第一个显式参数出现在函数签名中,且必须带类型名。
PHP是一种功能强大的网络程序设计语言,而且易学易用,移植性和可扩展性也都非常优秀,本书将为读者详细介绍PHP编程。 全书分为预备篇、开始篇和加速篇三大部分,共9章。预备篇主要介绍一些学习PHP语言的预备知识以及PHP运行平台的架设;开始篇则较为详细地向读者介绍PKP语言的基本语法和常用函数,以及用PHP如何对MySQL数据库进行操作;加速篇则通过对典型实例的介绍来使读者全面掌握PHP。 本书
立即学习“go语言免费学习笔记(深入)”;
- 值接收者:
func (s string) Len() int—— 接收string副本,修改不影响原值 - 指针接收者:
func (p *Person) setName(n string) { p.name = n }—— 可修改原结构体字段 - 注意:只有命名类型(如
type MyInt int)才能定义方法,不能为内置类型别名(如type A int)直接定义,除非它已是命名类型 - 接口实现是隐式的,只要类型实现了接口所有方法,就自动满足该接口,无需
implements声明
最容易被忽略的是:函数签名中的类型必须完全匹配——哪怕只是 type ID int 和 int,也不能互相传参或赋值,Go 不做隐式类型转换。这在定义回调函数或接口方法时经常引发编译错误。









