zoukankan      html  css  js  c++  java
  • 【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
    }
    

    三、接口

  • 相关阅读:
    BZOJ1513: [POI2006]Tet-Tetris 3D
    BZOJ3210: 花神的浇花集会
    BZOJ3207: 花神的嘲讽计划Ⅰ
    BZOJ3170: [Tjoi 2013]松鼠聚会
    BZOJ3747: [POI2015]Kinoman
    解题:POI 2008 Subdivision of Kingdom
    解题:JSOI 2007 重要的城市
    解题:USACO13NOV No Change
    解题:洛谷1120 小木棍
    解题:SCOI 2008 配对
  • 原文地址:https://www.cnblogs.com/lvjincheng/p/13385984.html
Copyright © 2011-2022 走看看