By Tag: golang
golang 介绍
Go 语言是最近几年成长起来的语言。具有并发编程设计优势,不仅在云开发上有着很重要地位,还在云原生生态里占有重要地位。 Go 语法简单,容易上手,同时社区生态也比较活跃,是一门值得学习的后端语言。有一些成熟的后端框架;go 拥有容易开发,更加简洁,所以把 go 作为高级语言入门也是非常不错的。目前在市场上,主要是服务端开发、中间件、游戏,区块链,云原生等方向上发展。 golang(go)是一种过程编程语言,可用于快速机器代码编译。它是一种静态类型的编译语言。它提供了并发机制,可以轻松开发多核和联网的机器级程序。它是快速,动态类型和解释语言;它提供对接口和类型嵌入的支持。 golang的特点 语法简洁 Go语言简单易学,学习曲线平缓,Go 语言被称为“互联网时代的C语言”。Go语言的风格类似于C语言。其语法在C语言的基础上进行了大幅的简化 代码风格统一 Go语言提供了一套格式化工具——gofmt,Go 团队构建了一个名为 gopls 的服务,它实现了语言服务器协议LSP,这样就保证了不同开发者提交的代码都是统一的格式。 执行性能好 Go语言是一门编译型的语言,我们编写好的代码直接编译成服务器可以执行的二进制可执行文件。 开发效率高 Go语言虽然是一门编译型的语言,但是它内置了垃圾回收机制,降低了开发者的心智负担,使其拥有像Python、PHP等解释性语言的一样的开发效率。真正实现了开发效率和执行效率的完美结合。 天生支持并发 Go于2009年发布,当时多核处理器已经上市。Go语言在多核并发上拥有原生的设计优势,Go语言从底层原生支持并发,无须第三方库、开发者的编程技巧和开发经验。 golang的优势 学习曲线容易 Go语言语法简单,类C语法。直来直去的,学习曲线很低,上手非常快、高性能的应用。在国内大家都追求快。 效率:快速的编译时间,开发效率和运行效率高 自由高效:组合的思想、无侵入式的接口 Go语言可以说是开发效率和运行效率二者的完美融合,天生的并发编程支持。Go语言支持当前所有的编程范式,包括过程式编程、面向对象编程、面向接口编程、函数式编程。程序员们可以各取所需、自由组合、想怎么玩就怎么玩。 强大的标准库 Go内置了大量的库,特别是网络库非常强大。内置强大的工具,Go语言里面内置了很多工具链,最好的应该是gofmt工具,自动化格式化代码,能够让团队review变得如此的简单,代码格式一模一样,想不一样都很困难。 部署方便:二进制文件,部署简单 简单的并发 并行和异步编程几乎无痛点。Go 语言的 Goroutine 和 Channel 这两个简直就是并发和异步编程的神器。 Go 是一种非常高效的语言,高度支持并发性。Go是为大数据. 微服务. 并发而生的一种编程语言。 Go 作为一门语言致力于使事情简单化。它并未引入很多新概念,而是聚焦于打造一门简单的语言,它使用起来异常快速并且简单。其唯一的创新之处是 goroutines 和通道。Goroutines 是 Go 面向线程的轻量级方法,而通道是 goroutines 之间通信的优先方式。 创建 Goroutines 的成本很低,只需几千个字节的额外内存,正由于此,才使得同时运行数百个甚至数千个 goroutines 成为可能。可以借助通道实现 goroutines 之间的通信。Goroutines 以及基于通道的并发性方法使其非常容易使用所有可用的 CPU 内核,并处理并发的 IO。相较于 Python/Java,在一个 goroutine 上运行一个函数需要最小的代码。 稳定性 Go拥有强大的编译检查、严格的编码规范和完整的软件生命周期工具,具有很强的稳定性,稳定压倒一切。那么为什么Go相比于其他程序会更稳定呢?这是因为Go提供了软件生命周期(开发、测试、部署、维护等等)的各个环节的工具,如go tool、gofmt、go test。 跨平台编译 如果你写的Go代码不包含cgo,那么就可以做到window系统编译linux的应用,如何做到的呢?Go引用了plan9的代码,这就是不依赖系统的信息。 Go适合用来做什么 服务器编程,用Go来做很合适,例如处理日志、数据打包、虚拟机处理等。 分布式系统,数据库代理器,网关,tidb,cockroach 等 网络编程,这一块目前应用最广,包括Web应用、API应用 内存数据库,前一段时间google开发的groupcache,couchbase的部分组建 云原生,很多云原生在采用Go开发,CloudFoundy,k8s,docker ...。 区块链项目,以太坊,hyperledger 等 那些公司在使用呢 国外公司,如Google、Docker、Apple、Cloud Foundry、CloudFlare、Couchbase、CoreOS、、AWS等公司; 国内企业:如阿里云、百度、腾讯、小米、七牛、PingCAP、华为、金山 等公司。 环境准备 官网提供了各种环境的安装包,建议安装最新的稳定版,go 安装的时候会帮我们设置环境变量,go 有两个比较迷惑的环境变量 GOPATHGOROOT 前者是我们的项目存放的路径,后者是 go 安装路径。在 go mod 没有应用的版本,go 项目只能存在GOPATH 路径,后来修复了这个槽点,目前GOPATH 主要用于存放...
golang log 日志
日志 前言 日志服务是应用程序里不可缺少的一个模块, 在golang里也有不少比较优秀的日志服务框架,比如很多项目都是用的Zap,就是比较常用的golang的日志框架,己的项目里都是使用那个自己封装的log4go的日志包, 注意这里并没有从框架的模式上去进行实现, 所以我这里也称之为一个简洁的golang的日志包。 为什么需要日志 调试开发 程序运行日志 用户行为日志 不同的目的决定了日志输出的格式、频率。作为开发人员,调试开发阶段打印日志目的是输出尽可能全的信息(如上下文,变量值...),辅助开发测试,因此日志格式要易读,打印频率要高。而在程序运行时,日志格式倾向于结构化(便于分析与搜索),而且为了性能和聚焦于关键信息(如error ),打印频率更偏低。 以下介绍几种日志 log4go zap logrus ...
Go 项目目录
Go 项目目录 一个小型项目用不到很多目录。对于小型项目,可以考虑先包含 cmd、pkg、internal 3 个目录,其他目录后面按需创建 项目目录样例 . ├── api │ └── api.go ├── changelog.md ├── cmd │ └── main.go ├── configs │ └── config.toml ├── internal │ ├── config │ ├── dao │ │ └── dao.go │ ├── data │ │ └── mysql.go │ └── service │ └── service.go ├── LICENSE ├── Makefile ├── pkg │ └── log │ └── log.go ├── README.md |____go.mod |____go.sum └── server ├── grpc.go └── http.go 项目目录说明 根据需要可灵活调整 api 目录中存放的是当前项目对外提供的各种不同类型的...