Golang之物件導向和指標

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

武大郎,來十個燒餅。。。

package mainimport "fmt"type Integer int//為內建的int類型增加了新方法less,物件導向寫法func (a Integer) Less(b Integer) bool {    return a < b}func Integer_Less(a Integer, b Integer) bool {    return a < b}//Go的物件導向,如果需要修改對象,必須用指標,這不是Go約束,還是自然約束func (a *Integer) Add(b Integer) {    *a += b}//Integer類型是一個int,為int起一個別名Integer,//             並且增加一系列方法Add,Add2,又編程了一個新的類型,這個類型還完全擁有int的功能//傳遞值而不是指標func (a Integer) Add2(b Integer) {    a += b    fmt.Println(a)    fmt.Println(b)}func main() {    var a Integer = 1    if a.Less(2) {        fmt.Println(a, "Less 2")    }    if Integer_Less(a, 2) {        fmt.Println(a, "Less 2")    }    //為Integer又加了Add方法,Add()方法需要修改對象的值,需要指標引用    //a.Add(2)    //fmt.Println("a=", a)    //實現成員方法傳入的如果不是指標,而是值,也就是Integer,而非*Iteger,,這時a=1    a.Add2(2)    fmt.Println("a=", a)    //Go語言和C語言一樣,類型都是基於值傳遞,想要修改變數的值,只能傳遞指標}/*Go語言中沒有隱藏的this指標方法施加的目標(“對象”)顯示傳遞,沒有被隱藏方法施加的目標(“對象”)不需要非得是指標,也不用非得叫this*/

 大郎說,燒餅放在家裡了

//值語義和引用語義//b=a//b.Modify()//如果b的修改,不影響a的值,那麼此類型就是實值型別//如果會影響a的值,那麼此類型就是參考型別//Go語言大多類型都是值語義//基本類型:byte、int、bool、float32、float64、string等//複合類型:數組(array)、結構體(struct)和指標(point)//數組被完整的複製,就是值語義func main() {var a=[3]int{1,2,3}var b=a //表示b=a指派陳述式,是數組內容的完整複製b[1]++fmt.Println(a,b)}//引用方法,需要使用指標func main() {    var a = [3]int{1, 2, 3}    var b = &a //這句賦值,是數組內容的引用,變數b類型是*[3]int類型    b[1]++    fmt.Print(a, *b)}

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.