go-面相对象使用

本文介绍了Go语言中的packagebaseDemo示例,详细探讨了接口的使用、对象的多种创建方式、方法表达式、接口调用的多态性以及结构体之间的转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package baseDemo

import (
	"demo/baseDemo/utils"
	"fmt"
	"testing"
)

// 函数/方法的入参可以是一个接口(用来实现多态)
func funDemo(pointInterface1 utils.PointInterface) {
	pointInterface1.AddX()
}

func TestStruct(t *testing.T) {
	var point1 utils.Point //对象创建方式1
	point1.X = 1
	point1.Y = 1

	point2 := utils.Point{}           //对象创建方式2
	point6 := utils.Point{X: 1, Y: 2} // 对象创建方式4
	point5 := &utils.Point{1, 2}      //对象创建方式3-1 可以简化为 3-2(由编译器进行转换)
	point3 := utils.Point{1, 2}       //对象创建方式3-2 顺序赋值
	point4 := new(utils.Point)        //指向结构体的指针(类型:*Point)//对象创建方式4
	(*point4).X = 1                   //*:根据地址取出结构体,并进行赋值
	point4.Y = 1                      //编译器进行了转换,转成了(*point4).y = 1

	pointVO1 := utils.PointVO(point1) //不同结构体直接的转换
	fmt.Println(point1, point2, point3, point4, point5, point6, pointVO1)
}

// 方法表达式
func Test1(t *testing.T) {

	fun1 := utils.Point.InitPoint1
	point1, point2, point3 := utils.Point{}, utils.Point{}, utils.Point{}
	point1 = fun1(point1)

	fun2 := (*utils.Point).InitPoint1
	point2 = fun2(&point2)

	(&point3).InitPoint2() //引用传递
	point3.InitPoint2()    //可以简化,由编译器转换(只有类的方法才可以, 函数不会简化)
	fmt.Println(point1, point2, point3)
}

func TestInterface(t *testing.T) {

	//通过接口调用方法(用来实现多态,接口接收不同的类,执行类中多态的方法)
	point1 := utils.NewPoint(1, 1)
	var point2 utils.PointInterface = point1
	point2.AddY()
	fmt.Println(point2)

	//接口数组,可以存放不同的类,但是实现了接口
	pointInterfaceArr := []utils.PointInterface{}
	pointInterfaceArr[0] = point2

	//用空接口接收任意类型的参数
	var empty utils.EmptyInterface = &point1
	fmt.Println(empty)
}

func main() {
	p := utils.NewPoint(1, 1)
	p.SetX(10)
	p.GetX()
	fmt.Println(p)

	point3D := utils.Point3D{}
	point3D.Z = 1
	point3D.Point.X = 1
	point3D.X = 1 // 就近原则,但前类找不到属性/方法 会往父类上找 等于 point3D.Point.x = 1
	point3D.Point.InitPoint2()
	point3D.InitPoint2()

	point3D1 := utils.Point3D{utils.Point{1, 1}, 1}
	fmt.Println(point3D1)
}

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值