【后端开发】字节跳动青训营之Go语言进阶与依赖管理

devtools/2025/1/24 11:12:22/

Go语言进阶与依赖管理

  • 一、Go语言进阶
    • 1.1 并发与并行
    • 1.2 协程与线程
    • 1.3 通道
      • 1.3.1 生产消费模型
    • 1.4 并发安全
  • 二、依赖管理

一、Go语言进阶

Go语言一次可以创建上万个协程。

1.1 并发与并行

  1. 并发:多程序程序在单核CPU上运行。
  2. 并行:多程序程序在多核CPU上运行。

1.2 协程与线程

  1. 协程:用户态,轻量级线程,栈KB级别
  2. 线程:内核态,线程跑多个协程,栈MB级别

创建协程(实现快速加法):

func main() {for i:=0; i<10; i++ {go Add(i, i)}
}

注:提倡通过通信共享内存,而不是通过共享内存而实现通信。

1.3 通道

使用make语言创建通道。

1.3.1 生产消费模型

package mainimport ("fmt""time"
)func producer(ch chan<- int) {for i := 1; i <= 10; i++ {ch <- ifmt.Println("生产者生产了", i)time.Sleep(time.Second)}close(ch)
}func consumer(ch <-chan int) {for num := range ch {fmt.Println("消费者消费了", num)time.Sleep(2 * time.Second)}
}func main() {// 创建一个无缓冲的通道ch := make(chan int)// 启动生产者和消费者go producer(ch)go consumer(ch)// 等待程序执行完毕time.Sleep(30 * time.Second)
}

1.4 并发安全

当多个协程同时对一个变量进行操作的时候,可能会出现并发安全Lock问题,就是可能变量最后的值并不一定是希望的值。

package mainimport ("fmt""time"
)func producer(ch chan<- int) {for i := 1; i <= 10; i++ {ch <- ifmt.Println("生产者生产了", i)time.Sleep(time.Second)}close(ch)
}func consumer(ch <-chan int) {for num := range ch {fmt.Println("消费者消费了", num)time.Sleep(2 * time.Second)}
}func main() {// 创建一个无缓冲的通道ch := make(chan int)// 启动生产者和消费者go producer(ch)go consumer(ch)// 等待程序执行完毕time.Sleep(30 * time.Second)
}

在协程对变量进行操作之前应该首先获得锁。
注!在现实开发中应该尽量避免对共享内存的并发操作。

二、依赖管理

在开发大型Go项目的时候,应该将精力放在逻辑上,而不是代码的重复开发,因此就出现了各种各样的包用来实现项目的快速搭建。

  • bin:项目编译的二进制文件
  • pkg:项目编译的中间产物,用于加速编译
  • src:项目源码

注!通过go get/go mod命令可以获取最先的项目源码。

Go在依赖配置的时候会选择一个最低兼容版本。


http://www.ppmy.cn/devtools/153111.html

相关文章

k8s优雅重启

理论上处于terminating状态的pod&#xff0c;k8s 就会把它从service中移除了&#xff0c;只用配置一个优雅停机时长就行了。kubectl get endpoints 验证 因此&#xff0c;优雅重新的核心问题&#xff0c;是怎么让空闲长连接关闭&#xff0c;再等待处理中的请求执行完。 一些底…

MySQL训练营-慢查询诊断问题

慢查询相关参数和建议配置 slow_query_log long_query_time 日志开关&#xff0c;是否记慢查询日志以及超过多长时间判定为慢查询。 查看参数设置&#xff1a; SHOW VARIABLES LIKE ‘slow_query_log’;SHOW VARIABLES LIKE ‘long_query_time’; 实践建议&#xff1a; …

AIGC的企业级解决方案架构及成本效益分析

AIGC的企业级解决方案架构及成本效益分析 一,企业级解决方案架构 AIGC(人工智能生成内容)的企业级解决方案架构是一个多层次、多维度的复杂系统,旨在帮助企业实现智能化转型和业务创新。以下是总结的企业级AIGC解决方案架构的主要组成部分: 1. 技术架构 企业级AIGC解决方…

OpenCV相机标定与3D重建(63)校正图像的畸变函数undistort()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 转换图像以补偿镜头畸变。 该函数通过变换图像来补偿径向和切向镜头畸变。 此函数仅仅是 initUndistortRectifyMap&#xff08;使用单位矩阵 R…

【详解】神经网络的发展历程

在人工智能与机器学习的漫长演进史中&#xff0c;神经网络一直扮演着引领创新的关键角色。从最早的生物学启发到当代“深度学习”浪潮&#xff0c;神经网络的发展历程波澜壮阔。随着计算机硬件水平的提升与海量数据的激增&#xff0c;神经网络不仅在学术界受到高度关注&#xf…

贪心算法(题1)区间选点

输出 2 #include <iostream> #include<algorithm>using namespace std;const int N 100010 ;int n; struct Range {int l,r;bool operator <(const Range &W)const{return r<W.r;} }range[N];int main() {scanf("%d",&n);for(int i0;i&l…

GStreamer 简明教程(九):插件开发,以一个音频特效插件为例

系列文章目录 GStreamer 简明教程&#xff08;一&#xff09;&#xff1a;环境搭建&#xff0c;运行 Basic Tutorial 1 Hello world! GStreamer 简明教程&#xff08;二&#xff09;&#xff1a;基本概念介绍&#xff0c;Element 和 Pipeline GStreamer 简明教程&#xff08;三…

09 以太坊技术介绍

以太坊技术架构 架构概述 以太坊属于公链&#xff0c;所有节点都具有相同的功能。 以太坊技术架构自上而下依次为应用层、合约层、通信层、共识层、网络层、数据层、存储层。 应用层 应用层主要对应Dapp应用模块&#xff0c;其中包含多种区块链应用场景典型案例。 合约层 …