4. Go结构体使用

1、结构体的简介

结构体(Struct)是编程语言中常见的一种复合数据类型,它将不同类型的数据元素(成员)组合成一个单一的实体。通过结构体,程序员可以将具有不同类型和性质的信息绑定到一个对象中,方便对这些信息的存储、传递和操作。

2、结构体的特点

  • 聚合性:结构体可以将不同类型的数据组合成一个实体。
  • 成员:每个结构体都有若干成员,每个成员可以是不同的数据类型,成员在结构体中通常按顺序排列。
  • 整体性:结构体可以作为一个整体进行传递、复制、返回等操作。

3、结构体的经典应用场景:

一个常见的例子服务器是运维人员经常管理的对象,通常需要存储每台服务器的一些基本信息,比如服务器的 IP 地址、操作系统、CPU、内存、存储、状态等

结构体的运维案例:服务器信息

假设我们需要管理一个公司内部的服务器,每台服务器可能会有以下信息:

  • IP 地址:服务器的 IP 地址;
  • 操作系统:服务器运行的操作系统(如 Ubuntu、CentOS、RockyLinux等);
  • CPU 数量:服务器的 CPU 核心数;
  • 内存大小:服务器的内存大小;
  • 硬盘空间:服务器的硬盘空间;
  • 状态:服务器的当前状态(如正在运行、宕机等)。
package mainimport "fmt"type Server struct {IPAddress string  // 服务器的IP地址OS        string  // 操作系统CPUCount  int     // CPU核心数Memory    float64 // 内存大小,单位GBDiskSpace float64 // 硬盘空间,单位GBStatus    string  // 服务器状态,可能是 "running"、"down" 或 "maintenance"
}func main() {//使用如下代码创建这台服务器的实例:var a = Server{IPAddress: "192.168.101.100",OS:        "RockyLinux8",CPUCount:  64,Memory:    503,DiskSpace: 10240,Status:    "Running"}fmt.Println(a)
}

  • IPAddress 是服务器的 IP 地址,用来唯一标识每台服务器;
  • OS 表示服务器运行的操作系统,可以是字符串类型,如 “Ubuntu 20.04” 或 “CentOS 7”;
  • CPUCount 表示服务器的 CPU 核心数;
  • Memory 表示服务器的内存大小,单位为 GB;
  • DiskSpace 表示服务器的硬盘空间,单位为 GB;
  • Status 表示服务器的当前状态,可以是如 “running”、“down” 或 “maintenance” 等值。

4、扩展应用场景

  1. 查询和修改服务器信息:运维人员可以通过结构体来查询和修改服务器的各种信息,比如查看某台服务器的状态,或者修改服务器的内存大小。
  2. 批量管理:假设有多个服务器需要管理,我们可以将这些 Server 结构体存储在一个数组或切片中,方便进行批量操作。例如,检查所有服务器的状态,进行维护时对状态为 down 的服务器执行恢复操作等。
  3. 传递和存储:运维平台可以通过结构体将服务器信息传递给其他系统模块,或将结构体存储在数据库中。可以方便地将服务器信息作为函数的参数进行传递。
// 创建多个服务器实例
servers := []Server{{IPAddress: "192.168.1.10",OS:        "Ubuntu 20.04",CPUCount:  8,Memory:    16,DiskSpace: 500,Status:    "running",},{IPAddress: "192.168.1.11",OS:        "CentOS 7",CPUCount:  4,Memory:    32,DiskSpace: 1000,Status:    "down",},
}// 查询某台服务器的状态
for _, s := range servers {fmt.Printf("服务器 %s 状态: %s\n", s.IPAddress, s.Status)
}// 更新某台服务器的状态
servers[1].Status = "running"
fmt.Printf("服务器 %s 状态已更新为: %s\n", servers[1].IPAddress, servers[1].Status)

5、结语

结构体不单独使用,结构体、接口和函数的协同工作,可以协同工作来实现更高效、灵活和模块化的程序设计。这三者的结合能够充分利用 Go 语言的特性,如多态、组合和抽象,提升代码的可维护性和可扩展性。

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

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

相关文章

IOPS与吞吐量、读写块大小及延迟之间的关系

IOPS(每秒输入/输出操作次数)、吞吐量、读写块大小及延迟是衡量存储系统性能的四个关键指标,它们之间存在密切的关系。以下从多个方面详细说明这些指标之间的关系: 1. IOPS与吞吐量的关系 公式关系:吞吐量&#xff0…

DeepSeek 部署过程中的问题

文章目录 DeepSeek 部署过程中的问题一、部署扩展:docker 部署 DS1.1 部署1.2 可视化 二、问题三、GPU 设置3.1 ollama GPU 的支持情况3.2 更新 GPU 驱动3.3 安装 cuda3.4 下载 cuDNN3.5 配置环境变量 四、测试 DeepSeek 部署过程中的问题 Windows 中 利用 ollama 来…

DeepSeek RAGFlow构建本地知识库系统

学习目标 DeepSeek RAGFlow 构建本地知识库系统 学习内容 下载安装Docker 1.1 Docker 是什么 1.2 下载Docker 1.3 安装Docker配置DockerRAGFlow 配置 3.1 下载RAGFlow 3.2 RAGFlow配置 3.3 启动RAGFlow Docker新建知识库 4.1 查看本机IP 4.2 OLLAMA_HOST 变量配置 4.3 添加模…

11 享元(Flyweight)模式

