总结:Go笔记 - 高阶

本文详细介绍了Go语言中的make函数及其与new的区别,重点解析了make在初始化slice、map和channel时的用法。同时,文章探讨了channel在goroutines间通信的关键作用,展示了如何创建和使用channel进行数据交换的示例代码。通过对make和channel的深入理解,有助于提升Go语言编程能力。
摘要由CSDN通过智能技术生成

 一、make

make函数是Go的内置函数,它的作用是为slice、map或chan初始化并返回引用。

make仅仅用于创建slice、map和channel,并返回它们的实例。

主要看make和new的区别:

func new(Type) *Type
func make(t Type, size ...IntegerType) Type

1、返回值

从定义中可以看出,new返回的是指向Type的指针。 make直接返回的是Type类型值。

2、参数

new只有一个Type参数,Type可以是任意类型数据。 make可以有多个参数,其中第一个参数与new的参数相同,但是只能是slice,map,或者chan中的一种。对于不同类型,size参数说明如下:

  • 对于slice,第一个size表示长度,第二个size表示容量,且容量不能小于长度。如果省略第二个size,默认容量等于长度。
  • 对于map,会根据size大小分配资源,以足够存储size个元素。如果省略size,会默认分配一个小的起始size。
  • 对于chan,size表示缓冲区容量。如果省略size,channel为无缓冲channel。

二、channel

参考:Go基础系列:channel入门

channel用于goroutines之间的通信,让它们之间可以进行数据交换。像管道一样,一个goroutine_A向channel_A中放数据,另一个goroutine_B从channel_A取数据

channel是指针类型的数据类型,通过make来分配内存。例如:

ch := make(chan int)

这表示创建一个channel,这个channel中只能保存int类型的数据。也就是说一端只能向此channel中放进int类型的值,另一端只能从此channel中读出int类型的值。

向ch这个channel放数据的操作形式为:

ch <- VALUE

从ch这个channel读数据的操作形式为:


<-ch             // 从ch中读取一个值
val = <-ch
val := <-ch      // 从ch中读取一个值并保存到val变量中
val,ok = <-ch    // 从ch读取一个值,判断是否读取成功,如果成功则保存到val变量中

其实很简单,当ch出现在<-的左边表示send,当ch出现在<-的右边表示recv。

案例:

package main

import (
	"fmt"
	"time"
)

func main() {
	ch := make(chan string)
	go sender(ch)         // sender goroutine
	go recver(ch)         // recver goroutine
	time.Sleep(1e9)
}

func sender(ch chan string) {
	ch <- "malongshuai"
	ch <- "gaoxiaofang"
	ch <- "wugui"
	ch <- "tuner"
}

func recver(ch chan string) {
	var recv string
	for {
		recv = <-ch
		fmt.Println(recv)
	}
}

输出结果:

malongshuai
gaoxiaofang
wugui
tuner

三、

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值