go struct 类型用法

2024-06-16 00:48
文章标签 类型 go 用法 struct

本文主要是介绍go struct 类型用法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  • 值类型
  • 零值各字段的零值组成
  • 字面量
  • 具名字段
  • 嵌入字段/匿名字段
  • 嵌入字段和具名字段同名时,带上类型名
  • 嵌入字段和具名字段不同名时,不带类型名
  • 值方法
  • 指针方法
package mainimport "fmt"type data struct {id   intname stringaddr string
}type family struct {father stringmother string
}type person struct {id   intsex  stringdata //嵌入字段/匿名字段fam  family
}//值方法
func (p person) setid(id int) {p.id = id
}//指针方法
func (p *person) Setsex(sex string) {p.sex = sex
}
func main() {//零值var val personvar foo person//不带字段字面量var bar = person{10,"male",data{20,"bar","addr_bar",},family{"ba_bar","ma_bar",},}//带字段字面量var fam = family{father: "ba",mother: "ma",}//具名字段的访问foo.sex = "female"//具名字段屏蔽了嵌入字段(匿名字段).data.idfoo.id = 20//嵌入字段和具名字段同名时,带上类型名foo.data.id = 2//嵌入字段和具名字段不同名时,不带类型名foo.name = "foo"foo.addr = "addr_foo"foo.fam.father = "ba_foo"foo.fam.mother = "ma_foo"fmt.Println(val, fam) //{0  {0  } { }} {ba mafmt.Println(bar)      //{10 male {20 bar addr_bar} {ba_bar ma_bar}}fmt.Println(foo)      //{20 female {2 foo addr_foo} {ba_foo ma_foo}}pfoo := &foo//值类型方法,传入调用对象的副本,原对象不被改变bar.setid(22)  //用值调用,传对象副本pfoo.setid(33) //用指针调用,编译器自动解引用,再传入对象副本//指针类型方法,传入调用对象的指针,对象被改变bar.Setsex("male_xxx")         //用值调用编译器自动取地址,再传入对象指针pfoo.Setsex("female_xxx")      //用指针调用,传入对象指针fmt.Println(bar.id, bar.sex)   //10 male_xxxfmt.Println(pfoo.id, pfoo.sex) //20 female_xx
}

输出

{0  {0  } { }} {ba ma}
{10 male {20 bar addr_bar} {ba_bar ma_bar}}
{20 female {2 foo addr_foo} {ba_foo ma_foo}}
10 male_xxx
20 female_xxx

这篇关于go struct 类型用法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1065057

相关文章

IDEA如何将String类型转json格式

《IDEA如何将String类型转json格式》在Java中,字符串字面量中的转义字符会被自动转换,但通过网络获取的字符串可能不会自动转换,为了解决IDEA无法识别JSON字符串的问题,可以在本地对字... 目录问题描述问题原因解决方案总结问题描述最近做项目需要使用Ai生成json,可生成String类型

Go语言实现将中文转化为拼音功能

《Go语言实现将中文转化为拼音功能》这篇文章主要为大家详细介绍了Go语言中如何实现将中文转化为拼音功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 有这么一个需求:新用户入职 创建一系列账号比较麻烦,打算通过接口传入姓名进行初始化。想把姓名转化成拼音。因为有些账号即需要中文也需要英

Go语言使用Buffer实现高性能处理字节和字符

《Go语言使用Buffer实现高性能处理字节和字符》在Go中,bytes.Buffer是一个非常高效的类型,用于处理字节数据的读写操作,本文将详细介绍一下如何使用Buffer实现高性能处理字节和... 目录1. bytes.Buffer 的基本用法1.1. 创建和初始化 Buffer1.2. 使用 Writ

Go Gorm 示例详解

《GoGorm示例详解》Gorm是一款高性能的GolangORM库,便于开发人员提高效率,本文介绍了Gorm的基本概念、数据库连接、基本操作(创建表、新增记录、查询记录、修改记录、删除记录)等,本... 目录1. 概念2. 数据库连接2.1 安装依赖2.2 连接数据库3. 数据库基本操作3.1 创建表(表关

oracle中exists和not exists用法举例详解

《oracle中exists和notexists用法举例详解》:本文主要介绍oracle中exists和notexists用法的相关资料,EXISTS用于检测子查询是否返回任何行,而NOTE... 目录基本概念:举例语法pub_name总结 exists (sql 返回结果集为真)not exists (s

Mysql 中的多表连接和连接类型详解

《Mysql中的多表连接和连接类型详解》这篇文章详细介绍了MySQL中的多表连接及其各种类型,包括内连接、左连接、右连接、全外连接、自连接和交叉连接,通过这些连接方式,可以将分散在不同表中的相关数据... 目录什么是多表连接?1. 内连接(INNER JOIN)2. 左连接(LEFT JOIN 或 LEFT

Redis的Hash类型及相关命令小结

《Redis的Hash类型及相关命令小结》edisHash是一种数据结构,用于存储字段和值的映射关系,本文就来介绍一下Redis的Hash类型及相关命令小结,具有一定的参考价值,感兴趣的可以了解一下... 目录HSETHGETHEXISTSHDELHKEYSHVALSHGETALLHMGETHLENHSET

Python中异常类型ValueError使用方法与场景

《Python中异常类型ValueError使用方法与场景》:本文主要介绍Python中的ValueError异常类型,它在处理不合适的值时抛出,并提供如何有效使用ValueError的建议,文中... 目录前言什么是 ValueError?什么时候会用到 ValueError?场景 1: 转换数据类型场景

Springboot中Jackson用法详解

《Springboot中Jackson用法详解》Springboot自带默认json解析Jackson,可以在不引入其他json解析包情况下,解析json字段,下面我们就来聊聊Springboot中J... 目录前言Jackson用法将对象解析为json字符串将json解析为对象将json文件转换为json

Go信号处理如何优雅地关闭你的应用

《Go信号处理如何优雅地关闭你的应用》Go中的优雅关闭机制使得在应用程序接收到终止信号时,能够进行平滑的资源清理,通过使用context来管理goroutine的生命周期,结合signal... 目录1. 什么是信号处理?2. 如何优雅地关闭 Go 应用?3. 代码实现3.1 基本的信号捕获和优雅关闭3.2