【go语言基础】结构体struct

主要是敲代码,敲的过程中会慢慢体会。

1.概念

结构体是用户定义的类型,表示若干字段的集合,目的是将数据整合在一起。

简单的说,类似Java中的实体类。存储某个实体属性的集合。

2.结构体声明

注意:结构体名字,结构体属性名的首字母大写代表其余的包可以访问该结构体,类似Java中的public公有属性。

如果,结构体的名字首字母或者属性首字母是小写,其余的包不能访问该结构体,类似于Java中的private私有属性。

type 结构体名字 struct{属性名 数据类型属性名 数据类型......
}

结构体的声明,相同类型的可以放到一行。

type Employee struct {firstName stringlastName  stringage       int
}​
type Employee struct {firstName,lastName  stringage                 int
}

3.结构体初始化

结构体初始化有多种方式。直接看代码吧,有注释。

// Employee 结构体
type Employee struct {firstname, lastname stringage                 int
}// 测试结构体
func testStruct() {// 方式一:把属性写出来,键值对emp1 := Employee{firstname: "Sam",lastname:  "Jam",age:       18,}fmt.Println("Employee 1 is ", emp1)// 方式二:不写属性名,但是要和结构体中的属性顺序一一对应,以及属性的数量是不能缺少的emp2 := Employee{"Sam","Com",20,}fmt.Println("Employee 2 is ", emp2)// 方式三:匿名结构体,并且赋值emp3 := struct {name stringage  int}{name: "Rose",age:  20,}fmt.Println("Employee 3 is ", emp3)// 空结构体var emp4 Employeefmt.Println("Employee 4 is ", emp4)// 获取结构体的某个属性直接是结构体初始化对象.属性名emp5 := Employee{firstname: "z",lastname:  "ee",}fmt.Println("Employee 5 is ", emp5)fmt.Println("获取实例的属性:", emp5.lastname)var emp6 Employeeemp6.age = 22emp6.firstname = "xiao"fmt.Println("Employee 6 is ", emp6)// 结构体指针,也就是指向结构体的指针emp8 := &Employee{firstname: "name",lastname:  "xing",age:       22,}// 下面这两种方式都行,go内直接隐式解引用,直接调用。// 显式解引用fmt.Println("FirstName:", (*emp8).firstname)// 隐式解引用fmt.Println("lastName", emp8.age)
}

3.结构体的嵌套

结构体的嵌套就是在一个结构体中属性的数据类型,是另一个结构体。另一个结构体中的属性可以直接被访问到。

举例:

type Address struct {city, state string
}type Student struct {name    stringage     int// 以另一个结构体作为数据类型address Address
}func TestUpStruct() {var police Policepolice.name = "China"police.Address = Address{city:  "中国",state: "四川",}// 提升字段,匿名结构体在另一个结构体中,叫提升字段,外部结构体可以直接访问内部结构体中的属性,和外部结构体中的属性一样的fmt.Println("Name:", police.name)fmt.Println("city:", police.city)fmt.Println("state:", police.state)
}

4.结构体指针

首先它是一个指针,是指向结构体的指针。初始化的时候,可以取结构体的地址。看代码。

func testStudent() {// 取结构体的地址进行初始化stuInfo1 := &Student{name: "zhangsan",age:  18,address: Address{city:  "nanjing",state: "江宁区",},}// 小细节问题:当初始化结构体为指针类型,输出结构体会带&符号// 如果使用初始化的变量获取属性,就没有&符号fmt.Println("stuInfo 1 is ", stuInfo1)fmt.Println("stuAge 1 is ", stuInfo1.age)var stuInfo2 StudentstuInfo2.name = "lisi"stuInfo2.age = 22stuInfo2.address = Address{city:  "深圳",state: "南山区",}fmt.Println("stuInfo 2 is ", stuInfo2)
}

5.结构体的导入

指的是可以导入其他包中的结构体,但是结构体的名字首字母需要大写,结构体中的属性名也需要大写。

package structs// Spec 电脑配置规格,结构体名首字母大写开头,说明其它的包可以的访问到,结构体中的属性也是一样的。
type Spec struct { // exported fieldMaker string // exported fieldModel string // unexported fieldPrice int    // exported field
}
// 导出结构体和字段,结构体以大写字母开头的,go中其他的包也可以直接访问
func testOutStruct() {var spec structs.Specspec.Maker = "联想"spec.Price = 10893spec.Model = "2222"fmt.Println("Spec:", spec)
}

