首页 > 其他分享 >golang结构体

golang结构体

时间:2024-03-10 14:44:40浏览次数:24  
标签:定义 关键字 golang Person 匿名 嵌套 结构

在Go语言中,结构体(Struct)是一种用户定义的数据类型,用于组合多个不同类型的字段,每个字段可以是任意的基本类型或其他结构体类型。结构体是一种复合数据类型,用于组织和存储相关的数据。

以下是结构体的一些基本概念和用法:

1. 定义结构体

// 定义一个结构体
type Person struct {
FirstName string
LastName string
Age int
}

// 创建结构体变量
var person1 Person

2. 初始化结构体

// 初始化结构体的字段
person1 := Person{
FirstName: "John",
LastName: "Doe",
Age: 30,
}

3. 访问结构体字段

// 访问结构体字段
fmt.Println(person1.FirstName) // 输出: John
fmt.Println(person1.LastName) // 输出: Doe
fmt.Println(person1.Age) // 输出: 30

4. 结构体嵌套

// 结构体嵌套
type Address struct {
City string
State string
}

type Employee struct {
Person // 匿名字段,结构体嵌套
Address // 匿名字段,结构体嵌套
Position string
}

// 创建结构体变量
employee1 := Employee{
Person: Person{
FirstName: "Alice",
LastName: "Smith",
Age: 25,
},
Address: Address{
City: "New York",
State: "NY",
},
Position: "Software Engineer",
}

5. 方法与结构体

在Go语言中,可以为结构体定义方法:

// 在结构体上定义方法
func (p Person) FullName() string {
return p.FirstName + " " + p.LastName
}

// 调用结构体方法
fullName := person1.FullName()
fmt.Println(fullName) // 输出: John Doe

6. 结构体的匿名字段

// 结构体的匿名字段
type Circle struct {
Radius float64
}

type Cylinder struct {
Circle // 匿名字段
Height float64
}

// 创建结构体变量
cylinder := Cylinder{
Circle: Circle{
Radius: 5.0,
},
Height: 10.0,
}
特性 Go语言中的结构体 C语言中的结构体 Java中的类
语法 使用 type 关键字定义结构体 使用 struct 关键字定义结构体 使用 class 关键字定义类
字段定义 字段名在前,类型在后 类型在前,字段名在后 类型在前,字段名在后
实例化 使用结构体字面量或 new 关键字 使用结构体字面量或 malloc 函数 使用 new 关键字或直接调用构造方法
匿名字段 支持匿名字段,可实现嵌套结构体 不支持直接的匿名字段,通过结构体嵌套实现 支持成员变量的直接定义和初始化
方法 使用关键字 func 定义方法,与结构体关联 不支持方法,通过函数操作结构体 使用关键字 public, private, protected 定义成员变量,通过方法操作
继承 不支持经典的继承,可以通过匿名字段模拟 不支持继承,通过结构体嵌套实现 支持单继承,可以通过 extends 关键字实现
多态 不支持经典的多态,可以通过接口实现 不支持多态 支持多态,通过方法重写和接口实现
构造函数 通过定义返回结构体的函数实现 无构造函数的概念 使用构造方法初始化对象
销毁 由垃圾收集器负责管理内存 使用 free 函数手动释放内存 由垃圾收集器负责管理内存
指针 不需要显式使用指针 可以使用指针,通过 * 操作符 不需要显式使用指针,内部通过引用操作

标签:定义,关键字,golang,Person,匿名,嵌套,结构
From: https://www.cnblogs.com/lzw-lxy/p/18064174

相关文章

  • 2024 年春节集训 _ 第二课 - 数据结构优化动态规划
    【例题\(1\)】递增子序列\(\color{white}{link}\)考虑\(dp.\)\(dp[i][j]\)表示以元素\(i\)为结尾,长度为\(k\)的方案数。那么显而易见就有一个转移方程:\[dp[i][j]=\sum_{a[k]<a[i],\k<i}dp[k][j-1]\]先抛去第二维度的\(j\),这是可以做一个关于\(a[i]\)值的大......
  • golang入门概览
    一、语法golang中数据类型有值类型(boolintstring)和派生类型(structinterface等等)。值类型通常在栈上分配内存,派生类型通常在堆上分配内存。golang中的函数调用,只有值传递,没有引用传递。但是golang提供了指针,使用指针可以达到引用传参的效果,在函数内部修改参数后可以在外......
  • 1_JVM整体结构
    1_JVM整体结构HotSpotVM是目前市面上高性能虚拟机的代表作之一,JVM整体结构如下所示:Java语言跨平台性:Java虚拟机输入的指令基本上是一种基于栈的指令级架构,另外一种指令集则是基于寄存器的指令级架构。这两种架构之间的区别如下:基于栈式架构特点设计和实现更简单,适用于资......
  • C 结构体中的位域概念
    位域一、基本概念1.1位域的概念结构体中的冒号表示位域,如:structbit_struct{unsignedintbit1:10;unsignedintbit2:8;unsignedintbit3:14;}data1;//sizeofdata1=4structbit_struct{unsignedintbit1:10;unsignedintbit2:8......
  • 探索数据结构:单链表的实战指南
    ✨✨欢迎大家来到贝蒂大讲堂✨✨......
  • golang将时间转为时间戳碰到的问题
    golang将字符串"2024-03-0716:00:00"转为时间戳代码如下:packagemainimport("fmt""time")funcmain(){//定义时间格式,与字符串中的时间格式匹配constlayout="2006-01-0215:04:05"//要转换的时间字符......
  • js 解释数据结构
    一、 JSON.parse 妙用用如下语句打印:console.info(result);   console.info(result.data);   console.info(JSON.parse(result.data));   console.info(JSON.parse(result.data).data.PriceSheetId);   console.info(result.data.Data);打印......
  • golang进阶之反射
    目录一、go中变量的内在机制二、反射1.反射是把双刃剑2.反射的简介三、reflect库1.reflect.TypeOf(1)reflect.Type的name和kind(2)kind的能返回的类型如下2.reflect.ValueOf(1)反射取值(2)反射改值3.isNil()和isValid()四、结构体的反射1.StructField类型2.结构体反射示例(1......
  • C 语言整数单链表的表示和实现 数据结构课程设计报告
     数据结构课程设计报告专业名称:计算机科学与技术 课程名称:数据结构        实训题目:整数单链表的表示和实现                           实训环境:C语言实现(DevC++)                    ......
  • C/C++结构体最详细的讲解
    转载自知乎:https://zhuanlan.zhihu.com/p/6117720311.定义结构体法一(推荐,写法简单)structStudent{stringm_Name;intm_Age;Student()=default;Student(stringname,intage):m_Name(name),age(m_Age){}};一般定义结构体和类时,如果不写关于构造函数的任何东西,结构......