享元模式 1.1 分类 (对象)结构型 1.2 提出问题 做一个车管所系统,将会产生大量的车辆实体,如果每一个实例都保存自己的所有信息,将会需要大量内存,甚至导致程序崩溃。 1.3 解决方案 运用共享技术有效…

arcgis for js范围内天地图高亮,其余底图灰暗

在GIS地图开发中,有时我们需要突出显示某个特定区域,而将其他区域灰暗处理,以达到视觉上的对比效果。本文将介绍如何使用ArcGIS for JavaScript实现这一功能,具体效果为:在指定范围内,天地图高亮显示&#…

Spring AI + Ollama 实现 DeepSeek-R1 API 服务和调用

随着大语言模型的快速发展,越来越多的开发者开始探索如何将这些强大的推理模型本地化运行。DeepSeek-R1,作为一款性能卓越的开源AI模型,以其低成本和出色的推理能力在技术圈内引起了广泛关注。本文将详细介绍如何使用Ollama部署DeepSeek-R1&a…

Ubuntu 20.04配置网络

1,检查自己网络是否配通。 网络配置成功显示的网络图标 不成功的网络图标 如果看不见网络图标,可以使用ping命令。连接一下百度网。 ping www.baidu.com ping失败的样子 ping成功的样子 2,接下来进入正题,我们开始配置网络。 这…

ElasticSearch入门

目录 1._cat 2.索引一个 document 3.查询document 4.更新document 5.删除document 或 index 6.批量_bulk API 1._cat Get/_cat/nodes 查看所有节点 Get/_cat/indices 查看所有索引(indices :index的复数) Get/_cat/master 查看…

java练习(8)

ps:题目来自力扣 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。 假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作…

Java常用类

文章目录 包装类(Wrapper)包装类的继承体系装箱和拆箱包装类与String类型的相互转换 String类创建 String 对象的两种方式String 类的常见方法案例演示 StringBuffer类类的继承体系String VS StringBufferStringBuffer构造器String 和 StringBuffer 相互转换StringBuffer 类常见…

算法设计与分析三级项目--管道铺设系统

摘 要 该项目使用c算法逻辑,开发环境为VS2022,旨在通过Prim算法优化建筑物间的连接路径,以支持管线铺设规划。可以读取文本文件中的建筑物名称和距离的信息,并计算出建筑物之间的最短连接路径和总路径长度,同时以利用…

【C语言系列】深入理解指针(5)

深入理解指针(5) 一、sizeof和strlen的对比1.1sizeof1.2strlen1.3sizeof和strlen的对比 二、数组和指针笔试题解析2.1 一维数组2.2 字符数组2.2.1代码1:2.2.2代码2:2.2.3代码3:2.2.4代码4:2.2.5代码5&#…

设计模式——策略模式

设计模式——策略模式 简单介绍一个例子 策略模式是设计模式里面比较简单的设计模式,其特点简单又实用,并且可以让你的代码看起来高大上,维护代码时还方便扩张 多重条件语句不易维护,而使用策略模式可以避免使用多重条件语句&…

【玩转 Postman 接口测试与开发2_018】第14章:利用 Postman 初探 API 安全测试

《API Testing and Development with Postman》最新第二版封面 文章目录 第十四章 API 安全测试1 OWASP API 安全清单1.1 相关背景1.2 OWASP API 安全清单1.3 认证与授权1.4 破防的对象级授权(Broken object-level authorization)1.5 破防的属性级授权&a…

MySQL的 MVCC详解

MVCC是多版本并发控制,允许多个事务同时读取和写入数据库,而无需互相等待,从而提高数据库的并发性能。 在 MVCC 中,数据库为每个事务创建一个数据快照。每当数据被修改时,MySQL不会立即覆盖原有数据,而是生…

【Uniapp-Vue3】z-paging插件组件实现触底和下拉加载数据

一、下载z-paing插件 注意下载下载量最多的这个 进入Hbuilder以后点击“确定” 插件的官方文档地址: https://z-paging.zxlee.cn 二、z-paging插件的使用 在文档中向下滑动,会有使用方法。 使用z-paging标签将所有的内容包起来 配置标签中的属性 在s…

UG NX二次开发(Python)-API函数介绍与应用实例(三)-UFLayer类操作

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1 前言2、UFLayer类说明3、获取当前工作图层4、移动对象到特定的图层1 前言 采用Python语言进行UG NX二次开发的帮助材料很少,采用录制的方法是一种比较容易实现的方式,但是使用UFun函数更容易上…

免费PDF 转换成 Word、PPT、Excel 格式的工具

在当今数字化办公的时代,文件格式的转换需求日益频繁。我们的软件应运而生,它是一款专业的 PDF 转换成 Word、PPT、Excel 格式的工具,为您的办公流程带来极大便利。 下载地址:https://pan.quark.cn/s/8c42ac2e4bf5 核心功能&…

deepseek从网络拓扑图生成说明文字实例

deepseek对话页面中输入问题指令: 我是安全测评工程师,正在撰写系统测评报告,现在需要对系统网络架构进行详细说明,请根据附件网络拓扑图输出详细说明文字。用总分的段落结构,先介绍各网络区域,再介绍网络…

排序算法--希尔排序

希尔排序是插入排序的改进版本,适合中等规模数据排序,性能优于简单插入排序。 // 希尔排序函数 void shellSort(int arr[], int n) {// 初始间隔(gap)为数组长度的一半,逐步缩小for (int gap n / 2; gap > 0; gap …