// 泛型:编译期确定类型func Sum[T int|float64](s []T) T {var res T
for_, v :=range s {
res += v
}return res
}// Interface:运行期确定类型type Formatter interface{Format()string}funcPrint(f Formatter){
fmt.Println(f.Format())// 运行时确定具体类型}
四、并发编程
1. 奇偶有序打印(Channel实现)
package main
import"fmt"funcmain(){
max :=10
odd, even :=make(chanstruct{}),make(chanstruct{})// 奇数协程gofunc(){for i :=1; i <= max; i +=2{<-odd
fmt.Println(i)
even <-struct{}{}}}()// 偶数协程gofunc(){for i :=2; i <= max; i +=2{<-even
fmt.Println(i)if i == max {close(odd)return}
odd <-struct{}{}}}()
odd <-struct{}{}// 启动流程<-even // 阻塞等待}
2. 高并发模拟方案
方案
适用场景
核心工具
原生协程
低并发验证
sync.WaitGroup
协程池
高并发(10万+)
ants库
工具压测
HTTP接口
go-wrk/hey
协程池示例
package main
import("fmt""sync""time""github.com/panjf2000/ants/v2")funcmain(){
pool,_:= ants.NewPool(1000)// 最大并发1000defer pool.Release()var wg sync.WaitGroup
wg.Add(10000)
start := time.Now()for i :=0; i <10000; i++{_= pool.Submit(func(){defer wg.Done()
time.Sleep(100* time.Millisecond)})}
wg.Wait()
fmt.Printf("耗时:%v\n", time.Since(start))}