溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Go中的struct之方法method初體驗(yàn)

發(fā)布時(shí)間:2020-09-27 07:12:04 來源:網(wǎng)絡(luò) 閱讀:547 作者:ck_god 欄目:編程語言
// code_017_struct_method_usage project main.go
package main

import (
    "fmt"
)

type MyInt int

func (a MyInt) Add(b MyInt) MyInt {
    return a + b
}

func Add(a, b MyInt) MyInt {
    return a + b
}

type Person struct {
    name string
    sex  byte
    age  int
}

func (p Person) PrintInfo() {
    fmt.Println(p.name, p.age)
}

func (p *Person) SetInfoPointer() {
    (*p).name = "god_girl"
    p.sex = 1
    p.age = 22
}

func (p Person) SetInfoValue() {
    p.name = "god_like"
    p.sex = 1
    p.age = 23
}

func main() {
    /*
        帶有接收者的函數(shù),我們稱之為方法(method).本質(zhì)上,一個(gè)方法則是一個(gè)和特殊類型關(guān)聯(lián)的函數(shù)。
        func (receiver ReceiverType) funcName(parameters){results}
        1)參數(shù) receiver 可任意命名。如方法中未曾使用,可省略參數(shù)名。
        ?參數(shù) receiver 類型可以是 T 或 *T?;愋?T 不能是接口或指針。
        ?不支持重載方法,也就是說,不能定義名字相同但是不同參數(shù)的方法。
        2)在Go語言中,可以給任意自定義類型(包括內(nèi)置類型,但不包括指針類型)添加相應(yīng)的方法。

    */
    //1) 基本使用
    var a MyInt = 1
    var b MyInt = 1

    fmt.Println("a.Add(b)=", a.Add(b))
    fmt.Println("Add(a,b)=", Add(a, b))
    //2)結(jié)構(gòu)體作為接收者
    p := Person{"ck_god", 0, 18}
    p.PrintInfo()

    //3)結(jié)構(gòu)體的值語義和引用語義

    p1 := Person{"wanglaoji", 0, 27}
    fmt.Println("函數(shù)調(diào)用前= ", p1)
    (&p1).SetInfoPointer()
    fmt.Println("函數(shù)調(diào)用后=", p1)

    fmt.Println("==========================")
    p2 := Person{"ck_god", 0, 18}
    fmt.Println("函數(shù)調(diào)用前 = ", p2)
    p2.SetInfoValue()
    fmt.Println("函數(shù)調(diào)用后 = ", p2) //函數(shù)調(diào)用后 =  {mike 109 18}

}
向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI