• (三十)golang--面向对象


    首先我们要明确:

    • golang并不是纯粹的面向对象的编程语言;
    • golang没有类class,使用struct代替;
    • golang面向对象编程非常简洁,去掉了传统的继承、重载、构造函数和析构函数、隐藏的this指针等;
    • golang仍然有面向对象编程的继承、封装和多态的特性,只是实现的方法和其他oop语言不一样;
    • golang耦合性低,非常灵活;面向接口编程是非常重要的特性;

     从这可以看出,结构体其实是我们自己定义的数据类型;结构体变量是具体的,实际的,代表一个具体变量;

    申明结构体的几种方式:

    • var person Person
    • var person Person = Person(“Tom”,20)
    • var person *Person = new(Person)
    • var person *Person = &Person()

    结构体类型内存的分配机制:

    可以看出,各结构体之间是相互不影响的。

     这种方式则p2是一个指针,指向p1,修改p2的值会同时修改p1的值。

    结构体的使用细节:

    • 结构体的字段是在内存中连续的;
       

      对于第二种指针,在内存中的示意图:

       首先,绿色块四个数据的的地址是连续的,然后两个绿色块的地址是连续的,也就是红色框中的地址,而指向红色框的地址是不连续的,相差16?

    • 结构体是用户自己定义的类型,和其它类型进行转换需要完全相同的字段名;
    • 结构体进行type重新定义(相当于取别名),golang认为是新的数据类型,但是可以强转;
    • 在结构体的字段上,还可以取一个标签tag,该tag可以通过反射机制获取,常见的使用场景是序列化和反序列化;

      将输出转换成了小写。 

    方法:作用在指定数据类型上的,因此,自定义数据类型,也可以有方法。

     这里test方法是针对于Person类型绑定;test方法只能通过Person类型的变量来调用;这里方法里面的p相当于是一个形参;

     

    方法的声明:

    func (recevier type) methodName(参数列表) (返回值列表){

      方法体

      return 返回值

    }

    使用事项:

    • 结构体类型是值类型;
    • 如果一个变量实现了string方法,那么fmt.Println默认会调用这个变量的String进行输出;

    方法和函数的主要区别:

    (1)在调用时的区别,变量.方法名

    (2)函数只能接受与之对应的值类型或者引用类型;

    (3)方法既可以接受引用类型,也可接受值类型,因为底层会对其做一个优化;主要是看和什么类型进行拷贝的;

  • 相关阅读:
    vs2008.net多语言实现方法
    C#中 Process的扩展类ProcessExtensions
    C#获取当前系统信息的类
    非常好用的GridView控件yyControls中的SmartGridView
    Android提供两个常用的消息弹出框【Toast和Alert】
    [置顶] Asp.net中实现多语言的Page的扩展的基类
    C# word类库
    在系统出现未处理的错误时,在Global的Application_Error记录下错误
    向大家推荐一个非常好用的JS日历控件My97DatePicker
    网页代码测试工具集合
  • 原文地址:https://www.cnblogs.com/xiximayou/p/11913442.html
Copyright © 2020-2023  润新知