一、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"
一、結構體的內存佈局: 佔用一段連續的內存空間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) }
一、匿名字段: 即沒有名字的字段
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 }
一、字段可見性,大寫表示可公開訪問,小寫表示私有
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以逗號隔開。