golang基礎--strcut結構體

來源:互聯網
上載者:User
  • 結構體struct類似python語言中的類class,結構體類的元素可以是一個變數,或者函數或者其它的類型,好比python的屬性和方法。

    // struct結構體,類似python語言中的class類package mainimport "fmt"type person struct { //定義一個strcut    Name string    Age  int}func main() {    a := person{}    //賦值給一個變數a    fmt.Println(a)    a.Name = "faily"  //為結構體賦值    a.Age = 28    fmt.Println(a)}/*輸出結果    { 0}            //空結構體時,int元素為0{faily 28}*/
  • 簡單的方式進行結構體的初始化

    package mainimport "fmt"type person struct { //定義一個strcut    Name string    Age  int}func main() {    a := person{ //也可以這樣初始化一個結構體        Name: "msy",        Age:  27,    }    fmt.Println(a)}
  • struct也是一個實值型別,也就是說傳遞的時候,拷貝的是值,正常途徑無法改變結構內的值,需通過指標的方式進行修改

    package mainimport "fmt"type person struct { //定義一個strcut    Name string    Age  int}func main() {    a := person{ //初始化結構體        Name: "msy",        Age:  27,    }    fmt.Println("1", a)    A(a)    fmt.Println("3", a)    B(&a)           //指標引用    fmt.Println("4", a)}func A(per person) { // 參數引用person--結構體    per.Age = 13    //初始化person屬性的值    fmt.Println("2", per)}func B(per *person){    //傳遞指標    per.Age =13    fmt.Println("2",per)}/*輸出初始化:        1 {msy 27}修改A:        2 {msy 13}修改失敗:   3'{msy 27}修改B:        2 {msy 13}修改成功:   3"{msy 13} */
  • 推薦結構體初始化時,使用結構體指標,修改的時候更加方便

    package mainimport "fmt"type person struct { //定義一個strcut    Name string    Age  int}func main() {    a := &person{ //初始化結構體,建議使用結構的指標        Name: "msy",        Age:  27,    }    a.Name = "MYF" //這種方式就可以直接修改結構體    fmt.Println("1", a)    A(a) //此時就可以直接修改結構體    B(a)    fmt.Println("3", a)}func A(per *person) {           //傳遞指標    per.Age = 13                //初始化person屬性的值    fmt.Println("2", per)}func B(per *person) { //傳遞指標    per.Age = 100    fmt.Println("2", per)}/*輸出1 &{MYF 27}2 &{MYF 13}2 &{MYF 100}3 &{MYF 100}*/
  • 匿名結構:沒有名字的結構

    package mainimport "fmt"func main() {    a := &struct {      //指向結構體指標        Name string        Age  int    }{                  //直接初始化        Name: "moshaoying",        Age:  27,    }       fmt。Println(a)}/*輸出&{moshaoying 27}*/
  • 嵌套匿名結構體,初始化方式

    package mainimport "fmt"type person struct { //嵌套匿名結構    Name    string    Age     int    Content struct {        Phone int        Addr  string    }}func main() {    a := person{Name: "moshaoying", Age: 22}    a.Content.Phone = 13636269334       //嵌套匿名結構體初始化方式    a.Content.Addr = "shanxi,xian"    fmt.Println(a)}/*輸出{moshaoying 22 {13636269334 shanxi,xian}}*/
  • 結構體比較: 命名是結構體的一部分,所以只有當結構體命名相同時才可以進行比較

    package mainimport "fmt"type person struct { //嵌套匿名結構    Name string    Age  int}type person1 struct {    Name string    Age  int}func main() {    a := person{Name: "moshaoying", Age: 22}    b := person1{Name: "moshaoying", Age: 22}    c := person{Name: "moshaoying", Age: 22}    d : =  person{Name: "moshaoying", Age: 21}    fmt.Println(a == b)    fmt.Println(a == c)    fmt.Println(a == d)}/*輸出報錯a=b     invalid operation: a == b (mismatched types person and person1)a=c     truea=d     false*/
  • 結構體沒有python類的繼承,但是結構體也會有類似的功能,結構體嵌套,達到繼承其它結構體的屬性

    package mainimport "fmt"type human struct {    Sex int}type person struct { //結構體繼承(嵌套)    human    Name string    Age  int}func main() {    a := person{Name: "failymao", Age: 22, human: human{Sex: 250}} //第一種方式,注意原理    fmt.Println(a)    //第二種方式    a.Name = "allen"    a.Age = 29    a.Sex = 222    fmt.Println(a)}/*輸出報錯第一種方式:  {{250} failymao 22}第二種方式:  {{222} allen 29}*/

聯繫我們

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