每天5分钟,学习Go语言

1.1 用GO解决现代编程难题

Go即提供了开发速度,也提供了高性能。

  • 快速开发和性能之间的选择。
  • C/C++提供了很快的执行速度,Ruby和Python擅长快速开发。
  • Go语法简洁,只有几个关键字,便于记忆。
  • 编译器速度非常快,显著减少项目构建时间。

1.1.1 开发速度快

Go的智能编译器,简化了解决依赖的算法,最终提供了更快的编译速度。Go编译器只需要关注直接被引用的库,不像Java或C++需要遍历依赖链中所有依赖的库。

1.1.2 并发

传统的Java需要编写大量的线程同比代码来利用多核,很容易导致错误。Go语言运行时会自动在配置的一组逻辑处理器上调度执行goroutine, 每一个逻辑处理器绑定到一个操作系统线程上,执行效率更高,并发工作量显著减少。

  • goroutine: 可以和其它goroutine或主程序并行执行的函数。内存占用比线程更少。

image.png

例如:让程序的日志部分和应用程序并行执行:

func log(msg string) {
...这里是一些记录日志的代码}
// 代码里有些地方检测到了错误

go log("发生了可怕的事情")

  • 通道:几个goroutine之间安全的数据通信。 传统Java在不同步线程中没有同步保护情况下修改一个数据时总会发生灾难,需要使用复杂的锁规则。通道是一种新的模式,保证了并发修改数据的安全,即同一时刻只会有一个goroutine修改数据。

image.png

goroutine之间传输数据不需要任何的锁或同步机制。

1.1.3 Go语言的类型系统

Go使用组合设计模式,通过将一个类型嵌入两一个类型,就能复用功能。

  • Go无继承,但能最大程度复用代码。
  • 依然支持面向对象,但却避免了传统面向对象的问题。
  • Go具有独特的接口实现机制。
  1. 类型简单:不仅有int和string,还支持用户自定义类似C的结构体,而且支持为结构体添加方法。
  2. Go接口对一组行为建模。Java里面实现接口的必须满足接口内所有方法的类型约束。Go的接口一般只会描述一个单一的动作。这更有利于使用组和来复用代码。

type Reader interface {
      Read(p []byte) (n int, err error)
      }

1.1.4 内存管理

  • Go有自动的内存管理,虽然有一些额外的性能开销,但显著降低开发难度。
  • C/C++需要自己分配内存,并自己及时释放掉,容易程序崩溃和内存泄漏。

你好,Go

感受下“hello world!”

image.png

小结

  • Go 语言是现代的、快速的,ࣜ有一个ू大的标准库。
  • Go 语言内置对并发的支持。
  • Go 语言使用接口作为代码复用的基础模块。

> 欢迎关注扫码,加我VX一起学习。更有面试资料,面经分享哦!!!

参考

  • Go in Action