欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > Go语言 Go程基础

Go语言 Go程基础

2024/10/25 18:28:23 来源:https://blog.csdn.net/json_ligege/article/details/141860775  浏览:    关键词:Go语言 Go程基础

 本篇文章主要为Go语言 Go程基础内容介绍及代码示例。

目录

并发与并行

Go程介绍

简单go程示例

匿名函数写法

启动多个子go进程

总结


 

并发与并行

并发:电脑同时听歌,看小说,看电影。cpu根据时间片进行划分,交替执行这个三个程序。

我们人可以感觉是同时产生的。

并行:多个CPU(多核)同时执行

Go程介绍

c语言里面实现并发过程使用的是多线程(C++的最小资源单元),进程

go语言里面不是线程,而是go程 ==> goroutine

go程是go语言原生支持的

每一个go程占用的系统资源远远小于线程,

一个go程大约需要4K-5K的内存资源

一个程序可以启动大量的go程

线程:启动几十个

go程:可以启动成百上千个,对于实现高并发,性能非常好

只需要在目标函数前加上go即可

简单go程示例

启动一个主go程和一个子go程。

示例如下:

package mainimport ("fmt""time"
)func main() {// 启动子go程go display()// 主go程count := 1for{fmt.Println("这是主go程:", count)count++time.Sleep(1 * time.Second)}
}// 这个将用于子go程使用
func display() {count := 1for {fmt.Println(" ======> 这是子go程:", count)count++time.Sleep(1 * time.Second)}
}

运行结果:

这是主go程: 1======> 这是子go程: 1======> 这是子go程: 2
这是主go程: 2======> 这是子go程: 3
这是主go程: 3
这是主go程: 4======> 这是子go程: 4======> 这是子go程: 5
这是主go程: 5

匿名函数写法

把刚才的简单go程示例改为匿名函数写法。

示例如下:

package mainimport ("fmt""time"
)func main() {// 启动子go程go func() {count := 1for {fmt.Println(" ======> 这是子go程:", count)count++time.Sleep(1 * time.Second)}}()count := 1for {fmt.Println("这是主go程:", count)count++time.Sleep(1 * time.Second)}
}

启动多个子go进程

在原来的基础上,使用for循环,启动多个子进程。

示例如下:

package mainimport ("fmt""time"
)// 这个将用于子go程使用
func displays(num int) {count := 1for {fmt.Println(" ======> 这是子go程:", num, "当前count:", count)count++time.Sleep(1 * time.Second)}
}func main() {// 启动子go程for i := 0; i < 3; i++ {go displays(i)}count := 1for {fmt.Println("这是主go程:", count)count++time.Sleep(1 * time.Second)}
}

运行结果:

这是主go程: 1======> 这是子go程: 2 当前count: 1======> 这是子go程: 0 当前count: 1======> 这是子go程: 1 当前count: 1
这是主go程: 2======> 这是子go程: 1 当前count: 2======> 这是子go程: 2 当前count: 2======> 这是子go程: 0 当前count: 2======> 这是子go程: 0 当前count: 3======> 这是子go程: 1 当前count: 3======> 这是子go程: 2 当前count: 3
这是主go程: 3

总结

本篇文章主要为Go语言 Go程基础内容介绍及代码示例。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com