go语言心得2 | 青训营笔记

55 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 9 天

关于面向对象的一些看法

  1. 昨天简单的谈了一下对Go语言基础语法的看法,今天就来说说我对Go语言面向对象的三大特性:封装、继承、多态的理解。Go语言和其它语言一个最大的区别就是没有class这个关键字,也没有Java中的implements或者是extends这种类似的关键字,这就导致了Go从表面上来看并不具有oop性质,但面向对象也仅仅是个概念定义,并没有规定以何种形式来实现。Go语言给我们提供了结构体struct来定义“类”,这个类中我们只能定义属性,不能定义字段,比如说定义一个用户类结构体:
type user struct {
    Username string
    Password string
}

通过定义的结构体我们就可以定义出结构体变量,实际上就相当于是一个对象。如果想给结构体添加方法的话,我们只需要定义特殊类型的函数(指定了接受者的函数),我们指定了函数的接收者那么就只能由这个类型的变量所调用,就相当于是对象调用方法了。实际上面这些就已经完成了oop中的封装特性,同时由于Go语言中没有Java和C++里面的Private、public这种类似的关键字,我们要想实现对属性字段的权限访问控制可以通过属性字符首字母大小写来指定,如果大写的话就可以在别的源文件中访问,如果小写的就只能在本文件下访问。关于多态的话,Go语言提供了interface这个关键字用于定义接口,接口中只能定义抽象方法,不能书写具体的方法体,当然也可以什么都没有,如果一个结构体实现了某一个接口中的所有方法,我们就可以称这个结构体或者叫做类就实现了这个接口,我们就可以将结构体变量相应的赋值给接口类型的变量,这样多个结构体实现同样的接口就可以实现多态了。


  1. Go语言中感觉对面向对象这个概念模糊了很多,但是间接又隐含了面向对象的这个概念,可以说还是很巧妙了。不过个人还是偏向于Java的面向对象那套写法,可能是先入为主写习惯了吧哈哈哈,这种写法还是要适应一下。

  1. Go语言还内置了很多其它复合类型的数据结构,像slice, map, channel等,不过最欣慰的还是Go语言还是延续了指针的概念,其实大一学指针的时候就感觉到它的强大了,不过当时还是迷迷糊糊懵懵懂懂的,特别是什么数组指针还有指针数组啥的一下就绕昏了,这次学习Go基础的时候顺带着把指针这块的知识又捡起来了,还是不错哈哈。然后其它的就等明天再说喽。