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

相关文章

go中的时间处理过程

《go中的时间处理过程》:本文主要介绍go中的时间处理过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 获取当前时间2 获取当前时间戳3 获取当前时间的字符串格式4 相互转化4.1 时间戳转时间字符串 (int64 > string)4.2 时间字符串转时间

Go语言中make和new的区别及说明

《Go语言中make和new的区别及说明》:本文主要介绍Go语言中make和new的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1 概述2 new 函数2.1 功能2.2 语法2.3 初始化案例3 make 函数3.1 功能3.2 语法3.3 初始化

MySQL 中的 CAST 函数详解及常见用法

《MySQL中的CAST函数详解及常见用法》CAST函数是MySQL中用于数据类型转换的重要函数,它允许你将一个值从一种数据类型转换为另一种数据类型,本文给大家介绍MySQL中的CAST... 目录mysql 中的 CAST 函数详解一、基本语法二、支持的数据类型三、常见用法示例1. 字符串转数字2. 数字

Python中你不知道的gzip高级用法分享

《Python中你不知道的gzip高级用法分享》在当今大数据时代,数据存储和传输成本已成为每个开发者必须考虑的问题,Python内置的gzip模块提供了一种简单高效的解决方案,下面小编就来和大家详细讲... 目录前言:为什么数据压缩如此重要1. gzip 模块基础介绍2. 基本压缩与解压缩操作2.1 压缩文

解读GC日志中的各项指标用法

《解读GC日志中的各项指标用法》:本文主要介绍GC日志中的各项指标用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、基础 GC 日志格式(以 G1 为例)1. Minor GC 日志2. Full GC 日志二、关键指标解析1. GC 类型与触发原因2. 堆

MySQL数据库中ENUM的用法是什么详解

《MySQL数据库中ENUM的用法是什么详解》ENUM是一个字符串对象,用于指定一组预定义的值,并可在创建表时使用,下面:本文主要介绍MySQL数据库中ENUM的用法是什么的相关资料,文中通过代码... 目录mysql 中 ENUM 的用法一、ENUM 的定义与语法二、ENUM 的特点三、ENUM 的用法1

JavaSE正则表达式用法总结大全

《JavaSE正则表达式用法总结大全》正则表达式就是由一些特定的字符组成,代表的是一个规则,:本文主要介绍JavaSE正则表达式用法的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录常用的正则表达式匹配符正则表China编程达式常用的类Pattern类Matcher类PatternSynta

Go语言中nil判断的注意事项(最新推荐)

《Go语言中nil判断的注意事项(最新推荐)》本文给大家介绍Go语言中nil判断的注意事项,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录1.接口变量的特殊行为2.nil的合法类型3.nil值的实用行为4.自定义类型与nil5.反射判断nil6.函数返回的

Go语言数据库编程GORM 的基本使用详解

《Go语言数据库编程GORM的基本使用详解》GORM是Go语言流行的ORM框架,封装database/sql,支持自动迁移、关联、事务等,提供CRUD、条件查询、钩子函数、日志等功能,简化数据库操作... 目录一、安装与初始化1. 安装 GORM 及数据库驱动2. 建立数据库连接二、定义模型结构体三、自动迁

MySQL之InnoDB存储引擎中的索引用法及说明

《MySQL之InnoDB存储引擎中的索引用法及说明》:本文主要介绍MySQL之InnoDB存储引擎中的索引用法及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录1、背景2、准备3、正篇【1】存储用户记录的数据页【2】存储目录项记录的数据页【3】聚簇索引【4】二