【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
}

三、接口

原文地址:https://www.cnblogs.com/lvjincheng/p/13385984.html