Go学习笔记(六)

185 阅读2分钟

(文章持续更新中...有志同道合的人可以一起探讨下。整个系列(1~8)准备重写,不过都是很基础的入门笔记,想学到很深入的东西则不建议阅读...)

Go 语言使用结构体和结构体成员来描述真实世界的实体和实体对应的各种属性。可以类比为“类”

Go 语言中没有“类”的概念,也不支持“类”的继承等面向对象的概念。

结构体就是数据结构一种表现方式,可嵌套

// 结构体的定义
type 类型名 struct {
    字段1 字段1类型
    字段2 字段2类型
    …
}

type Point struct {
    X int
    Y int
}

结构体的定义只是一种内存布局的描述,只有当结构体实例化时,才会真正地分配内存。因此必须在定义结构体并实例化后才能使用结构体的字段

// 基本实例化格式
var ins T

type Point struct {
    X int
    Y int
}
var p Point
p.X = 10
p.Y = 20

// Go 语言中,还可以使用 new 关键字对类型(包括结构体、整型、浮点数、字符串等)进行实例化,结构体在实例化后会形成指针类型的结构体。

ins := new(T)

Go 语言中,对结构体进行&取地址操作时,视为对该类型进行一次 new 的实例化操作

ins := &T{}
Go 语言中,访问结构体指针的成员变量时可以继续使用.操作符。 C/C++ 语言中,使用 new 实例化类型后,访问其成员变量时必须使用->操作符

Go语言为任意类型添加方法

// 为基本类型添加方法
package main

import (
    "fmt"
)
// 将int定义为MyInt类型
type MyInt int
// 为MyInt添加IsZero()方法
func (m MyInt) IsZero() bool {
    return m == 0
}
// 为MyInt添加Add()方法
func (m MyInt) Add(other int) int {
    return other + int(m)
}
func main() {
    var b MyInt
    fmt.Println(b.IsZero())
    b = 1
    fmt.Println(b.Add(2))
}