Go语言入门到实战——10.Go语言面向对象编程

Go语言入门到实战——00主目录
在上一讲中我们学习了Go语言的函数的相关知识。

一.封装数据

1.定义结构体

type Employee struct{
	Id string
	Name string
	Age int
}

2.实例的创建与初始化

package test

import (
	"testing"
)

type Employee struct{
	Id string
	Name string
	Age int
}

func Test(t *testing.T) {
	e := Employee{"1","Jack",20}
	e1 := Employee{Name:"Jack",Age:20}
	e2 := new(Employee)//这里返回了指针引用,等价于e2 := &Employee{}
	e2.Id = "10"//注意,实例的指针访问成员使用的是.不是->
	t.Log(e,e1,e2)
	t.Logf("e's type is %T,\ne2's type is %T",e,e2)//打印结果我们可以看出来
												   //e是结构体类型,而e2是指针类型
}

二.行为(方法)

行为和函数很像,但是又不太一样,我们来看看下面的内容就明白了.

//从下面我们可以看到行为是在函数名前面加上了(参数),这种方式指定了这个方法可以被
//被前面的参数类型调用,这有点面向对象的意思了,不过我们更加的推荐方案2,因为方案1会
//进行拷贝复制比较占用空间
package test

import (
	"testing"
	"fmt"
)

type Employee struct{
	Id string
	Name string
	Age int
}

func (e Employee) String1() string{
	return fmt.Sprintf("Id:%s-Name:%s-Age:%d",e.Id,e.Name,e.Age)
}

func (e *Employee) String2() string{
	return fmt.Sprintf("Id:%s-Name:%s-Age:%d",e.Id,e.Name,e.Age)
}
func Test(t *testing.T) {
	e := Employee{"1","Jack",20}
	e2 := &e
	//不能使用e.String2(),String2()是指针的方法
	t.Log(e.String1())
	//这里使用e2.String1()其实也是可以的,因为String1()可以看成是Employee的成员函数
	//而go的指针调用成员变量或者函数都是使用.而不是->,没有区别
	t.Log(e2.String2())
	//关于上面两段注释,如果不理解,可以这么进行记忆来理解(只是方便记忆,不是真的)
	//可以理解为指针类型是类型的儿子,类型是父亲,父亲无法强转为儿子(可能报错),而
	//儿子可以转为父亲
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值