golang
Last updated
Was this helpful?
Last updated
Was this helpful?
Golang 由 Google 公司出品,由 UNIX 作者、C 语言作者、谷歌 V8 引擎作者等大牛携手打造,影响力和生命力都有保障,是名副其实的“牛二代”。
Golang 的明星项目 Docker、Kubernetes 奠定了 Golang 在云平台开发领域的地位。
Golang 是协程并发模型,语言层面支持并发,天生的高并发能力是Golang最大的特色。而且使用 Goroutine 不需要到操作系统内核切换,占用内存和调度开销小。
Golang 专门针对多核 CPU 进行了优化, 能够充分利用多核 CPU 硬件的优势。
Golang 提供了线程安全的channel
作为协程之间的消息通信方式。
提供关键字defer
,延迟执行,适合善后逻辑处理,比如可以尽早避免可能出现的资源泄漏问题。在很大程度上简化了编程,并且在语言描述上显得更为自然,增强了代码的可读性。
Go 语言不是严格的面向对象编程(OOP),它采用的是面向接口编程(IOP),是相对于 OOP 更先进的编程模式。
Golang 可直接编译成机器码,不依赖其他库,部署非常简单,而且还支持交叉编译。
Golang 工具链完善,包括编码风格、静态分析、效率检查、依赖管理这些工具都内置在语言中。
操作系统层面的线程就是所谓的「内核态线程」,「用户态线程」则多种多样,只要能满足在同一个内核线程上执行多个任务的都算,例如 coroutine、golang 的 goroutine。
协程占用内存空间更小,协程切换相比线程切换做的事情也更少,协程的切换只在用户态就可以完成,线程切换需要借助内核完成,用户态和内核态的切换是最主要的开销,线程切换除了和协程相同的基本的 CPU 上下文,还有线程的寄存器。
如果用的 Goland,在创建项目时把 Environment 填好:https://mirrors.aliyun.com/goproxy/,direct
命令行设置方式:export GOPROXY=https://mirrors.aliyun.com/goproxy/,direct
总是要求输入 git 密码问题。go mod 默认走 https 拉取代码,就会要求输入密码
把指定域名下的代码库修改为走 ssh 方式拉代码,执行git config --global --edit
修改配置:
场景:当我们开发A服务时,发现内网的B依赖包有bug,需要修改B的代码,然后从A调用来调试。
说明:go.mod 的 require 写的都是明确的版本,如果只想修改 require,就需要发布B依赖包的新版本,然后更新A服务 go.mod 的 require。有一种更方便的调试代码的方式,即使用 replace 将远程包替换为本地包。
go mod 一般是指定 git tag 来引用指定的版本,也可以指定引用 git branch(一般用于验证功能,验证通过之后再打上 git tag)。
把 go mod require 中引用的 tag 版本改为分支名即可,此时会报错,然后直接 go run,会自动把分支名称替换为sha码,后缀为 git commit id。
,设置全局环境变量如下格式: