Go语言结构体

golang | Go语言入门教程——结构体初始化与继承 本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是golang专题第10篇文章,我们继续来看golang当中的面向对象部分。 在上一篇文章当中我们一起学习了怎么创建一个结构体,以及怎么给结构体定义函数,还有函数接收者的使用。今天我们来学习一下结构体本身的一些使用方法。 初始化 在golang当中结构体初始化的方法有四种。 new关键字 我们可以通过new关键字来创建一个结构体的实例,这种方法和其他语言比较类似,这样会得到一个空结构体指针,当中所有的字段全部填充它类型对应的零值。比如 阅读详情

在 Go 语言中,结构体是一种自定义的复合数据类型,它可以包含多个不同类型的字段,并且可以定义自己的方法。

结构体定义

在 Go 语言中,结构体的定义使用 type 关键字和 struct 关键字。结构体的定义语法如下:

type StructName struct {
    FieldName1 FieldType1
    FieldName2 FieldType2
    ...
}

其中 StructName 表示结构体的名称,FieldName1、FieldName2 等表示结构体的字段名称,FieldType1、FieldType2 等表示结构体的字段类型。

下面是一个示例代码,演示了如何定义一个结构体:

package main

import "fmt"

// 定义一个名为 Person 的结构体类型
type Person struct {
    Name string
    Age  int
}

func main() {
    // 创建一个 Person 类型的变量
    var person Person

    // 打印变量的值
    fmt.Println(person) // 输出:{ 0}

    // 修改变量的值
    person.Name = "Alice"
    person.Age = 18

    // 打印变量的值
    fmt.Println(person) // 输出:{Alice 18}
}

在上面的代码中,我们定义了一个名为 Person 的结构体类型,它包含两个字段 Name 和 Age。我们还创建了一个 Person 类型的变量 person,并将其输出。由于我们没有对变量进行初始化,所以它的值为 { 0}。接下来,我们修改了变量的值,并将其再次输出,发现它的值为 {Alice 18}。

结构体声明和初始化

在 Go 语言中,结构体的声明和初始化可以使用多种方式。

声明结构体变量

声明结构体变量的语法如下:

var variableName StructName

其中 variableName 表示变量的名称,StructName 表示结构体的类型。

下面是一个示例代码,演示了如何声明一个结构体变量:

package main

import "fmt"

// 定义一个名为 Person 的结构体类型
type Person struct {
    Name string
    Age  int
}

func main() {
    // 声明一个 Person 类型的变量
    var person Person

    // 打印变量的值
    fmt.Println(person) // 输出:{ 0}

    // 修改变量的值
    person.Name = "Alice"
    person.Age = 18

    // 打印变量的值
    fmt.Println(person) // 输出:{Alice 18}
}

在上面的代码中,我们声明了一个 Person 类型的变量 person,并将其输出。由于我们没有对变量进行初始化,所以它的值为 { 0}。接下来,我们修改了变量的值,并将其再次输出,发现它的值为 {Alice 18}。

初始化结构体变量

初始化结构体变量的语法如下:

var variableName StructName = StructName{FieldName1: value1, FieldName2: value2, ...}

其中 variableName 表示变量的名称,StructName 表示结构体的类型,FieldName1、FieldName2 等表示结构体的字段名称,value1、value2 等表示结构体的字段值。

下面是一个示例代码,演示了如何初始化一个结构体变量:

package main

import "fmt"

// 定义一个名为 Person 的结构体类型
type Person struct {
    Name string
    Age  int
}

func main() {
    // 初始化一个 Person 类型的变量
    var person Person = Person{Name: "Alice", Age: 18}

    // 打印变量的值
    fmt.Println(person) // 输出:{Alice 在上面的代码中,我们初始化了一个 `Person` 类型的变量 `person`,并将其输出。由于我们已经对变量进行了初始化,所以它的值为 `{Alice 18}`。

另外,还可以使用简写方式来初始化结构体变量。这种方式可以省略结构体类型名称,直接使用结构体字段名称和值。示例如下:

```go
// 使用简写方式初始化一个 Person 类型的变量
person := Person{Name: "Alice", Age: 18}

匿名结构体

在 Go 语言中,还可以使用匿名结构体来定义临时的数据类型。匿名结构体没有类型名称,只有字段名称和类型。示例如下:

package main

import "fmt"

func main() {
    // 定义一个匿名结构体类型
    person := struct {
        Name string
        Age  int
    }{
        Name: "Alice",
        Age:  18,
    }

    // 打印变量的值
    fmt.Println(person) // 输出:{Alice 18}
}

在上面的代码中,我们定义了一个匿名结构体类型,并使用该类型初始化了一个变量 person。接着,我们将变量输出,发现它的值为 {Alice 18}。

访问结构体字段

在 Go 语言中,可以使用点号操作符 . 来访问结构体的字段。示例如下:

package main

import "fmt"

// 定义一个名为 Person 的结构体类型
type Person struct {
    Name string
    Age  int
}

func main() {
    // 初始化一个 Person 类型的变量
    var person Person = Person{Name: "Alice", Age: 18}

    // 访问结构体字段
    fmt.Println(person.Name) // 输出:Alice
    fmt.Println(person.Age)  // 输出:18
}

在上面的代码中,我们创建了一个 Person 类型的变量 person,并使用点号操作符 . 访问了它的字段 Name 和 Age。我们将这两个字段的值分别输出,得到的结果为 Alice 和 18。

结构体方法

在 Go 语言中,结构体可以定义自己的方法。方法是一种与结构体关联的函数,可以访问结构体的字段。结构体的方法定义语法如下:

func (variableName StructName) methodName() {
    // 方法体
}

其中 variableName 表示结构体变量的名称,StructName 表示结构体的类型,methodName 表示方法的名称。

下面是一个示例代码,演示了如何定义和调用结构体方法:

package main

import "fmt"

// 定义一个名为 Person 的结构体类型
type Person struct {
    Name string
    Age  int
}

// 为 Person 类型定义一个方法
func (person Person) SayHello() {
    fmt.Printf("Hello, my name is %s, and I'm %d years old.\n", person.Name, person.Age)
}

func main() {
    // 初始化一个 Person 类型的变量
    var person Person = Person{Name: "Alice", Age: 18}

    // 调用结构体方法
    person.SayHello() // 输出:Hello, my name is Alice, and I'm 18 years old.
}

在上面的代码中,我们定义了一个名为 SayHello 的方法,它可以访问 Person 类型的字段 Name 和 Age。接着,我们创建了一个 Person 类型的变量 person,并调用了它的方法 SayHello,输出了一条问候语。

【Golang 基础系列十五】Go 语言结构体 aaa 阅读详情

相关推荐

【Go语言】Go语言结构体全面解析

在Go语言中,结构体(Struct)是一个核心概念,它允许开发者将多个相关或不同类型的数据项组合成一个单一的复合类型。这种特性使得结构体成为Go语言中非常强大和灵活的数据组织方式,特别适用于表示复杂的数据结构和对象。 本文将结合实际案例,详细阐述Go语言中结构体的定义、使用、方法定义以及高级特性,如匿名结构体、嵌套结构体、结构体指针,结构体导出规则等。

景天科技苑 4万+

Go语言自学系列 | golang结构体的初始化

视频来源:B站《golang入门到项目实战 [2021最新Go语言教程,没有废话,纯干货!持续更新中...]》 一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持! 附上汇总贴:Go语言自学系列 | 汇总_COCOgsta的博客-优快云博客 未初始化的结构体,成员都是零值 int 0 flow 0.0 bool false string nil nil 实例 package main import "fmt" func main() { type Perso

团爸讲算法 3054

一步一步教你写股票走势图——K线图一(概述)

股票分时图部分已经开发完毕,受到了广大开发者的好评!界面、功能都挺完美,解决了好一些MP开发者的问题,博主甚是欣悦,更有动力去开源K线图。这里说一下,如果有问题直接留言或者发邮件,github上个人信息有邮件,我看到基本都会回复,博主不加qq的,体谅O(∩_∩)O。分析好了,废话不多说,我们分析下K线图吧,首先我们看下自选股K线图的效果吧效果还是很赞的,经过分时图的研究后,博主越来越确信自选股用的应

体验Android编程之美 3万+

100天精通Golang(基础入门篇)——第18天:深入解析Go语言中的结构体

在第18天的学习中,我们将深入探索Go语言中的结构体,这是Go语言中一个非常核心的概念。结构体为我们提供了一种封装多个不同类型数据的方法,是构建复杂数据类型的基础。Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型。结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。...一旦定义了结构体类型,它就能用于变量的声明初始化结构体// 1.按照顺序提供初始化值// 2.通过field:value的方式初始化,这样可以任意顺序。

猫头虎技术团队:授渔优于赠鱼,兴趣引领智慧,探索之乐尤显珍贵。商务合作+:Libin9iOak ,万粉变现+:优快云WF,猫头虎承诺每年免费为100名C站创作者做账号流量诊断服务!全网搜:猫头虎技术团队,点击文章底部名片或直接私信我一切皆可谈,快找虎哥! 5万+

Android14_MTK调试LCD屏功能

android14 MTK平台调试LCD屏

m0_37786046的博客 1473

保姆级教程:手把手配置MAX9295/9296 GMSL2-CSI2链路,搞定4LAN/1LAN模式与常见调试

本文提供MAX9295/9296 GMSL2-CSI2链路的详细配置教程,涵盖4LAN和1LAN模式的硬件连接、寄存器配置及调试技巧。通过实战案例和代码示例,帮助开发者快速实现高带宽视频传输,解决常见问题如信号同步和功耗优化,适用于车载摄像头和机器人视觉系统开发。

weixin_42561143的博客 434

Go语言自学系列 | golang结构体指针

视频来源:B站《golang入门到项目实战 [2021最新Go语言教程,没有废话,纯干货!持续更新中...]》 一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持! 附上汇总贴:Go语言自学系列 | 汇总_COCOgsta的博客-优快云博客 结构体指针和普通的变量指针相同,我先来回顾一下普通变量的指针,例如: package main import "fmt" func main() { var name string name = "tom"

团爸讲算法 2313

从Mate到Mate40 Pro+:华为旗舰核心配置演进与选购避坑指南

本文回顾了华为Mate系列从初代到Mate40 Pro+的核心配置演进历程,重点分析了处理器性能、影像系统、屏幕设计及续航快充的技术突破。针对选购需求,提供了区分版本、5G选择及存储配置的实用避坑建议,帮助消费者明智选择华为旗舰机型。

weixin_30015371的博客 494

Go语言自学系列 | golang结构体

视频来源:B站《golang入门到项目实战 [2021最新Go语言教程,没有废话,纯干货!持续更新中...]》 一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持! 附上汇总贴:Go语言自学系列 | 汇总_COCOgsta的博客-优快云博客 go语言没有面向对象的概念了,但是可以使用结构体来实现,面向对象编程的一些特性,例如:继承、组合等特性。 go语言结构体的定义 上一节我们介绍了类型定义,结构体的定义和类型定义类似,只不过多了一个struct关键字,语法结构如下:

团爸讲算法 567

【Vite+Vue3+TS】基于Vite+Vue3+TypeScript+ESLint+Prettier+Stylelint搭建项目(亲测超详细)

结合了很多项目和文章,总结一篇项目构建的笔记。 温馨提示:文章末尾记录了我在搭建项目过程中,遇到的一些问题和解决办法 ~

aDiaoYa_的博客 4231

【Linux】软件控制USB重新上电、加载:usbreset、hubpower、uhubctl

使用命令控制USB的供电、复位

郭老二 2188

Go语言自学系列 | golang结构体作为函数参数

视频来源:B站《golang入门到项目实战 [2021最新Go语言教程,没有废话,纯干货!持续更新中...]》 一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持! 附上汇总贴:Go语言自学系列 | 汇总_COCOgsta的博客-优快云博客 go结构体可以像普通变量一样,作为函数的参数,传递给函数,这里分为两种情况: 直接传递结构体,这是一个副本(拷贝),在函数内部不会改变外面结构体内容 传递结构体指针,这时在函数内部,能够改变外部结构体内容 直接传递结构体 实例

团爸讲算法 3219

Trae中配置和使用MCP 服务保姆级教程

您好,我是程序员夏叶,深度AI编程使用者,专注于分享AI编程方面的使用技巧和经验,有兴趣的可以关注我的公众号,一起学习,共同进步。从21号开始,Trae开始陆陆续续的灰度推送了一次新版本,有的用户是21号收到的更新,有的用户是22号收到的更新,本次更新我愿称之为王炸级更新,具体更新内容可以去看我的上一篇文章。本次更新其中的一个内容就是支持了MCP 服务,那么什么是MCP呢,它的全称是。

cpp加油站的专栏 8205

golang语法系列2-go语言实例化结构体

1.基本的实例化形式 type Point struct { X int Y int } var p Point p.X = 10 p.Y = 20 2.创建指针类型的结构体 type Player struct{ Name string HealthPoint int MagicPoint int } tank := new(Player) 3.取结构体的地址实例化 ...

shuiuii的专栏 789

《Python星球日记》 第73天:情感分析与主题建模

《Python星球日记》 第73天:情感分析与主题建模,今天我们将探索两个自然语言处理领域的重要技术:情感分析和主题建模。这两项技术在社交媒体分析、用户反馈处理、市场研究等多个领域有着广泛应用。

Code_流苏:在代码中寻诗意,在实践中觅真知 919

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

go 结构体 转string_golang | Go语言入门教程——结构体初始化与继承

点击上方蓝字,关注并星标,和我一起学技术。今天是golang专题第10篇文章,我们继续来看golang当中的面向对象部分。在上一篇文章当中我们一起学习了怎么创建一个结构体,以及怎么给结构体定义函数,还有函数接收者的使用。今天我们来学习一下结构体本身的一些使用方法。初始化在golang当中结构体初始化的方法有四种。new关键字我们可以通过new关键字来创建一个结构体的实例,这种方法和其他语...

weixin_29195217的博客 1564

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

将c语言的结构体定义变成对应的golang语言的结构体定义,并将golang语言结构体变量的指针传递给c语言,cast C struct to Go struct...

https://groups.google.com/forum/#!topic/golang-nuts/JkvR4dQy9t4 https://golang.org/misc/cgo/gmp/gmp.go https://stackoverflow.com/questions/19910647/pass-struct-and-array-of-structs-to-c-functio...

dielucui7698的博客 803

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Go语言结构体struct详解,Go空结构体的这些妙用你知道吗?

结构体,是一种自定义的数据类型,由多个数据类型组合而成。用于描述一类事物相关属性。定义方式type 类型名 struct {字段名 字段类型… } //示例: type Animal struct {结构体复杂,得返回结构体指针类型,避免值拷贝产生的性能开销本文详解了Go语言结构体的各种知识点,最后针对空结构体的作用和使用场景,进行了详细的讲解。在之后的实际项目开发过程中,只用占位不用实际含义,那么我们就都可以使用空结构体,可以极大的节省不必要的内存开销。希望对大家有帮助,兄弟们觉好留言哦。

王中阳讲编程 7191

【Golang面试题】Go结构体的特点,与其它语言的区别

【Golang面试题】Go结构体的特点,与其它语言的区别

大家好,我是码农老gou,一名专注于编程技术的程序员。在这个博客中,我将与大家分享我在工作和学习中的经验、见解以及一些实用的技术干货。 784

c语言结构体初始化为0_golang | Go语言入门教程——结构体初始化与继承

点击上方蓝字,关注并星标,和我一起学技术。今天是golang专题第10篇文章,我们继续来看golang当中的面向对象部分。在上一篇文章当中我们一起学习了怎么创建一个结构体,以及怎么给结构体定义函数,还有函数接收者的使用。今天我们来学习一下结构体本身的一些使用方法。初始化在golang当中结构体初始化的方法有四种。new关键字我们可以通过new关键字来创建一个结构体的实例,这种方法和其他语...

weixin_39526741的博客 1012

golang获取结构体中的tag_26. Go 语言中结构体的 Tag 用法

大家好,我是明哥。由于某些不可抗力,之前该专栏的所有内容都被删除了。因此之后的一段时间内,我会重新发布这些文章,先给已经看过的关注者提个醒。本文原文:http://golang.iswbm.comGithub:http://github.com/iswbm/GolangCodingTime1. 抛砖引玉:什么是 Tag?正常情况下,你定义的结构体是这样子的,每个字段都由名字和字段类型组成type ...

weixin_39678304的博客 835

go语言反射C结构体,Golang 通过反射的方式调用结构体方法

在Go语言中,反射就是用来检查储存在接口变量内部pair对的一种机制,pair对是以值(value)和实际类型(concrete type)组成.在go中提供两种方法让我们可以轻松地访问接口变量的内容,分别是 reflect.ValueOf()和 reflect.TypeOf()reflect.ValueOf(i interface{} )用来获取输入参数接口中的数据的值,如果接口为空则返回0...

weixin_39634985的博客 1081

go调用c语言结构体,golang调用c结构体时的字节对齐问题

c结构体按1字节对齐时, 结构体Fc_tgs_struct与Fc_tgs_struct_2的大小不一致,谁能解答一下--------------------------------struct.h--------------------------------#ifndef HEAD_STRUCT_C#define HEAD_STRUCT_C#include #define BYTE_PACK_O...

weixin_42344395的博客 610

golang mysql 内嵌_Go语言类型内嵌和结构体内嵌

结构体可以包含一个或多个匿名(或内嵌)字段,即这些字段没有显式的名字,只有字段的类型是必须的,此时类型也就是字段的名字。匿名字段本身可以是一个结构体类型,即结构体可以包含内嵌结构体。可以粗略地将这个和面向对象语言中的继承概念相比较,随后将会看到它被用来模拟类似继承的行为。Go语言中的继承是通过内嵌或组合来实现的,所以可以说,在Go语言中,相比较于继承,组合更受青睐。考虑如下的程序:package ...

weixin_28965077的博客 358

Golang基础语法(go语言结构体、go语言数组与切片、go语言条件句、go语言循环)

本文介绍了Go语言中结构体、数组与切片、条件语句和循环的基本用法。结构体部分讲解了如何定义Student结构体,并通过键值对和值列表两种方式初始化结构体,以及如何访问结构体成员。数组与切片部分展示了数组初始化、切片创建和字典定义的方法。条件语句部分演示了if条件判断和switch语句的使用,包括map值判断和fallthrough关键字。循环部分虽未详细展开,但整体内容为Go语言基础语法入门提供了实用参考。这些基础知识为后续深入学习Go语言编程奠定了基础。

Atticus的博客 1083
上一篇: Go语言new与make区别
下一篇: Go语言匿名结构体
GeeCode
博客等级 码龄3年 2粉丝 58原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值