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 惯例代码的基础。
作者最新文章
iphone蓝牙连接ipad有什么用及连接方法教程
2026-09-21 17:28
PDF怎么取消密码保护?4种解锁方法整理
2026-09-08 18:23
三星 Galaxy Z Fold8 内屏边角支撑偏软?实测与官方回应
2026-09-08 16:39
手机Excel表格制作教程:小屏幕高效录入与格式调整指南
2026-09-04 09:27
PDF文档按页转换成图片怎么做?在线转换步骤整理
2026-09-03 11:06
上一篇:
《燕云十六声》海外预约超千万
热门文章
更多
精品专题
更多
Mac软件
更多
WINDOWS
更多


































