golang 介绍总结

go语言特点:

  • 语法简单:语法规则严谨,没有歧义。任何人写出的代码都基本一致。放弃部分“灵活”和“自由”,换来更好的维护性。
  • 并发模型:Goroutine使用类协程的方式来处理并发单元,又在运行时层面做了更深度的优化处理。语法上的并发编程变得极为容易,无须处理回调,无须关注行绪切换,只需一个关键字go,简单自然。
  • 静态链接:将运行时、依赖库直接打包到可执行文件内部,部署是只需要一个编译后得可执行文件,简化了部署和发布的操作。对编写系统软件有很大的好处。
  • 工具链:无论是编译、格式化、错误检查、帮助文档、还是第三方包下载、更新都有对应的工具。内置完整测试框架: 单元测试、性能测试、代码覆盖率、数据竞争、性能调优的pprof.
  • 内存分配:Go使用了tcmalloc处理高并发下的内存分配和管理。
  • 垃圾回收:三色标记法。

go语言哲学:

  • 面向接口编程
  • 使用组合的编程
  • 正交性:语言设计的正交性,保证语言的稳定性和简单性
  • 少即是多:有且仅有一种方法把事情做好做对
  • 并发语言层面支持:并发更好利用多核,有更强的表现力来模拟真实世界
  • 开放性:开源,语言的实现对程序员不是个黑盒子,任何想了解语言实现的人都可以参与进来

正交的体现:

go关键字+函数 就能把启动一个goroutine。 并不需要修改函数定义
函数绑定在结构体上, 就形成了”对象的概念“
结构体实现了某个接口定义的所有方法,就实现了这个接口。并不需要一开始就声明实现哪个接口。

go应用场景和发展前景:

  • 高性能系统:Go 语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于游戏服务端的开发而言是再好不过了。

  • 服务器编程:以前你如果使用C或者C++做的那些事情,用Go来做很合适,例如处理日志、数据打包、虚拟机处理、文件系统等。

  • 分布式系统: 数据库代理器等网络编程,这一块目前应用最广,包括Web应用、API应用、下载应用。

  • 云计算:k8s docker prometheus coredns等。

go开源项目:

GO语言:https://github.com/golang/go
数据库中间件 kingshard: https://github.com/flike/kingshard
redis中间件 codis: https://github.com/CodisLabs/codis
云数据库TiDB:https://github.com/pingcap/tidb
docker: https://github.com/docker/docker-ce
web框架beego:https://beego.me/
web框架 Gin : https://github.com/gin-gonic/gin
微服务框架 go-micro:https://github.com/micro/go-micro
微服务工具集 go-kit:http://github.com/go-kit/kit
服务网格 istio: https://github.com/istio/istio
压测工具vegeta:https://github.com/tsenart/vegeta
监控系统 Prometheus:https://github.com/prometheus/prometheus
科学上网工具: https://github.com/getlantern/lantern
时序数据库influxDB: https://github.com/influxdata/influxdb
配置共享和服务发现的键值存储系统 etcd: https://github.com/etcd-io/etcd

PS:

  • 正交的定义:几何上的正交指的是两个向量垂直关系,一个向量在另一个向量方向的投影是一个点;现实中的正交是指多个因素,一个发生变化,不会影响其他的因素;在不减少表现力的情况下,正交是保持事物稳定性和简单性的最好设计;
  • go语言设计哲学: https://studygolang.com/articles/2944
  • go和java在面向对象上的理解:go 没有像 JAVA 一样,宗教式的完全面向对象设计;完全面向对象设计就是一刀切的宗教式的设计,但其并不能很好的表述这个世界,这就导致其表现力不足,最后通过设计模式和面向切面等设计技巧来弥补语言方面的缺陷;go是面向工程的实用主义者,其糅合了面向对象的设计,函数式设计和过程式设计的优点;原来通过各种设计模式的设计通过函数、接口、组合等简单方式就搞定了;go 有更多胶水的东西比如:全局变量、常量,函数,闭包等等,可以轻松的的把模块衔接和驱动起来; JAVA 就好比:手里握着是锤子,看什么都是钉子,什么都是类的对象,这个和现实世界不符,类表示单个事物还可以,一旦表示多个事物及其交互,其表现力也就会遇到各种挑战。

你可能感兴趣的:(golang)