首页 > 其他分享 >Go语言入门6(struct 结构体)

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

时间:2023-04-12 18:48:41浏览次数:42  
标签:struct 成员 入门 Person Addr Go string 结构

结构体

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

结构体声明

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语言有一个特性让我们只声明一个成员对应的数据类型而不指名成员的名字,这类成员就 叫匿名成员。匿名成员的数据类型必须是命名的类型或指向一个命名的类型的指针。

⭐同样的如果内部嵌套的结构体首字母是以小写字母开头,那么我们同样无法在包外使用这个嵌套的结构体的成员

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" // 报错!!!

标签:struct,成员,入门,Person,Addr,Go,string,结构
From: https://www.cnblogs.com/te9uila/p/17310786.html

相关文章

  • WSL 2 上的 Docker 远程容器入门
    [WSL上的Docker容器入门|MicrosoftLearn](https://learn.microsoft.com/zh-cn/windows/wsl/tutorials/wsl-containers)本分步指南将通过使用WSL2(适用于Linux的Windows子系统,版本2)设置DockerDesktopforWindows,帮助开始使用远程容器进行开发。DockerDesktopfor......
  • 大模型入门(一)—— LLaMa/Alpaca/Vicuna
    LLaMa模型是Meta开源的大模型,模型参数从7B到65B不等,LLaMa-7B在大多数基准测试上超过了GPT3-173B,而LLaMa-65B和Chinchilla-70B、PaLM-540B相比也极具竞争力。相比于ChatGPT或者GPT4来说,LLaMa可能效果上还有差距,但相比ClosedAI,至少LLaMa论文和模型都开源出来了,目前huggingface......
  • MapStruct使用说明
    目录1、简介2、构建2.1、ApacheMaven3、定义映射器3.1、基本映射器3.2、表达式3.3、自定义方法3.4、多个源对象3.4.1、源数据来源多个对象3.4.2、源数据来源普通参数3.5、嵌套对象属性3.6、更新bean实例3.7、public访问权限修饰符修饰的成员3.8、生成器3.9、构造器3.10、映射Map......
  • 【基础知识】PCB布局设计入门步骤
    准备是成功的基石,在PCB设计中也是如此。改进和增长将伴随经验,首先做好准备能够充分利用经验获得成功。为了帮助你做好准备,下面分享一些基本的PCB布局设计步骤。从良好的原材料入手是您PCB布局设计的第一步无论打算执行什么任务,要想成功,就需要从优质的材料入手。就像高级木匠不会用......
  • Django自带的Admin后台中如何获取当前登录用户
    需求背景在使用Django快速开发一个IT电脑、显示器资产管理小系统的时候,遇到一个问题是,当变更资产设备(新增、修改、删除)的时候,能记录是谁在什么时间进行的变更。确认的是肯定是登录状态,但是在使用Django的signal中获取不到当前登录的用户问题演示1、定义资产设备模型和 自定义日志......
  • 快速搭建一个go语言web后端服务脚手架
    快速搭建一个go语言web后端服务脚手架源码:https://github.com/weloe/go-web-demoweb框架使用gin,数据操作使用gorm,访问控制使用casbin首先添加一下自定义的middlewarerecover_control.go,统一处理panicerror返回的信息packagemiddlewareimport( "fmt" "github.com/gin-......
  • UVa 11498 Division of Nlogonia (water ver.)
    11498-DivisionofNlogoniaTimelimit:1.000secondshttp://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=2493TheProblemAftercenturiesofhostilitiesandskirmishesbetweenthefour......
  • UVa 757 / POJ 1042 / East Central North America 1999 Gone Fishing (枚举&贪心&想
    757-GoneFishingTimelimit:3.000secondshttp://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=698http://poj.org/problem?id=1042Johnisgoingonafishingtrip.Hehas h hoursavailable( ),andther......
  • Linux入门
    Linux目录结构Linux和windows目录结构对比Linux系统中的目录/是所有目录的顶点目录结构像一颗倒挂的树Linux目录结构bin存放二进制可执行文件boot存放系统引导时使用的各种文件dev存放设备文件etc存放系统配置文件home存放系统用户的文件lib存放程序运行所需的共享......
  • go语言学习-gin框架中间件
    全局中间件所有的请求都经过此中间件//所有请求经过此中间件packagemainimport( "fmt" "time" "github.com/gin-gonic/gin")//定义中间件funcMiddleWare()gin.HandlerFunc{ returnfunc(ctx*gin.Context){ t:=time.Now() fmt.Println("中间件开始执行了......