我的 golang 學習筆記系列三:結構體和介面

hengbo_liu發表於2021-10-15

結構體

結構體定義

  • 只要是型別都可以定義到結構體中,方法也是型別,結構體也是型別

##介面

  • 在go 介面中,只要結構體實現介面中的方法(引數和返回值都相同,注意:是實現該介面的所有方法才算實現這個介面),就相當於實現了這個介面

練習程式碼

package main

import "fmt"

func main() {
    user := NewUser(111,"劉先生",302,"上海市")
    // 獲取劉先生的地址資訊
    user.Address.GetProvinceAndId()


    // 獲取訂單金額
    wechat := &Wechat{}
    wechatPrice := kkk(wechat,111)
    aliPay := &AliPay{}
    aliPayPrice := kkk(aliPay,111)

    fmt.Println("微信的價格為:",wechatPrice,"支付寶的價格為:",aliPayPrice)

}

// User 結構體
type User struct {
    ID int
    Name string
    Address Address
}


// NewUser 結構體 USer 構造方法
func NewUser(id int,name string,addressId int,addressProvince string) *User {
    return &User{
        ID: id,
        Name:    name,
        Address: Address{
            ID: addressId,
            Province: addressProvince,
        },
    }
}

// Address 地址結構體
type Address struct {
    ID int
    Province string
}

// GetProvinceAndId 獲取城市資訊
func (a Address) GetProvinceAndId() {
    fmt.Println("城市ID為:",a.ID,"城市名稱為:",a.Province)
}



// Pay 定義一個介面  介面只對結構體有效
type Pay interface {
    Order(n int) int   // 方法名稱  此處只需要名稱 引數 返回值
}

// 結構體軟繼承一個方法

type Wechat struct {
    Pay string
}

// Order 繼承介面
func (w Wechat) Order(n int) int {
    return 300
}

type AliPay struct {
    Pay string
}

// Order 繼承介面
func (a AliPay) Order(n int) int {
    return 200
}

// 獲取訂單金額
func kkk(pay Pay,id int) int {
    return pay.Order(id)
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章