⑦ 结构体

本文即将看到:
⚬ ------ 结构体声明
⚬ ------ 结构体指针
⚬ ------ 结构体嵌套

一、结构体声明

  1. 结构体的定义及初始化
    结构体是由一系列具有相同类型或不同类型的数据构成的集合

定义

type Name struct{
    name1 type  //有名字
    name2 type
}

type Name struct{
    type  //匿名 默认为类型名 访问用Name.type 
    type  //看初始化方法四的使用
} 

匿名结构体

   n := struct{
    name1 type
    name2 type
}{
    nmae1: value,
    name2: value,
}

初始化

1.方法一
var p Name //Name是结构体的名字
p.name1 = value   // . 用点访问结构体
p.name2 = value

● 2.方法二
p := Name{}
p.name1 = value  

● 3.方法三
p := Name{
    name1: value,
    name2: value,
}4.方法四
p := Name{value,value} 

// 按照结构体默认顺序进行赋值 
// 注意数据类型一致

二、结构体指针

  1. 定义
type Name struct{
    Name1 type
    Name2 type
}
  1. 结构体指针
    创建
1.方法一
var p *Name //结构体名称
p = &Name{}2.方法二
p := new(Name) // Name 结构体名称
// new 不是nil空指针 而是开辟了指向的内存空间, 且存储的是指向数据的初值

访问

var p *Name
p.name1 = value -> 相当于(*p).Name = value

示例

package main

import "fmt"
//结构体
type Student struct {
	Name string
	Age int
	Id int
}

// 用指针改变结构体变量
func main()  {
    var n Student
    n.Name = "小小灰"
    n.Age = 20
    n.Id = 100600
    fmt.Println(n)  //{小小灰 20 100600}

    n1 := n // 这里只是拷贝n的副本
    n1.Name = "小小图"

    fmt.Println(n1)  // {小小图 20 100600}
    fmt.Println(n)  // {小小灰 20 100600} n并没有改变

	// 结构体指针
    var n2 *Student
    n2 = &n    // 取n的地址
    n2.Name = "小小鬼"  // 相当于(*n2).Name
    fmt.Println(n) 	   // {小小鬼 20 100600}
    fmt.Println(*n2)   // 获取n2指向地址的数据 {小小鬼 20 100600}

    n3 := new(Student)
    n3 = &n
    n3.Name = "小小锥"
    fmt.Println(n)   // {小小锥 20 100600}
    fmt.Println(n3)  // &{小小锥 20 100600}
}

三、结构体嵌套
示例

package main

import "fmt"

type Book struct {
    BookNAme string
    Price int
}

type Student struct {
    Name string
    Age int
    Book
}

func main(){
    var stu Student
    stu.BookNAme = "无书" //相当于 stu.book.book.name
    fmt.Println(stu) // { 0 {无书 0}}
}
posted @   Gonfei  阅读(111)  评论(0编辑  收藏  举报
(评论功能已被禁用)
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示