当前位置:恩施知识网 > 健康之路 > 正文

go语言中的面向对象,面向对象和面向过程的语言

其实go语言并没有完整的面向对象,go语言可以说是面向接口编程的一个语言,go里面最重要的一个组件就是接口,接口让go语言变得非常灵活。函数go语言中的多返回值,使用的方式是栈,这不同于c的寄存器模式,优点是结构简单,可以从右向左压入栈中,计算的时候从栈中取出就会从左往右的排列了,而且可以天生支持多重返回,缺点就是速度比从寄存器模式慢了很多。go里面的继承,使用的是结构体的内嵌type People struct { face int}type Student struct { Pe

其实go语言并没有完整的面向对象,go语言可以说是面向接口编程的一个语言,go里面最重要的一个组件就是接口,接口让go语言变得非常灵活。

函数

go语言中的多返回值,使用的方式是栈,这不同于c的寄存器模式,优点是结构简单,可以从右向左压入栈中,计算的时候从栈中取出就会从左往右的排列了,而且可以天生支持多重返回,缺点就是速度比从寄存器模式慢了很多。

go里面的继承,使用的是结构体的内嵌type People struct { face int}type Student struct { People year int}// 当然也可以选择不内嵌,将结构体当成一个类型也行type Student struct { People People year int}

在struct中也可以将接口当作一个类型加进去

type Talk interface { Say()}type People struct { Talk}

看到这里你应该发现了把,在go里面变量的首字母的大小写是有不同的含义的,如果首字母是小写的,那么这个变量的使用权就是这个包的内部,如果是大写那么这个变量就可以被其它包使用。所以它的界限是以出包不出包为界线的。

接下来我们谈一个非常重要的东西 --- 方法

方法type Student struct { year int}func(s *Student)Show(){ fmt.Println(s.year)}

这里我们讲解一下知识点,首先是方法的使用方式,如图所示,方法使用就是func(变量 对象)方法名称(){} ,这里注意一下,并不是只有structure才能拥有方法,任何只要是以下方法的对象都可以拥有

type Student intfunc(s *Student)get(){}type People map[string]string

只要是这种形式的都可以拥有方法,哦对了接口不行。因为接口没人任何的实际意义,它也就不可能拥有方法。

这里还有一个知识点,就是go语言中的指针,

// 这是指针类型的声明,我声明了,a是int类型,并且是一个int类型的指针类型。也就是说a装的不是int,是某个int的地址。var a *int// 赋值, 这里注意哈,new后面只能是类型 type ,所以这里可以使用new(int)因为int是一个类型。a = new(int)// 这样也是OK的。这个时候类型就是b了,b和int不是一个类型。var a *btype b inta = new(b)

这里稍微谈一下 类型和底层类型的使用。

type b intfunc fast()b{ return 1}

可以非常明显的看出,b类型的底层是int,但是b不是int,int只能是b的底层数据,就跟rune和int32,byte和uint8一样。 但是这个时候重点来了,这里有个返回值,返回的是b,那么具体要返回什么值才能满足b呢?也就是返回它的具体值即可。

更多例子:

type b map[string]stringfunc fast()b { return map[string]string{}}

这里还要说一下,在go里面,值类型上的方法和指针类型上的方法是可以直接调用的。

举个例子:

type a sturct {}func(a1 a)get(){}// 这样百分之一百OKfunc main(){ var aa a aa.get()}// 这样也是OK的func main(){ var aa = new(a) aa.get()}func(a1 *a)set(){}// 这样一定OKfunc main(){ var aa = new(a) aa.set()}// 但是这样也OKfunc main(){ var aa a aa.set() }接口

接口的本质实际上是代码的解耦,接口的使用,跟接口的实现在两个部分。

go实现了隐式接口,只要实现了接口的方法就等于实现了这个接口,为此,有些特立独行的接口为了防止被实现就内置包内方法,这样外部包就无法访问了。

任何变量都实现了空接口 interface{} 所以说,只要是空接口的地方,所有的变量类型都可以放进去。当然了,内部需要断言一下。

接口的实现

上面说到了定义在值和指针类型上的方法可以互换,或者说可以语法糖式的调用,但是在接口的实现上不能打马虎眼。一定不行就是不行;

type Tallk interface { say()}type Student struct {}func(s *Student)say(){}func main(){ s := new(Student) // 这里必须是指针类型才可以,值类型就不行, var s Student,就是错的。 // 但是,如果是值类型实现的方法,那么指针类型的初始化是可以正常使用的,也就是说指针类型拥有比值类型更高的等级。 Td(s)}func Td(t talk) {}接口的继承func main() {var c bc.set()c.get()}type a interface {get()}type b interface {aset()}

go语言中的面向对象,面向对象和面向过程的语言

go语言是面向对象语言吗?

go既不是面向对象,也不是面向过程,但是如果想要实现它们其实是可以办到的

go语言中的面向对象,面向对象和面向过程的语言

go语言是面向对象的还是面向过程的?

两者都不算吧,go语言没有明显的倾向,可能由于语言的设计者都是牛人的原因,他们更倾向于让编程者去考虑该怎么去用它。也许它的特色就是灵活吧。你可以用它实现面向对象,但它本身不支持面向对象的语义。
免责申明:以上内容属作者个人观点,版权归原作者所有,不代表恩施知识网立场!登载此文只为提供信息参考,并不用于任何商业目的。如有侵权或内容不符,请联系我们处理,谢谢合作!
当前文章地址:https://www.esly.wang/jiankang/27187.html 感谢你把文章分享给有需要的朋友!
上一篇:文章被封杀的原因竟然不是因为出轨 下一篇:一文搞懂人体神经系统见到喜欢的人就脸红心跳到底是咋回事

文章评论