6.结构体的相等

如果两个结构体对象中的属性以及属性的值是相等的,那么这两个结构体是相等的。

// 测试结构体是否相等,两个结构体对应的属性相等,那么这个结构体是相同的
func testCat() {cat1 := cat{name: "huahua",age:  2,}cat2 := cat{name: "huahua",age:  2,}if cat1 == cat2 {fmt.Println("cat1 == cat2")} else {fmt.Println("cat != cat2")}
}

注意:相等的比较不能是map,map是不能判断相等。看例子:

func testkeyVal() {k1 := keyVal{m: map[int]int{1: 2,},}k2 := keyVal{m: map[int]int{1: 2,},}fmt.Println("k1 :", k1, " k2 :", k2)/*if k1 == k2 {fmt.Println("k1 == k2")} else {fmt.Println("map 类型的结构体属性是不能够比较的")}*/
}

结构体需要掌握以下点:

1.结构体的定义

2.结构体的名字首字母大小写,属性名大小写

3.结构体的初始化,各种初始化方式

4.结构体指针

5.结构体嵌套

6.结构体的导入

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/33138.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flask实现接口mock,安装及使用教程(一)

1、什么是接口mock 主要是针对单元测试的应用,它可以很方便的解除单元测试中各种依赖,大大的降低了编写单元测试的难度 2、什么是mock server 正常情况下:测试客户端——测试——> 被测系统 ——依赖——>外部服务依赖 在被测系统和…

AI:01-基于机器学习的深度学习的玫瑰花种类的识别

文章目录 一、数据集介绍二、数据预处理三、模型构建四、模型训练五、模型评估六、模型训练七、模型评估八、总结深度学习技术在图像识别领域有着广泛的应用,其中一种应用就是玫瑰花种类的识别。在本文中,我们将介绍如何使用机器学习和深度学习技术来实现玫瑰花种类的识别,并…

运维监控学习1

1、监控对象: 1、监控对象的理解;CPU是怎么工作的; 2、监控对象的指标:CPU使用率;上下文切换; 3、确定性能基准线:CPU负载多少才算高; 2、监控范围: 1、硬件监控&#x…

“掌握类与对象,点亮编程之路“(下)

White graces:个人主页 🙉专栏推荐:《C语言入门知识》🙉 🙉 内容推荐:“掌握类与对象,点亮编程之路“(上)🙉 🐹今日诗词:春风得意马蹄疾,一日看尽长安花🐹 目录 &…

mysql-数据库-在表中添加数据三种方式

