go语言编程 小试牛刀 goroutine和reflect知识点

news2024/9/21 10:35:13

(一)goroutine

package _case

import "fmt"

// sum 函数计算整数切片 values 的总和,并将结果发送到 resultChan 通道中
func sum(values []int, resultChan chan int) {
	sum := 0
	for _, value := range values {
		sum += value
	}
	resultChan <- sum // 将计算结果发送到 channel 中
}

// ParacalcCase 函数演示并发计算,将整数切片分为两部分,并使用两个 goroutine 计算总和
func ParacalcCase() {
	values := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
	resultChan := make(chan int, 2) // 创建一个缓冲大小为 2 的整数通道
	go sum(values[:len(values)/2], resultChan) // 启动一个 goroutine 计算切片的前半部分总和
	go sum(values[len(values)/2:], resultChan) // 启动一个 goroutine 计算切片的后半部分总和
	sum1, sum2 := <-resultChan, <-resultChan // 从通道中接收两个计算结果
	fmt.Println("Result:", sum1, sum2, sum1+sum2) // 打印计算的结果
} // paracalcCase

 

在这段代码中,实现了并发计算的功能。主要内容如下:

  1. 定义函数 sum

    • 函数 sum 接受一个整数切片 values 和一个整数类型的通道 resultChan
    • 遍历整数切片 values,计算总和,并将结果发送到通道 resultChan 中。
  2. 函数 ParacalcCase

    • 创建一个整数切片 values 包含了从1到10的整数。
    • 创建一个缓冲大小为2的整数通道 resultChan
    • 启动两个 goroutine 分别计算切片的前半部分和后半部分的总和,并将结果发送到通道 resultChan 中。
    • 从通道中接收两个计算结果,并将结果打印出来。

涉及的知识点

并发编程

  • 使用 goroutine 实现并发计算,提高程序的执行效率。

通道(Channel)

  • 使用通道来进行 goroutine 之间的通信。通道是 goroutine 之间通信的一种方式,可以安全地在不同 goroutine 之间传递数据。

切片(Slice)

  • 使用切片来存储整数数据,并根据切片的长度划分数据进行并发计算。

函数

  • 定义和调用了带有参数和返回值的函数,实现了业务逻辑。

并发编程

  • 利用 Go 语言的并发特性,使用 goroutine 实现并发计算,加快数据处理速度。

通道通信

  • 使用通道进行 goroutine 之间的数据传递,实现并发计算结果的汇总。

 (二)reflect

package _case

import (
	"fmt"
	"reflect"
)

// 定义结构体 Animal 包含名称和寿命
type Animal struct {
	Name           string
	LifeExpectancy int
}

// 定义 Animal 结构体的方法 Run,用于输出动物可以奔跑的信息
func (a *Animal) Run() {
	fmt.Println("I can run")
}

// ReflectCase 函数演示了如何使用反射功能来获取结构体实例的字段值
func ReflectCase() {
	// 创建一个名为 Jerry 寿命为 3 的 Animal 实例
	jerry := &Animal{"Jerry", 3}
	j := reflect.ValueOf(jerry).Elem() // 通过反射获取实例的值
	typeOfT := j.Type() // 获取实例的类型信息
	for i := 0; i < j.NumField(); i++ {
		f := j.Field(i) // 获取实例的字段值
		// 输出字段索引、字段名称、字段类型及字段值
		fmt.Printf("%d: %s %s = %v\n", i, typeOfT.Field(i).Name, f.Type(),
			f.Interface())
	}
}

 

这段代码中定义了一个 Animal 结构体,包含了动物的名称和预期寿命,并实现了 Run 方法用于输出动物奔跑的信息。在 ReflectCase 函数中,通过使用反射(reflect)功能,演示了如何获取结构体实例的字段值并打印出字段的索引、名称、类型和值。反射是一种强大的工具,可以在运行时检查变量、变量的类型,并操作值和类型。如果有任何问题或需要进一步的解释,请随时告诉我。

使用到的知识点和语法:

  1. 结构体 (Struct):定义结构体来表示具有一组相关字段的自定义数据类型。

  2. 方法 (Method):在结构体上定义方法,使得结构体实例能够执行特定的行为。

  3. 反射 (Reflection):通过 reflect 包中的函数实现反射,可以在运行时检查类型、值和调用对应的方法等功能。

  4. reflect.ValueOf:返回一个 reflect.Value,该值包含传入参数的值。可以通过 .Elem() 方法获取实际的值。

  5. reflect.Type:通过 reflect.ValueType() 方法获取值对应的类型信息。

  6. reflect.Field:使用 Field() 方法获取结构体的字段值,并对其进行操作。

  7. fmt.Printf:格式化输出,用于输出格式化的字符串,包括参数的索引、字段名称、类型和值等。

这些知识点和语法在代码中被使用,结合起来实现了对结构体实例的反射操作,获取并输出字段的信息。反射在编程中是一种高级的技术,允许程序在运行时动态地检查类型信息、获取字段值等,对于一些元编程和动态特性的场景非常有用。

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

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

相关文章

HarmonyOS NEXT学习——@Styles、@Extend、stateStyles

Styles装饰器 定义组件重用样式 仅支持通用属性和通用事件不支持参数可以定义全局和组件内使用&#xff0c;全局使用需要加function // 全局 Styles function functionName() { ... }// 在组件内 Component struct FancyUse {Styles fancy() {.height(100)} }组件内Styles的优…

智能一体式闸门在灌区中的应用

在现代化的农业灌溉领域&#xff0c;智能一体式闸门作为一种集自动化、智能化、高效能于一体的先进设备&#xff0c;正逐渐在灌区管理中发挥着重要作用。 灌区是农业生产的重要基地&#xff0c;其水资源的管理和利用直接关系到农作物的生长和产量。然而&#xff0c;传统的闸门管…

旋转中的图片视觉差效果

Hello&#xff0c;亲爱的宝子们&#xff1f;最近我一个前端架构师却临时顶替产品经理的工作&#xff0c;导致最近一周实在太忙了&#xff0c;都没有来得及更新文章。在这里想大家道歉了&#xff01;也想厚颜无耻的问问大家想我了吗&#xff1f;(●◡●) 今天给大家带来一个非常…

Vue 使用 Element UI 组件库

https://andi.cn/page/621589.html

RAG介绍

一&#xff0c;RAG概述 RAG&#xff08;Retrieval-Augmented Generation&#xff0c;检索增强生成&#xff09;是一种结合了信息检索与生成任务的技术&#xff0c;它通过将外部知识库与大模型的生成能力相结合&#xff0c;提高了生成内容的准确性和丰富性。以下是关于RAG应用的…

【产品那些事】固件安全-关于OTA升级包分析

