Golang的基本语法内容(二)

本文介绍了Go语言中的切片使用,包括创建和删除元素的方法;探讨了集合(Map)的初始化、插入与删除操作;讲解了Go的并发特性,强调了协程与WaitGroup在并发控制中的作用;并分享了在IDE配置中遇到的问题及解决方案,如在VSCode中设置GOPROXY以解决下载问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前想选一个好用点的ide写go,一开始在网上看到IDEA有go的插件,翻了老半天没找到,还以为是要装企业版,后来看了github的源码才发现早没更新了,无奈用vscode,结果插件装上后相关tools又下不下来(貌似与谷歌服务器有关,报错dial tcp 216.58.200.241:443: connectex: A connection attempt failed),后来添加了国内的镜像,好了。

go env -w GOPROXY=https://goproxy.cn

 注意,首先需要正确安装go本体,然后再在命令行输入。

以下为语法内容:

切片Slice

go的数组大小是不能变化的,所以引入切片,切片可以理解为就是动态数组。创建一个切片可以通过多种方法:

great := []int{1, 2, 3, 4, 5}

great := make([]int, 3, 10) //第三个参数选填,为slice的容量cap

切片可以通过函数append()增加元素,使用copy()拷贝一段切片。但是,go

中并没有定义如何删除元素,所以我们只能利用这个数据类型本身的特性来删除元素,比如如果要删除开头元素或末尾元素:

a = a[1:] // 删除开头元素

a = a[:len(a)-1]  //删除末尾元素

集合Map

集合通过键key对应数据来快速检索到数据,go的集合类似于python的字典dict,不过map只能存取相同的数据类型,所有的键值也必须为相同的数据类型。

初始化方法:

var good map[string]string
good = make(map[string]string)

插入内容:

good["我"] = "贼热爱学go"
println(good["我"])


//out :贼热爱学go

删除内容:

import (
	"fmt"
)

func main() {

	var good map[string]string
	good = make(map[string]string)
	
	good["我"] = "贼热爱学go"
	good["它"] = "是孤寡青蛙"

	delete(good, "它")

	fmt.Println(good)
}

//输出:
//map[我:贼热爱学go]

并发

众所周知,高并发是大家非常热衷的词语,go通过协程的方式实现并发,相比于多线程,协程的好处是不用进行cpu的上下文切换,相对来说节省了时间。

方便的使用协程是go的最重要特性之一,在go中,使用关键词go就能开启一个协程,但是,由于我们不好控制协程间的运行速度,如果不加以限制,很容易出现主线程跑完了,但是协程还没开始跑的情况,所以可以引入sync包的WaitGroup,用Add()、Done()和Wait()函数让协程间具有等待的功能(也可以直接在main尾加入 time.Sleep(),但这既不优雅也不稳定!)

package main

import (
	"strconv"
	"sync"
)

var wg = sync.WaitGroup{}

func main() {
	wg.Add(5)
	a := 5
	for i := 1; i <= a; i++ {
		go wuho(i)
	}
	wg.Wait()
}

func wuho(a int) {
	println(strconv.Itoa(a) + "号位置起飞飞!")
	wg.Done()

}

为了让协程间能够相互传递数据,可以通过通道channel将不同协程的数据带回主线程

使用make初始化通道:

ch := make(chan int)

通道具有方向,默认是双向的,可以通过"<-"设置channel的方向:

chan T          // 可以接收和发送类型为 T 的数据
chan<- float64  // 只可以用来发送 float64 类型的数据
<-chan int      // 只可以用来接收 int 类型的数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值