Go语言入门6(struct 结构体)

这篇具有很好参考价值的文章主要介绍了Go语言入门6(struct 结构体)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

结构体

​ 结构体是一种聚合的数据类型,是由零个或多个任意类型的值聚合成的实体。每个值称为结构体的成员

结构体声明

type + 结构体名 + struct + {成员列表}

​ ⭐如果结构体成员名字是以大写字母开头的,那么该成员就是导出的。这是Go语言导出规则决 定的。一个结构体可能同时包含导出和未导出的成员。结构体名也同样适用此规则

// 声明的一个结构体picture,里面有两个成员:color和background
type Picture struct {
	Color string
	Background string // 首字母大写,在包外可以访问
    value int // 首字母小写,只能在包内使用
}

// 声明一个picture类型的变量picture01
var picture01 Picture;

//带有字面量的声明
picture02 := Picture{
    Color : "red",
    Background : "img01",
    value : 10000, // 只能在包内使用,包外会爆错
}

结构体使用

// 使用`变量名 + .`来访问结构体成员
fmt.Println(picture02.Color) // red

​ 因为在Go语言中,所有的函 数参数都是值拷贝传入的,函数参数将不再是函数调用时的原始变量,因此在函数传参时,一般都是用指针的方式传参结构体

// 声明结构体Person
type Person struct {
	Addr    string
	Car     string
	Company string
}
// 声明函数CheckPerson
func CheckPerson(person *Person) {
	fmt.Printf("Addr: %s \nCar: %s \ncompany: %s", person.Addr, person.Car, person.Company)
}
// 声明一个Person类型的变量
person01 := person.Person{
    Addr:    "address01",
    Car:     "BMW",
    Company: "HuaWei",
}
// 通过指针传参调用函数
CheckPerson(&person01)
/*
Addr: address01
Car: BMW
company: HuaWei
*/

嵌套结构体以及匿名成员

​ 如果多个结构体出现重复的地方,我们会使用结构体嵌套,Go语言有一个特性让我们只声明一个成员对应的数据类型而不指名成员的名字,这类成员就 叫匿名成员。匿名成员的数据类型必须是命名的类型或指向一个命名的类型的指针。

⭐同样的如果内部嵌套的结构体首字母是以小写字母开头,那么我们同样无法在包外使用这个嵌套的结构体的成员文章来源地址https://www.toymoban.com/news/detail-411598.html

package pac1
type Person struct {
	Addr    string
	Car     string
	company string // 小写开头,没导出,只能在包内使用
}
// 声明结构体Employee嵌套Person
type Employee struct {
	EmployeeName   string
	EmployeeAge    int
	employeeSalary int // 小写开头,没导出,只能在包内使用
	Person // 这个Person也叫匿名变量,访问时可以直接来访问内部成员
}
// 结构体字面值必须遵循形状类型声明时的结构,所以在使用字面值初始化时,必须遵循这个结构
robot01 := Employee{
    EmployeeName: "Alice",
    EmployeeAge:  20,
    Person: Person{
        Addr:    "address01",
        Car:     "BMW",
        company: "HuaWei",
    },
}
// 在访问时可以直接访问
fmt.println(robot01.Addr) // address01

// 包外环境
package pac2
import "pac1"
var robot02 pac1.employee;
// 在包外可以访问大写字母开头(导出)的成员
robot02.EmployeeName = "Bob" 
// 在包外不可以访问小写字母开头(没导出)的成员
robot02.company = "Tencent" // 报错!!!

到了这里,关于Go语言入门6(struct 结构体)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • go struct结构体之间的转换

    原文链接:https://www.zhoubotong.site/post/94.html 说下背景吧,大家在开发中可能在不同的目录(package)下定义了相同的struct(属性参数完全一样如名字、个数和类型),在方法调用传参数的时候,可能是用到了其中某一个struct的引用。 那么这里就牵扯到相互间的转换:直接上demo: 显然

    2023年04月17日
    浏览(47)
  • go 笔记 第九章 结构体 struct 声明和使用

    package main import “fmt” type qm struct { name string age int hobby []string home } type home struct { address string } // 给结构体声明方法 func (q qm) song(name string) (ret string) { ret = “惊雷” fmt.Printf(“%v—%v–%v”, q.name, name, q.age) fmt.Println() return ret } func (h home) open() { fmt.Println(“open”) } func main() { v

    2024年02月16日
    浏览(42)
  • 【GoLang入门教程】Go语言工程结构详述

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站:人工智能 前言 当创建一个Go语言项目时,良好的工程结构是确保项目可维护性、可扩展性和清晰性的关键。 虽然Go本身没有强制性的项目结构要求,但是采用一致性

    2024年01月24日
    浏览(75)
  • 【C语言】struct结构体

    具有相同或不同类型元素的集合叫做结构体。定义一个结构体,本质是在制作一个类型: 在C中,结构体内只能存放各种类型的变量,不能存函数: 像上面这样就是声明了一个结构体 struct Student ,此时的 struct Student 相当于一个类型名。 然后我们可以用这个自己声明的结构体

    2024年02月03日
    浏览(53)
  • 【Golang】Golang进阶系列教程--为什么 Go 语言 struct 要使用 tags

    在 Go 语言中,struct 是一种常见的数据类型,它可以用来表示复杂的数据结构。在 struct 中,我们可以定义多个字段,每个字段可以有不同的类型和名称。 除了这些基本信息之外,Go 还提供了 struct tags,它可以用来指定 struct 中每个字段的元信息。 在本文中,我们将探讨为什

    2024年02月15日
    浏览(74)
  • 掌握Go语言:Go语言结构体,精准封装数据,高效管理实体对象(22)

    在Go语言中,结构体(Struct)是一种自定义的数据类型,用于封装不同类型的数据字段。结构体可以看作是一种用户自定义的数据结构,用于组织和管理相关的数据。结构体由一组字段(Fields)组成,每个字段可以是不同的数据类型,可以是基本类型(如整数、浮点数、布尔

    2024年03月26日
    浏览(51)
  • 掌握Go语言:Go语言范围,优雅遍历数据结构,简化代码操作实战解析(24)

    在Go语言中,范围(range)用于迭代数组、切片、映射、通道等数据结构的元素。范围的语法形式为 for range ,可以遍历集合中的每个元素,并在每次迭代中返回元素的索引(或键)和对应的值。 Go语言范围使用方法 使用范围语句的一般形式为: 其中, index 是元素的索引(或

    2024年04月17日
    浏览(45)
  • Go语言数据结构(一)双向链表

    Go语言中list容器定义在\\\"container/list\\\"包中,实现了一个双向链表。本文第一部分总结源码包中的方法,第二部分展示使用list包的常见示例用法以及刷题时的用法。 食用指南:先看第二部分的常用示例用法然后再用到时在第一部分找对应的方法。 更多内容以及其他Go常用数据结

    2024年01月19日
    浏览(37)
  • 掌握Go语言:Go语言类型转换,解锁高级用法,轻松驾驭复杂数据结构(30)

    在Go语言中,类型转换不仅仅局限于简单的基本类型之间的转换,还可以涉及到自定义类型、接口类型、指针类型等的转换。以下是Go语言类型转换的高级用法详解: Go语言类型转换的高级用法 1. 自定义类型之间的转换 在Go语言中,可以使用类型别名或自定义类型来创建新的

    2024年04月09日
    浏览(65)
  • 【go语言】结构体数据填充生成md错误码文件

     这里使用pongo2这个模版引擎库进行md文件渲染GitHub - flosch/pongo2: Django-syntax like template-engine for Go Go 语言原生如下示例:

    2024年01月18日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包