• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

【原创】go语言学习(十二)struct介绍1

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

目录:

  • struct声明和定义
  • struct的内存布局以及构造函数
  • 匿名字段和struct嵌套
  • struct与tag应用

struct声明和定义

1、Go中面向对象是通过struct来实现的, struct是用户自定义的类型。

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

  注意:type是⽤用来定义一种类型

2、struct初始化⽅方法1

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

  注意:使⽤用变量量名+ ‘.’ + 字段名访问结构体中的字段

3、 struct初始化方法2

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

  注意:也可以部分初始化

更简单的写法:

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

  

4、struct初始化的默认值

var user User
fmt.Printf(“%#v\n”, user)

  

5、结构体类型的指针

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的内存布局以及构造函数

1、结构体的内存布局: 占用一段连续的内存空间

 

 2、结构体没有构造函数, 必要时需要自己实现

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嵌套

1、匿名字段: 即没有名字的字段

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

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

  注意:匿名字段默认采⽤用类型名作为字段名

2、结构体嵌套

type Address struct {
    City string
    Province string
}

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

  

3、匿名结构体

type Address struct {
    City string
    Province string
}

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

  

4、匿名结构体与继承

type Animal struct {
    City string
    Province string
}

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

  

5、冲突解决

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应用

1、字段可见性,大写表示可公开访问,小写表示私有

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

  

2、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以逗号隔开。

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
go超时控制有4种写法,你知道吗?发布时间:2022-07-10
下一篇:
Go基础之strings发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap