(一)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
在这段代码中,实现了并发计算的功能。主要内容如下:
定义函数 sum
sum
接受一个整数切片 values
和一个整数类型的通道 resultChan
。values
,计算总和,并将结果发送到通道 resultChan
中。函数 ParacalcCase
values
包含了从1到10的整数。resultChan
。resultChan
中。并发编程
通道(Channel)
切片(Slice)
函数
并发编程
通道通信
(二)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)功能,演示了如何获取结构体实例的字段值并打印出字段的索引、名称、类型和值。反射是一种强大的工具,可以在运行时检查变量、变量的类型,并操作值和类型。如果有任何问题或需要进一步的解释,请随时告诉我。
结构体 (Struct):定义结构体来表示具有一组相关字段的自定义数据类型。
方法 (Method):在结构体上定义方法,使得结构体实例能够执行特定的行为。
反射 (Reflection):通过 reflect
包中的函数实现反射,可以在运行时检查类型、值和调用对应的方法等功能。
reflect.ValueOf:返回一个 reflect.Value
,该值包含传入参数的值。可以通过 .Elem()
方法获取实际的值。
reflect.Type:通过 reflect.Value
的 Type()
方法获取值对应的类型信息。
reflect.Field:使用 Field()
方法获取结构体的字段值,并对其进行操作。
fmt.Printf:格式化输出,用于输出格式化的字符串,包括参数的索引、字段名称、类型和值等。
这些知识点和语法在代码中被使用,结合起来实现了对结构体实例的反射操作,获取并输出字段的信息。反射在编程中是一种高级的技术,允许程序在运行时动态地检查类型信息、获取字段值等,对于一些元编程和动态特性的场景非常有用。