文章目录 前言什么是OTA?升级包(固件)的类型和架构案例tp-link路由器升级包怎么解包分析?binwalk安装及使用ubi_reader安装及使用unsquashfs安装及使用某车企OTA升级包通用Android OTA解包相关分区第二层解包前言 什么是OTA? OTA(Over-the-Air)是一种通过无线通信网络(…

go的Mutex实现原理及演进

下面的这个是对于昨天晚上读的几篇关于go中锁的文章知识点的总结 文章目录 1. 引言1.1 并发编程的挑战1.2 Mutex 的角色1.3 Mutex 设计的演进1.4 技术追求的美妙 引言部分详细解释引言部分注意点引言部分流程图 2. Mutex 架构演进2.1 初版 Mutex 设计2.2 性能优化 - 给新人机会…

【ffmpeg】一篇文章搞定YUV

文章目录 前言YUV是什么&#xff1f;YUV的用途YUV采样格式采样格式是什么YUV采样格式有哪些YUV采样格式的区别 YUV与RGBRGB 颜色空间YUV 颜色空间RGB 与 YUV 的比较RGB 转 YUV 公式YUV 转 RGB 公式注意事项 YVU数据计算通用公式4:4:4 采样格式4:2:2 采样格式4:2:0 采样格式实例…

win10删除鼠标右键选项

鼠标右键菜单时&#xff0c;发现里面的选项特别多&#xff0c;找一下属性&#xff0c;半天找不到。删除一些不常用的选项&#xff0c;让右键菜单变得干净整洁。 1、按下键盘上的“winR”组合按键&#xff0c;调出“运行”对话框&#xff0c;输入“regedit”命令&#xff0c;点击…

达梦数据库的系统视图v$rapply_log_task

达梦数据库的系统视图v$rapply_log_task 达梦数据库的V$RAPPLY_LOG_TASK视图是一个动态性能视图&#xff0c;主要用于在备库上查询。该视图需要在备库上查询&#xff08;DMDSC 备库需要在控制节点&#xff08;重演节点&#xff09;上查询&#xff09;&#xff0c;用于查询备库…

专业PDF编辑工具:Acrobat Pro DC 2024.002.20933绿色版,提升你的工作效率!

软件介绍 Adobe Acrobat Pro DC 2024绿色便携版是一款功能强大的PDF编辑和转换软件&#xff0c;由Adobe公司推出。它是Acrobat XI系列的后续产品&#xff0c;提供了全新的用户界面和增强功能。用户可以借助这款软件将纸质文件转换为可编辑的电子文件&#xff0c;便于传输、签署…

RocketMQ单结点安装/Dashboard安装

目录 1.安装NameServer 2.安装Broker 3.使用自带工具测试数据发送 4.使用DashBoard进行查看 5.关闭相关设备 前置条件&#xff1a;两台虚拟机CentOS Linux release 7.5.1804(ps:当然也可以都部署在一台机器上) RocketMq属于天生集群。需要同时启动nameServer和Broker进行…

STP(802.1D)

802.1D&#xff1a;也成为生成树协议&#xff08;Spanning Tree Protocol&#xff0c;STP&#xff09;&#xff0c;是一种工作在数据链路层的通信协议 作用&#xff1a;防止交换机冗余链路产生的环路&#xff0c;确保以太网中无环路的逻辑拓扑结构&#xff0c;从而避免广播风暴…

MacBook电脑远程连接Linux系统的服务器方法

一、问题简介 Windows 操作系统的电脑可使用Xshell等功能强大的远程连接软件。通过连接软件&#xff0c;用户可以在一台电脑上访问并控制另一台远程计算机。这对于远程技术支持、远程办公等场景非常有用。但是MacBook电脑的macOS无法使用Xshell。 在Mac上远程连接到Windows服…

昇思25天学习打卡营第18天 | 基于MindSpore的GPT2文本摘要

昇思25天学习打卡营第18天 | 基于MindSpore的GPT2文本摘要 文章目录 昇思25天学习打卡营第18天 | 基于MindSpore的GPT2文本摘要数据集创建数据集数据预处理Tokenizer 模型构建构建GPT2ForSummarization模型动态学习率 模型训练模型推理总结打卡 数据集 实验使用nlpcc2017摘要数…

详解MLOps,从Jupyter开发到生产部署

大家好&#xff0c;Jupyter notebook 是机器学习的便捷工具&#xff0c;但在应用部署方面存在局限。为了提升其可扩展性和稳定性&#xff0c;需结合DevOps和MLOps技术。通过自动化的持续集成和持续交付流程&#xff0c;可将AI应用高效部署至HuggingFace平台。 本文将介绍MLOps…

网安播报|Python 的 GitHub 核心资源库 token 意外曝光,风险巨大

1、Python 的 GitHub 核心资源库 token 意外曝光&#xff0c;风险巨大 网络安全专家发现了意外泄露的 GitHub token&#xff0c;能以最高权限访问 Python 语言、Python 软件包索引&#xff08;PyPI&#xff09;和 Python 软件基金会&#xff08;PSF&#xff09;存储库。如果该 …

如何确保微型导轨电能表的精准计量?

微型导轨电能表是一种小型化的电表&#xff0c;通常用于精密仪器和设备中。采用模数化设计&#xff0c;精确度高&#xff0c;具有体积小&#xff0c;易安装&#xff0c;易组装等优点。易于实现终端照明电能计量&#xff0c;便于照明系统加装电度表的改造。 对于用户来说&#x…

2024北京国际智能工厂及自动化展览会亮点前瞻

随着“工业创新&#xff0c;智造未来”的浪潮席卷而来&#xff0c;2024年度北京国际智能工厂及自动化与工业装配展览会定于8月1日至3日在中国国际展览中心&#xff08;顺义新馆&#xff09;盛大开幕。本次展会汇聚了智能制造与自动化技术的最新成果&#xff0c;通过三展联动的创…

ozon计算器5.0版本,ozon计算器5.0定价产品价格

在跨境电商的浩瀚星海中&#xff0c;俄罗斯Ozon电商平台以其庞大的市场规模和快速增长的势头&#xff0c;成为了众多卖家竞相布局的蓝海。然而&#xff0c;在这片充满机遇的土地上&#xff0c;如何精准定价&#xff0c;确保利润最大化&#xff0c;同时又能吸引消费者&#xff0…