Go语言结构体

1. 结构体是类型中带有不同成员的复合类型。 Go 语言使用结构体和结构体成员来描述真实世界的实体和实体对应的各种属性。 Go 语言中的类型可以被实例化,使用 new 或 & 构造的类型实例的类型是类型的指针。 结构体成员是由一系列的成员变量构成,这些成员变量也被称为“字段”。 字段有以下特性: 字段拥有自己的类型和值。 字段名必须唯一。 字段的类型也可以是结构体,甚至是字段所在结构体的类型

2.

使用type和struct关键字来定义结构体,代码格式如下:

    type 类型名 struct {
        字段名 字段类型
        字段名 字段类型
        …
    }

 以下是更为具体的结构体定义及实例化与用法输出

package main

import "fmt"

//1.普通结构体定义,但只是定义,还要实例化才能用哦
//实例化后,没有初始化赋值的结构体,其成员变量都是对应变量的零值

type student struct { //名字为student的结构体
	name        string
	gender      string
	age, height int
}

//2.匿名结构体,在定义一些临时数据结构的场景下可以用匿名结构体(就是不用单独写一个结构体出来了,在用到的地方写就好)

//3.结构体指针

func main() {

	//1.结构体实例化,与c语言有所不同
	var lbd student //结构体本身也是一种类型,用var关键字实例化lbd拥有该结构体
	lbd.age = 20    //实例化后用"."运算符操作该结构体内的元素
	lbd.gender = "man"
	lbd.name = "lbd"
	lbd.height = 500

	fmt.Println(lbd)
	fmt.Printf("%s\n------------------------\n", lbd.name)

	//2.匿名结构体(用到的地方快速定义即可)
	var user struct {
		name string
		age  int
	} //user被定义成了有该格式的结构体
	user.age = 50
	user.name = "lbd666"
	fmt.Println(user.age, user.name, "\n", "--------------------------------")

	//3.1结构体指针
	//使用new函数实例化结构体,并得到该结构体地址(指针),Go语言支持指针用“.”运算符访问结构体成员

	var address = new(student)
	fmt.Printf("类型是:%T\n", address) //*main.student
	address.age = 600
	address.height = 17245
	address.name = "lbdfighting"
	address.gender = "man"
	fmt.Printf("address=%#v\n-----------------------\n", address) //address=&main.student{name:"lbdfighting", gender:"man", age:600, height:172}
    
	//3.2使用&对结构体取地址相当于new实例化该结构体
	var address2=&student{}
	fmt.Printf("%T\n",address2)
	address2.age=1000
	address2.gender="man"
	address2.height=700
	address2.name="I love yjr"
	fmt.Println(address2.name)
	fmt.Printf("address2=%#v\n------------------------\n",address2)

	//4.结构体另一种初始化,键值对初始化(不要求与结构体顺序一样)

	lbdgg:=student{
		gender: "man",
		name: "yjr",
		age: 20,
		height: 55,

	}
	fmt.Printf("%T\n",lbdgg)
	fmt.Println(lbdgg.name,"\n","--------------------------")

	//值的列表初始化(要求赋值与结构体定义的顺序一样)

	lbd55:=student{
		"ymh",
		"man",
		60,
		20,
	}
	fmt.Printf("%v\n",lbd55)
}

运行结果如下:

{lbd man 20 500}
lbd
------------------------
50 lbd666
 --------------------------------
类型是:*main.student
address=&main.student{name:"lbdfighting", gender:"man", age:600, height:17245}
-----------------------
*main.student
I love yjr
address2=&main.student{name:"I love yjr", gender:"man", age:1000, height:700}
------------------------
main.student
yjr
 --------------------------
{ymh man 60 20}

忆昨未知道,临川每羡鱼。

世途行处见,人事病来疏。

微雨秋栽竹孤灯夜读书

怜君亦同志,晚岁傍山居

共勉!!

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

76博ding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值