当前位置: 首页 > wzjs >正文

小程序收录wordpress主题杭州seo培训

小程序收录wordpress主题,杭州seo培训,小程序注册失败,企业网站做seo的优势Go 语言中的 make 函数详解 make 是 Go 语言中的一个​​内置函数​​,用于​​初始化切片(slice)、映射(map)和通道(channel)​​这些引用类型。这些类型必须在使用前通过 make 初始化&#x…

Go 语言中的 make 函数详解

make 是 Go 语言中的一个​​内置函数​​,用于​​初始化切片(slice)、映射(map)和通道(channel)​​这些引用类型。这些类型必须在使用前通过 make 初始化,否则它们的值会是 nil

基本语法

// 切片
make([]T, length, capacity)// 映射
make(map[K]V)// 通道
make(chan T, bufferSize)

1. 切片(Slice)初始化

创建切片:

// 创建长度为5,容量为10的int切片
slice := make([]int, 5, 10)
fmt.Printf("类型: %T, 值: %v, 长度: %d, 容量: %d\n", slice, slice, len(slice), cap(slice))
// 输出: 类型: []int, 值: [0 0 0 0 0], 长度: 5, 容量: 10// 省略容量(默认等于长度)
slice2 := make([]string, 3)
fmt.Printf("类型: %T, 值: %v, 长度: %d, 容量: %d\n", slice2, slice2, len(slice2), cap(slice2))
// 输出: 类型: []string, 值: [  ], 长度: 3, 容量: 3

2. 映射(Map)初始化

创建映射:

// 创建空映射
m := make(map[string]int)
m["age"] = 30
fmt.Println("映射:", m) // 输出: 映射: map[age:30]// 创建带初始容量的映射(优化大型映射的性能)
largeMap := make(map[int]string, 1000)

3. 通道(Channel)初始化

创建通道:

// 无缓冲通道
unbuffered := make(chan int)// 有缓冲通道(容量为3)
buffered := make(chan string, 3)

使用场景对比

a. 创建空切片 vs nil 切片

var nilSlice []int          // nil 切片(尚未分配内存)
emptySlice := make([]int, 0) // 空切片(已分配内存但无元素)fmt.Println(nilSlice == nil)   // 输出: true
fmt.Println(emptySlice == nil) // 输出: false

b. 为映射预分配空间(性能优化)

// 创建已知容量的映射(减少扩容次数)
scores := make(map[string]int, 100)// 添加元素...
for i := 0; i < 100; i++ {key := fmt.Sprintf("player%d", i)scores[key] = i
}

常见错误与正确用法

错误示例:

var ch chan int
ch <- 42 // panic: 向 nil 通道发送数据(需要使用 make 初始化)

正确示例:

ch := make(chan int, 1)
ch <- 42 // 正确

new 函数的区别

特性makenew
用途创建并初始化 slice、map、channel分配内存,返回指向类型零值的指针
返回类型实际类型(如 slice、map、channel)指向类型的指针
初始化执行初始化(零值填充或分配空间)只分配内存(返回指向零值的指针)
适用类型引用类型(slice、map、channel)任何类型
参数根据类型需要长度/容量参数只需类型
// new 示例:创建指向 int 的指针
ptr := new(int)
fmt.Println(*ptr) // 0// new 用于结构体
type Person struct{Name string}
p := new(Person)
fmt.Println(p.Name) // ""

实际应用案例

1. 高效的切片处理

// 预分配切片空间减少扩容
func processItems(items []string) {// 创建已知容量的切片results := make([]string, 0, len(items))for _, item := range items {// 处理逻辑...results = append(results, processedItem)}return results
}

2. 创建并发安全的缓冲通道

func workerPool() {jobs := make(chan int, 100)  // 任务通道results := make(chan int, 100) // 结果通道// 启动工作协程for w := 1; w <= 5; w++ {go worker(jobs, results)}// 发送任务...
}

3. 使用带缓冲的通道限制并发数

// 限制最多3个并发操作
sem := make(chan struct{}, 3)for i := 0; i < 10; i++ {sem <- struct{}{} // 获取令牌go func(i int) {doWork(i)    // 执行工作<-sem        // 释放令牌}(i)
}

总结

Go 的 make 函数是处理引用类型(slice、map、channel)的关键工具:

  1. ​必需使用​​:引用类型必须用 make 初始化后才能安全使用
  2. ​性能优化​​:预分配空间可以提升大型数据结构的性能
  3. ​并发基础​​:通道的缓冲设置是 Go 并发编程的核心
  4. ​类型安全​​:编译器会确保类型和参数正确性

理解并熟练使用 make 是掌握 Go 的核心能力之一,特别是在处理动态数据结构和并发编程时尤为重要。

http://www.dtcms.com/wzjs/437200.html

相关文章:

  • 湖南智能网站建设报价英文外链平台
  • 做ptt有什么好的模板网站3d建模培训学校哪家好
  • 网页制作与网站建设实战大全 光盘接外包项目的网站
  • 郑州网站定制app推广一手单
  • 网站 国外服务器b2b采购平台
  • 代办网站企业备案广告投放平台排名
  • 深圳网站建设开发今日时政新闻
  • 遵义住建局查询网站在百度怎么创建自己的网站
  • 网站域名不备案seo排名赚app靠谱吗
  • 网站建设 月嫂 模板微商软文范例
  • 胶南市城乡建设局网站今日国内新闻头条大事
  • 大连网站建设 选领超科技百度关键词首页排名服务
  • 网站域名跳转代码全球网络营销公司排名
  • win7如何建设免费网站东莞营销网站建设
  • 上海门户网站建设方案刷僵尸粉网站推广
  • 中小企业建网站注意苏州seo招聘
  • 国外做化工产品的网站杭州seo推广排名稳定
  • 承德很好的网络建站电商seo是指
  • wordpress自主注册seo推广培训
  • 免费网站排名优化网站关键词优化排名怎么做
  • 服务好的做培训网站pageadmin建站系统
  • 网站制作建设哪家公司好品牌推广策略包括哪些内容
  • 专业的外贸网站建设三只松鼠搜索引擎推广
  • 企业网站备案收费百度竞价推广效果好吗
  • 网站开发的一般流程站长seo
  • 天水建设局网站渣土治理关键词优化seo外包
  • Python用数据库做网站正规电商平台有哪些
  • 章丘营销型网站设计公司网络推广方式有哪几种
  • 哪个网站能在百度做推广爱站关键词搜索
  • 怎么建设影视网站自媒体人15种赚钱方法