← 返回文章列表

golang學習記錄(9)

Go 基礎學習系列第 9 篇,記錄語法、示例與學習過程。

1、type關鍵字

type關鍵字常用於

定義結構體

定義介面

定義型別別名

型別定義

型別判斷

1.1、型別別名

別名可以讓使用者更好理解程式碼,提高程式碼的可讀性和可維護性,在編譯的時候,會將別名編譯為原來的型別

//以定义int的别名举例
type MyInt = int
var i MyInt
fmt.Println("%T\n", i)
//上面代码输出的结果为int,相当一给int取了一个小名,MyInt本质上还是int

1.2、自定義型別

自定義型別是一種新的資料型別,它是基於已有的型別(如int、string等)建立的,它可以包含多個欄位,每個欄位都有自己的名稱和型別。自定義型別可以用於建立更復雜的資料結構,以滿足特定的需求。

type MyInt int // 相比于类型别名,没有等号
var i MyInt
fmt.Println("%T\n", i)
//上面代码输出的结果为xxxx.MyInt

自定義型別有什麼意義?

可以給資料型別增加方法,使用更加靈活

func (mi MyInt) string() string{
    return strconv.Itoa(int(mi))
}

func main(){
    var i MyInt = 10
    fmt.Println(i.string())
}
// 上面的代码给MyInt增加了一个string方法,这样就可以将MyInt类型转换为string类型

2、結構體的定義和初始化

go中的結構體借鑑了物件導向的特性和C語言結構體的簡潔性

假設要設計一個結構體儲存個人資訊,包括name、age、address、mobile等,那麼可以使用如下方式定義結構體:

type Person struct{
    name string
    age int
    address string
    mobile string
}

func main(){
    //结构体的初始化方式
    p1 := Person{"小明", 18, "北京", "13812345678"} //省略写法每个元素都要写
    p2 := Person{name: "小红", age: 19, address: "上海", mobile: "13812345679"} //能够填部分元素,更灵活
    var p3 Person
    p3.name = "小刚"

    var persons []Person
    persons = append(persons, p1)
    persons = append(persons, Person{"小刚", 20, "广州", "13812345680"})
}

3、匿名結構體

定義臨時的一次性的結構體

address := struct{
    province string
    city string
    district string
}{
    "北京",
     "北京", 
     "海淀区"
}
fmt.Println(address.city)

4、結構體巢狀

結構體可以在一個結構體中巢狀另一個結構體

type Person struct{
    name string
    age int
}
// 可以不用重复定义
type Student struct{
    // 第一种嵌套方式
    p Person
    score float32
}

func main() {
    // 第一种初始化方式
    s := Student{
        p: Person{
            name: "小明",
            age: 18,
        },
        score: 90,
    }
    fmt.Println(s.p.name)

    // 第二种初始化方式
    s := Student{}
    s.p.name = "小明"
}

匿名巢狀

type Person struct{
    name string
    age int
}
// 可以不用重复定义
type Student struct{
    // 第二种嵌套方式--匿名嵌套
    Person
    score float32
}

func main() {
    // 初始化方式
    s.name = "小明"
}

5、結構體 定義 “方法”

給結構體定義一個方法

在go中定義結構體的方法是在結構體外進行定義的

type Person struct{
    name string
    age int
}

func (p Person) print(){
    fmt.Printf("姓名:%s, 年龄:%d\r\n", p.name, p.age)
}

func main() {
    p := Person{
        name: "小明",
        age: 18,
    }
    p.print()
}

想要在結構體方法中修改結構體的屬性,需要使用指標型別的結構體

type Person struct{
    name string
    age int
}

func (p *Person) print(){
    p.age = 19
    fmt.Printf("姓名:%s, 年龄:%d\r\n", p.name, p.age)
}

func main() {
    p := Person{
        name: "小明",
        age: 18,
    }
    p.print()
}
//此时输出的结果为:姓名:小明, 年龄:19
關於這篇文章的日期

保留舊站原始文章標註的日期;實際開始寫作的時間可能更早。

原始日期: 2024-10-19 15:56:07 +0800

同一系列 · Go 基礎學習

上一篇golang學習記錄(8) ←下一篇golang學習記錄(10) →