【原創】go語言學習(十二)struct介紹1

目錄:

  • struct聲明和定義
  • struct的內存佈局以及構造函數
  • 匿名字段和struct嵌套
  • struct與tag應用

struct聲明和定義

一、Go中面向對象是經過struct來實現的, struct是用戶自定義的類型。json

type User struct {
    Username string
    Sex string
    Age int
    AvatarUrl string
}

  注意:type是⽤用來定義一種類型函數

二、struct初始化⽅方法1佈局

var user User
user.Age = 18
user.Username = 「user01」
user.Sex = 「男」
user.AvatarUrl = 「http://my.com/xxx.jpg"

  注意:使⽤用變量量名+ ‘.’ + 字段名訪問結構體中的字段指針

三、 struct初始化方法2對象

var user User = User {
    「Username」 : 「user01」,
    「Age」: 18,
    「Sex」: 「男」,
    「AvatarUrl」: 「http://my.com/xxx.jpg」,
}

  注意:也能夠部分初始化blog

更簡單的寫法:繼承

user := User {
    「Username」 : 「user01」,
    「Age」: 18,
    「Sex」: 「男」,
    「AvatarUrl」: 「http://my.com/xxx.jpg」,
}

  

四、struct初始化的默認值內存

var user User
fmt.Printf(「%#v\n」, user)

  

五、結構體類型的指針字符串

var user *User = &User{}
fmt.Printf(「%p %#v\n」, user)

  

var user *User = &User {
    「Username」 : 「user01」,
    「Age」: 18,
    「Sex」: 「男」,
    「AvatarUrl」: 「http://my.com/xxx.jpg」,
}

  

var user User = new(User)
user.Age = 18
user.Username = 「user01」
user.Sex = 「男」
user.AvatarUrl = 「http://my.com/xxx.jpg"

  

struct的內存佈局以及構造函數

一、結構體的內存佈局: 佔用一段連續的內存空間string

 

 二、結構體沒有構造函數, 必要時須要本身實現

package main

import "fmt"

// struct定義
type User struct {
	Username  string
	Sex       int
	Age       int
	AvatarUrl string
}

func main() {
	// 初始化
	var user User
	user.Age = 18
	user.AvatarUrl = "http://baidu.com/image/xxx.jpg"
	user.Sex = '男'
	user.Username = "user01"

	fmt.Printf("user.username=%s age=%d sex=%s avatar=%s\n", user.Username, user.Age, user.Sex, user.AvatarUrl)

	// 初始化方法2
	var user2 = User{
		Username:  "user02",
		Age:       18,
		Sex:       '女',
		AvatarUrl: "http://xxx.baidu.com/image/xxx.jpg",
	}

	fmt.Printf("user2=%#v\n", user2)

}

  

匿名字段和struct嵌套

一、匿名字段: 即沒有名字的字段

type User struct {
    Username string
    Sex string
    Age int
    AvatarUrl string
}

// 匿名字段
type User struct {
    Username string
    Sex string
    Age int
    AvatarUrl string
    int
    string
}

  注意:匿名字段默認採⽤用類型名做爲字段名

二、結構體嵌套

type Address struct {
    City string
    Province string
}

type User struct {
    Username string
    Sex string
    Age int
    AvatarUrl string
    address Address
}

  

三、匿名結構體

type Address struct {
    City string
    Province string
}

type User struct {
    Username string
    Sex string
    Age int
    AvatarUrl string
    Address
}

  

四、匿名結構體與繼承

type Animal struct {
    City string
    Province string
}

type User struct {
    Username string
    Sex string
    Age int
    AvatarUrl string
    Address
}

  

五、衝突解決

type Address struct {
    City string
    Province string
    CreateTime string
}

type Email struct {
    Account string
    CreateTime string
}

type User struct {
    Username string
    Sex string
    Age int
    AvatarUrl string
    Address
    Email
    CreateTime string
}

  

struct與tag應用

一、字段可見性,大寫表示可公開訪問,小寫表示私有

type User struct {
    Username string
    Sex string
    Age int
    avatarUrl string
    CreateTime string
}

  

二、tag是結構體的元信息,能夠在運行的時候經過反射的機制讀取出來

type User struct {
    Username string `json:」username」,db:」user_name」`
    Sex string `json:」sex」`
    Age int `json:」age」`
    avatarUrl string
    CreateTime string
}

  字段類型後⾯面,以反引號括起來的key-value結構的字符串串,多個tag以逗號隔開。

相關文章
相關標籤/搜索