Golang | 結構體的定義和使用


Struct

struct(結構體)就是用戶自己定義的類型,一個結構體對應現實中的一個類型,和Java中的Class類相似,但是沒有Class類那么復雜,沒有多態,繼承,封裝。只保留了最基礎的特性:組合。組合也只是形成最基本的復合類型。

初始化

自定義一個User類型,並且對這個User類型進行初始化。

  type User struct {
    Id int
    Name string
    age int
  }

  func initStruct() {
    u1 := new(User)							// 使用內置函數進行初始化
    u2 := User{}							// 直接初始化
    u3 := &User{1,"張三",10}	// 所有字段順序初始化 不顯示指定字段初始化的話,必須按順序對所有字段進行賦值
    u4 := &User{Id: 1,age: 10}				// 指定字段初始化
    fmt.Println(u1)	// &{0  0}
    fmt.Println(u2)	// {0  0}
    fmt.Println(u3)	// &{1 張三 10}
    fmt.Println(u4)	// &{1  10}
  }

類型初始化之后,如果結構體中的字段沒有被賦值,就會被初始化該類型的零值。

我們在實際使用中,通常不使用以上的方式進行初始化結構體,一般使用一個構造函數來進行初始化:

func NewUser(id int,name string) *User {
	return &User{Id: id,Name: name}
}

fmt.Println(NewUser(2,"張三"))	// &{2 張三 0}

自定義的構體函數一般使用 New開頭,以結構體名稱結尾,初始化時,使用幾個參數傳入幾個參數,並且返回

可見性

結構體的可見性和包內變量是相同的,結構體名稱為首字母為大寫開頭,別的包可以引用,字段的話,首字母為小寫只能包內可見,首字母大寫的話, 別的包也可見。

函名組合

  type User struct {
    Info
    Id   int
    Name string
    age  int
  }

  type Info struct {
    Introduction string
    Name         string
  }
  // 結構體組合
  func combination() {
    user := &User{Info{"組合類","李四"},1, "張三", 10}
    fmt.Println(user.Name)			// 組合中的同名字段,不指定的話,取外部結構體的字段
    fmt.Println(user.Info.Name)		// 組合中的同字段,如果想取內部結構體的字段,必須要指定內部結構體的名稱進行取值
    fmt.Println(user.Introduction)	// 如果內部組合中字段名和外部沒有重復,可以直接取這個字段輸出
  }

有接口的情況下,外部的結構體可以使用內部結構體的方法

如果這個結構體只使用一次,可以使用以下方法進行結構體的構造:

  type User struct {
    Info
    TInfo  struct{
      Name string	
    }
    Id   int
    Name string
    age  int
  }

帶標簽的結構休

我們在網絡傳輸中,需要把一個結構體轉換為一個JSON字符串進行傳輸,我們看一下,不加標簽的結構體轉換為JSON字符串后的情況:

	user := &User{Id: 1, age: 10} // 指定字段初始化
	
	fmt.Println(user)             // &{1  10}

	jsonUser, _ := json.Marshal(user)

	fmt.Println(string(jsonUser))	// {"Introduction":"","Id":1,"Name":""}

這樣也可以轉為JSON字符串,但是不符合我們在不同應用中傳遞的規范,在Go中字段名首字母為在寫,轉換后也是按照結構體的字段進行輸出的。

如果我們想要符合規范,首字母小寫,並且兩個單詞之間使用 _連接,我們可以使用標簽對結構體進行修改:

type User struct {
	Info			`json:"info"`
	Id   int		`json:"id"`
	Name string		`json:"name"`
	age  int		`json:"age"`
}

type Info struct {
	Introduction string	`json:"introduction"`
	Name         string	`json:"name"`
}

{"info":{"introduction":"","name":""},"id":1,"name":""}

對結構體添加標簽后,我們輸出的JSON字符串就標准了。



關注公眾號,隨時獲取最新資訊

細節決定成敗!
個人愚見,如有不對,懇請斧正!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM