建设网站需要做的工作内容,网站建设招标办法,h5开发网站,全国网站开发公司go细节 一、使用指针接受者和不使用指针接受者1#xff0c;不使用指针接受者#xff1a;2#xff0c;使用指针接受者3#xff0c;区别与优劣势 一、使用指针接受者和不使用指针接受者
1#xff0c;不使用指针接受者#xff1a;
func (d dog) move() {fmt.Println(不使用指针接受者2使用指针接受者3区别与优劣势 一、使用指针接受者和不使用指针接受者
1不使用指针接受者
func (d dog) move() {fmt.Println(狗会动)
}
func main() {var x Movervar wangcai dog{} // 旺财是dog类型x wangcai // x可以接收dog类型var fugui dog{} // 富贵是*dog类型x fugui // x可以接收*dog类型x.move()
}move 方法使用了值接收者 dog这意味着它可以被任何 dog 类型的实例调用。在 main 函数中x 可以接收 dog 类型的值也可以接收 *dog 类型的指针。然而在将 wangcai 赋值给 x 时Go 会自动进行值到指针的转换因此这里的代码仍然可以编译通过。
2使用指针接受者
func (d *dog) move() {fmt.Println(狗会动)
}
func main() {var x Movervar wangcai dog{} // 旺财是dog类型x wangcai // x不可以接收dog类型var fugui dog{} // 富贵是*dog类型x fugui // x可以接收*dog类型
}move 方法使用了指针接收者 *dog这意味着它只能被 *dog 类型的指针调用。在 main 函数中将 wangcai 赋值给 x 就会导致编译错误因为 wangcai 是一个 dog 类型的值而 x 要求接收 *dog 类型的指针。只有当将 fugui 赋值给 x 时代码才能编译通过。
3区别与优劣势 调用方式不同 值接收者方法可以被实例值调用也可以被指针调用而指针接收者方法只能被指针调用。 值接收者方法在调用时会隐式地将实例值复制一份而指针接收者方法在调用时操作的是同一个实例不会产生副本。 修改对象 使用指针接收者方法可以修改对象的状态因为它们直接操作实例而值接收者方法只能修改副本的状态不会影响原始实例。 性能和开销 值接收者方法会产生一份实例的拷贝可能导致内存和性能开销。 指针接收者方法直接操作实例避免了拷贝通常更高效。 选择使用哪种接收者取决于你的需求和设计目标 如果方法需要修改对象的状态或者需要操作对象的指针使用指针接收者。 如果方法不需要修改对象状态使用值接收者这样可以避免不必要的指针操作和副本创建。