• 【Golang学习笔记】入门:结构体、方法与接口


    一、结构体struct

    Golang作为一门面向过程的语言,没有类的概念;但为了面向对象开发,设计有结构体struct这一数据类型。

    结构体是复合类型,当需要定义类型,它由一系列属性组成,每个属性都有自己的类型和值的时候,就应该使用结构体,它把数据聚集在一起。
    组成结构体类型的那些数据成为字段(fields)。每个字段都有一个类型和一个名字;在一个结构体中,字段名字必须是唯一的。

    type 结构体名 struct {
        字段1 类型
        字段2 类型
    }
    

    声明和初始化

    结构体但声明和初始化,有以下形式:

    1. 使用var关键字
    2. 使用new函数
    3. 使用字面量
    // 1. 使用var关键字
    var s T
    s.a = 1
    s.b = 2
    
    // 2.使用new函数
    type people struct {
        name string
        age int
    }
    
    func main() {
        ming := new(people)
        ming.name = "xiao ming"
        ming.age = 18
    }
    
    // 3.使用字面量
    type people struct {
        name string
        age int
    }
    
    func main() {
        ming := &people{"xiao ming", 18}
    }
    

    第一种形式返回但是实例但结构类型,后两种返回的是指向这个结构类型的一个指针。
    后两种形式下,修改值的方式是先*取值再修改:

    (*ming).name = "xiao hong"
    

    但Golang中可以直接如此修改,但是要记住其本质是指针取值再修改:

    ming.name = "xiao hong"
    

    二、方法

    方法是类的方法,函数是大家的函数。

    Go 不是面向对象的语言,而我们知道常见的 Java、C++ 等面向对象编程的语言中,实现类的方法的做法都是编译器隐式的给函数加一个 this 指针,而在 Go 里,这个 this 指针需要明确的申明出来,其实和其它 OO 语言并没有很大的区别。
    在C++中,

    class Circle {
      public:
        float getArea() {
           return 3.14 * radius * radius;
        }
      private:
        float radius;
    }
    
    // 其中 getArea 经过编译器处理大致变为
    float getArea(Circle *const c) {
      ...
    }
    

    在Go中,

    func (c Circle) getArea() float64 {
      //c.radius 即为 Circle 类型对象中的属性
      return 3.14 * c.radius * c.radius
    }
    

    三、接口

  • 相关阅读:
    CentOS 7下PXE+Kickstart无人值守安装操作系统
    利用pentestbox打造ms17-010移动"杀器"
    XSS测试代码
    sublime Text3基本配置记录+python
    CTF中那些脑洞大开的编码和加密
    信息安全相关资源
    RIP 实验
    python输出有色记录
    下载Chrome商店和Youtube资源
    mysql使用问题记录
  • 原文地址:https://www.cnblogs.com/lvjincheng/p/13385984.html
Copyright © 2020-2023  润新知