<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                ### 概述 在面向對象編程中,一個對象其實也就是一個簡單的值或者一個變量,在這個對象中會包含一些函數,這種 帶有接收者的函數,我們稱為方法(method) .本質上,一個方法是一個和特殊類型關聯的函數. 一個面向對 象的程序會用方法來表達其屬性和對應的操作,這樣使用這個對象的用戶就不需要直接去操作對象,而是 借助方法來做這些事情 . 在go語言中,可以給任意類型(包括內置類型,但不包括**指針類型**)添加相應的方法 .方法總是綁定對象實例, 并隱式將實例作為第一實參(receiver).方法語法如下 : func (receiver ReceiverType) funcName(parameters)(results) * 參數receiver可任意命名.放方法中未曾使用,可省略參數名 * 參數receiver類型可以是T或*T. 基類型T不能是接口或指針 * 不支持重載方法,也就是說,不能定義名字相同但是不同參數的方法. ### 類型的本質 ~~~ 在聲明一個新類型之后,聲明一個該類型的方法之前,需要先回答一個問題:這個類型的本質 是什么。如果給這個類型增加或者刪除某個值,是要創建一個新值,還是要更改當前的值?如 果是要創建一個新值,該類型的方法就使用值接收者。如果是要修改當前值,就使用指針接者。 這個答案也會影響程序內部傳遞這個類型的值的方式:是按值做傳遞,還是按指針做遞。保持 傳遞的一致性很重要。這個背后的原則是,不要只關注某個方法是如何處理這個值,而要關注 這個值的本質是什么。 ~~~ **簡單的說當對結構體的數據進行增加或刪除時,使用值拷貝.進行修改時,使用引用地址** ### 實例 ~~~ type long int //給某個類型綁定一個函數 func (temp long) Add(other long) long { //temp叫接收者,接收者就是傳遞的一個參數 return temp + other } func main() { var a long = 2 //定義一個變量并賦值 fmt.Println(a.Add(4)) //得到結果是6 ~~~ ### 為結構體添加方法 ~~~ type Person struct { name string age int gender byte } //帶有接收者的函數叫方法 func (tmp Person) PrintInfo() { fmt.Println(tmp) } //通過一個函數,給成員賦值 func (p *Person) setInfo(name string, age int, gender byte) { p.name = name p.age = age p.gender = gender } func main() { p := Person{"jack", 20, 1} p.PrintInfo() //定義一個結構體變量 var p2 Person p2.setInfo("milan", 18, 0) p2.PrintInfo() } ~~~ ~~~ {jack 20 1} {milan 18 0} ~~~ ### 不能為指針類型 ~~~ type pointer *int type long int func (p pointer)test(){ //報錯,因為pointer不能為指針類型 } func (p *long)test(){ //這里可以通過 } ~~~ ### 接收者類型不同函數名可以同名 以下不會報錯,因為函數的接收者類型不同. ~~~ type char byte type long int func (tmp char) test() { } func (tmp long) test() { } ~~~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看