创建数据库和表 mysql> create database mydb4; Query OK, 1 row affected (0.01 sec)mysql> use mydb4; Database changed mysql> create table stu_info(-> stu_id int primary key auto_increment comment 学号,-> stu_name varchar(30) not null comment …

flume系列之:监控zookeeper的flume配置写入节点,新增和删除flume agent节点,通过ansible自动部署和卸载flume agent

flume系列之:监控zookeeper的flume配置写入节点,新增和删除flume agent节点,通过ansible自动部署和卸载flume agent 一、相关技术二、流程梳理三、部署和删除flume agent效果四、监控zookeeper节点五、新增zookeeper节点部署flume agent六、删除zookeeper节点删除flume agen…

计算机网络和 Internet 的基本概念

计算机网络和互联网(Internet)是现代计算机科技中的重要概念。它们为计算机之间的通信和数据交换提供了基础架构。以下是它们的基本概念: **计算机网络:** 计算机网络是指将多台计算机连接在一起,以便它们可以共享资…

vscode里面报:‘xxx‘ is assigned a value but never used.解决办法

const setCurPage: React.Dispatch<React.SetStateAction<number>> 已声明“setCurPage”&#xff0c;但从未读取其值。ts(6133) setCurPage is assigned a value but never used.eslinttypescript-eslint/no-unused-vars 出现这个报错是eslint导致的&#xff0…

P450进阶款无人机室内定位功能研测

在以往的Prometheus 450&#xff08;P450&#xff09;无人机上&#xff0c;我们搭载的是Intel Realsense T265定位模块&#xff0c;使用USB连接方式挂载到机载计算机allspark上&#xff0c;通过机载上SDK驱动T265运行并输出SLAM信息&#xff0c;以此来实现室内定位功能。 为进…

倒数纪念日-生日提醒事项时间管理倒计时软件

倒数纪念日​​​​​​​是一款功能强大的时间管理、事项提醒软件。帮你更好的管理倒数日、纪念日、生日、节假日、还款日等各种重要日子&#xff0c;通知提醒&#xff0c;让你不再错过生命中的每一个重要日子。 【功能简介】 分类管理&#xff1a;倒数日、纪念日、自定义分类…

腾讯云10万日活服务器配置怎么选?费用多少?

日活10万的小程序或APP使用腾讯云服务器配置怎么选&#xff1f;腾讯云10万人服务器配置多少钱一年&#xff1f;可以选择腾讯云4核8G12M轻量应用服务器或8核16G18M服务器&#xff0c;云服务器CVM的话可以选择标准型S5实例&#xff0c;腾讯云服务器网来详细说下腾讯云日活10万服务…

AJAX-笔记(持续更新中)

文章目录 Day1 Ajax入门1.AJAX概念和axios的使用2. 认识URL3.URL的查询参数4.常用的请求方法和数据提交5.HTTP协议-报文6.接口文档7.form-serialize插件8.案例用户登录 Day2 Ajax综合案bootstrap弹框图书管理图片上传更换背景个人信息设置 Day3 AJAX原理XMLHttpRequestPromise封…

SQL常见命令语句

1.连接数据库 mysql (-h IP) -u root -p 密码2.查看数据库 show databases3.使用数据库 use db_name4.查看表 show tables [from db_name]5.查看表结构 desc tb_name6.创建、删除、选择数据库 create database db_namedrop database db_nameuse db_name7.数据类型 参考链…

kvm not all arguments converted during string

kylin virt-manager 远程镜像制作问题记录(not all arguments ) 项目场景&#xff1a; 服务器端安装的OS版本&#xff1a;Kylin-Server-10-SP1-Release-Build20-20210518-arm64-2021-05-18 客户端安装的OS版本&#xff1a;Kylin-Server-10-SP1-Release-Build20-20210518-x86_…

【数据结构•堆】序列和的前n小元素(堆排序)

题目描述 问题&#xff1a;序列和的前n小元素 给出两个长度为n的有序表A和B, 在A和B中各任取一个, 可以得到 n^2 个和. 求这些和最小的n个。 输入输出格式 输入格式&#xff1a; 输入数据共三行。   第一行&#xff0c;一个整数值n &#xff08; n < 10^4 &#xff09…

rknn-toolkit安装的一点感想

rknn-toolkit装了好多次&#xff0c;总是会报错&#xff0c;终于尝试出了一个版本可以用的。&#xff08;注意windows和linux上都能用&#xff09; rknn-toolkit: v1.7.1&#xff1a; cuda 10.1 python3.6 pytorch1.5.1 opencv-python3.2.0.8 tensorflow1.14.0模型导出的时候…

使用 API Gateway Integrator 在 Quarkus 中实施适用于 AWS Lambda 的 OpenAPI

AWS API Gateway 集成使得使用符合 OpenAPI 标准的 Lambda Function 轻松实现 REST API。 关于开放API 它是一个 允许以标准方式描述 REST API 的规范。 OpenAPI规范 (OAS) 为 REST API 定义了与编程语言无关的标准接口描述。这使得人类和计算机都可以发现和理解服务的功能&am…

HTML5基础

1、HTML5概述 2014年10月28日&#xff0c;W3C&#xff08;world wide web consortium&#xff0c;万维网联盟&#xff09;的HTML工作组发布了HTML5的正式推荐标准。HTML5作为构建开放Web平台的核心&#xff0c;增加了支持Web应用的许多新特性&#xff0c;以及更符合开发者使用…

git 使用远端代码强制覆盖本地

有时候会遇到这种情景&#xff0c;我们本地的代码不需要了&#xff0c;需要使用远端的代码强制覆盖&#xff0c;这时候可以使用下面的命令 git fetch --all然后再执行下面的命令&#xff0c;重置为远端的代码&#xff0c;即使用远端的代码将本地覆盖 origin/远端分之名 git re…

编译Linux的时候出现 Restart config...

环境 buildroot 问题 在buildroot路径下执行 make linux-rebuild 出现了Restart config… 的问题 原因 我在修改linux源码的时候&#xff0c;在没有指定ARCH架构的情况下&#xff0c; 直接去linux源码目录(output/build/linux/)下执行了 make menuconfig并覆盖了原来的.c…