Go 函数与方法区别:(ip IP) 语法详解
作者:吹吹风会发光
时间:2026-04-14
浏览:0
在Go语言中,func(ipIP)DefaultMask()IPMask中的(ipIP)是方法接收者声明,表示该函数是为类型IP定义的方法而非普通函数,接收者ip是类型IP的值(或指针),用于访问和操作该类型的实例。
本文目录

在 Go 语言中,`func (ip IP) DefaultMask() IPMask` 中的 `(ip IP)` 是方法接收者声明,表示该函数是为类型 `IP` 定义的**方法**而非普通函数,接收者 `ip` 是类型 `IP` 的值(或指针),用于访问和操作该类型的实例。
Go 区分函数(function) 和 方法(method):函数独立于任何类型,而方法必须绑定到一个接收者(receiver)——即某个已定义的命名类型(不能是接口、指针类型字面量或内置类型如 int 直接作为接收者)。语法 func (r ReceiverType) MethodName(...) ReturnType 中的 (r ReceiverType) 就是接收者声明。
以 net.IP 类型的 DefaultMask() 方法为例:
func (ip IP) DefaultMask() IPMask {
if ip = ip.To4(); ip == nil {
return nil
}
switch true {
case ip[0] < 0x80:
return classAMask
case ip[0] < 0xC0:
return classBMask
default:
return classCMask
}
}这里:
- (ip IP) 表示:该方法的接收者名为 ip,类型为 net.IP(即 []byte 的别名);
- ip 在方法体内可像普通变量一样使用(如调用 ip.To4()、访问 ip[0]);
- 调用时需通过 IP 实例发起:addr := net.ParseIP("192.168.1.1"); mask := addr.DefaultMask();
- 接收者 ip 是值拷贝(因为是 IP 而非 *IP),因此该方法不会修改原始 IP 数据——这符合 DefaultMask() 的只读语义。
⚠️ 注意事项:
- 接收者类型必须是当前包定义的命名类型,或在其他包中定义但导出的类型(如 net.IP 是导出类型,故其方法可在 net 包内定义);
- 不可为 type MyInt int 定义接收者 func (i MyInt) ... 在另一个包中(跨包限制);
- 若需修改接收者状态,应使用指针接收者:func (ip *IP) Mutate();
- 接收者名称 ip 仅在方法作用域内有效,建议使用简短、语义清晰的名称(如 t for time.Time, s for string-like types)。
总结:(ip IP) 是 Go 方法的核心语法糖,它将函数“绑定”到类型上,实现面向对象风格的封装与行为归属,是理解 Go 类型系统与标准库设计的关键入口。掌握接收者机制,是写出可维护、符合 Go 惯例代码的基础。
作者最新文章
漫蛙网页版免费进入地址分享
2026-10-13 13:16
漫蛙manwa官方网站入口
2026-10-13 13:15
Typora怎么插入表格?Ctrl+T快速建表并调整行列
2026-10-05 17:59
2026年好用的思维导图软件推荐:高效实用排行榜
2026-09-30 13:14
寻简思维导图手机版设置在主题框中插入公式的方法
2026-09-30 13:03
上一篇:
《燕云十六声》海外预约超千万
下一篇:
U盘无法弹出怎么解决?安全移除方法大全
热门文章
更多
精品专题
更多
Mac软件
更多
WINDOWS
更多









































