go 語言指標

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

Go語言保留著C中值和指標的區別,但是對於指標繁瑣用法進行了大量的簡化,引入引用的概念。所以在Go語言中,你幾乎不用擔心會因為直接操作內寸而引起各式各樣的錯誤。Go語言的指標,基本上只剩下用於區分 byref 和 byval 語義。

首先看個簡單的例子

package mainimport "fmt"func zeroval(ival int) { ival = 0}func zeroptr(iptr *int) { *iptr = 0}func main() { i := 1 fmt.Println("initial:", i) zeroval(i) fmt.Println("zeroval:", i) zeroptr(&i) fmt.Println("zeroptr:", i)Pointers can be printed too. fmt.Println("pointer:", &i)}
123456789101112131415161718192021 package mainimport "fmt" func zeroval(ival int) {    ival = 0} func zeroptr(iptr *int) {    *iptr = 0}func main() {    i := 1    fmt.Println("initial:", i)    zeroval(i)    fmt.Println("zeroval:", i)     zeroptr(&i)    fmt.Println("zeroptr:", i)Pointers can be printed too.    fmt.Println("pointer:", &i)}

package mainimport "fmt"type Test struct{ Name string}func change2(t *Test){ t.Name = "2"}func change3(t *Test){ //注意這裡括弧 //如果直接*t.Name=3 編譯不通過 報錯 invalid indirect of t.Name (type string) //其實在go裡面*可以省掉,直接類似change2函數裡這樣使用。 (*t).Name = "3"}func change4(t Test){ t.Name = "4"}func main() { //t是一個地址 t := &Test{Name:"1"} fmt.Println(t.Name); change2(t) fmt.Println(t.Name); change3(t) fmt.Println(t.Name); //這裡傳遞變數用了* change4(*t) fmt.Println(t.Name);}
1234567891011121314151617181920212223242526272829303132333435363738 package main import "fmt" type Test struct{    Name string} func change2(t *Test){    t.Name = "2"} func change3(t *Test){    //注意這裡括弧    //如果直接*t.Name=3 編譯不通過 報錯 invalid indirect of t.Name (type string)    //其實在go裡面*可以省掉,直接類似change2函數裡這樣使用。    (*t).Name = "3"} func change4(t Test){    t.Name = "4"} func main() {    //t是一個地址    t := &Test{Name:"1"}    fmt.Println(t.Name);        change2(t)    fmt.Println(t.Name);        change3(t)    fmt.Println(t.Name);        //這裡傳遞變數用了*    change4(*t)    fmt.Println(t.Name);}

package main import "fmt" type abc struct{ v int} func (a abc)aaaa(){ //傳入的是值,而不是引用 a.v=1 fmt.Printf("1:%d\n",a.v)} func (a *abc)bbbb(){ //傳入的是引用,而不是值 fmt.Printf("2:%d\n",a.v) a.v=2 fmt.Printf("3:%d\n",a.v)} func (a *abc)cccc(){ //傳入的是引用,而不是值 fmt.Printf("4:%d\n",a.v)} func main(){ aobj:=abc{} //new(abc); aobj.aaaa() aobj.bbbb() aobj.cccc()}
1234567891011121314151617181920212223242526272829 package main import "fmt" type abc struct{    v int} func (a abc)aaaa(){ //傳入的是值,而不是引用    a.v=1    fmt.Printf("1:%d\n",a.v)} func (a *abc)bbbb(){ //傳入的是引用,而不是值    fmt.Printf("2:%d\n",a.v)    a.v=2    fmt.Printf("3:%d\n",a.v)} func (a *abc)cccc(){ //傳入的是引用,而不是值    fmt.Printf("4:%d\n",a.v)} func main(){    aobj:=abc{}  //new(abc);    aobj.aaaa()    aobj.bbbb()    aobj.cccc()}

 

go 語言指標
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.