GoLang简介

Go语言的产生背景

最近十年来,C/C++在计算领域没有很好得到发展,并没有新的系统编程语言出现。对开发程度和系统效率在很多情况下不能兼得。要么执行效率高,但低效的开发和编译,如C++;要么执行低效,但拥有有效的编译,如.NET、Java ;所以需要一种拥有较高效的执行速度、编译速度和开发速度的编程语言,Go就横空出世了。

Go语言的最大优势就是执行速度和开发效率都很出色。而且从语言级别上支持并发。执行速度快是因为Go是编译型的静态语言,它在执行速度上比解释型语言具有先天优势,生产效率高是塞学Go的语法和结构简明,易学易用。

Go语言的核心特性

Go语言之所以厉害,是因为它在服务端的开发中,总能抓住程序员的痛点,以最直接、简单、高效、稳定的方式来解决问题,Go代码编译成机器码不仅非常迅速,还具有非常方便的垃圾收集机制和强大的运行时反射机制。 它是一个快速的、静态类型的编译型语言。

Go语言具有很强的表达能力,它简洁、清晰而高效。

(1)并发编程

  • Go语言在并发编程方面比绝大多数语言要简洁不少,这一点是其最大亮点之一,也是其在未来进入高并发高性能场景的重要筹码。
  • goLang的并发执行单元是一种称为goroutine的协程。协程又称微线程,比线程更轻量、开销更小,性能更高。操作起来非常简单。
  • 语言级别提供关键字go用于启动协程,并且在同一台机器上回以启动成千上万个协程。协程间一般曲应用程序显式实现调度,上下文切换无需下到内核层,高效不少。协程间的通信靠独有的channel机制实现。

在这里插入图片描述

(2)内存回收(GC)

  • 内存自动回收,再也不需要开发人员管理内存
  • 开发人员专注业务实现,降低了心智负担
  • 只需要new分配内存,不需要释放

GC过程:先stop the world,扫描所有对象判活,把可回收对象在一段bitmap区中标记下来,接着立即start the world,恢复服务,同时起一个专门gorountine,回收内存到空闲list中以备复用,不物理释放。物理释放由专门线程定期来执行。

GC瓶颈在于每次都要扫描所有对象来判活,待收集的对象数昌越多,速度越慢。

(3)内存分配

  • 先分配一块大内存区域
  • 大内存被切分成各个大小等级的块,放入不同的空闲list中
  • 对象分配空间时从空闲list中取出大小合适的内存块
  • 内存回收时,会把不用的内存重放回空闲list
  • 空闲内存会按照一定策略合并,以减少碎片

(4)编译

目前Golang具有两种编译器

  • 一种是建立在GCC基础上的Gccgo
  • 另外一种事分别针对64位x64位和32位x86计算机的一套编译器(6G和8G)

编译会涉及到两个问题,编译速度依赖管理

依赖管理方面,由于Go语言绝大多数第三方开源库都在github上,在代码的import中加上对应的github路径就可以使用了。库会默认下载到工程的pkg目录下。另外,编译时会默认检查代码中所有实体的使用情况。凡是没有使用到的package或者变量,都会编译不通过。

(5)网络编程

  • socket用net.Dial(基于tcp/udp,封装了传统的connect、listen、accept等接口)
  • http用http.Get/Post()
  • rpc用client.call(‘class_name.method_name’, args, &reply)

(6)函数多返回值

  • 允许函数返回多个值,在某些场景下,可以有效的简化编程。
  • Go语言推荐的编程风格,是函数返回的最后一个参数为error类型(只要逻辑体中可能出现异常),这样,在语言级别支持多返回值,就很有必要了

(7)语言交互性

  • 语言交互性指的是本语言是否能和其他语言交互,比如可以调用其他语言编译的库。
  • Go可以和c程序交互。

Cgo允许开发者混合编写C语言代码,然后Cgo工具可以将这些混合的C代码提取并生成对于C功能的调用包装代码。

(8)异常处理

3个重要关键字defer、panic、recover

  • defer是函数结束后执行,呈先进后出;
  • panic是程序出现无法修复的错误时使用,但会让defer执行完;
  • recover会修复错误,不至于程序终止。当不确定函数不会出错时使用defer+recover。

(9)其他

  • 类型推导:定义变量时,var abc =10; 会被自动推导为 int 类型
  • 接口interface :无需显示继承,推荐每个接口只有一两个方法
  • defer机制:可以通过该关键字指定需要延迟执行的逻辑体
  • “包”的概念:提高代码的可重复用性
  • 交叉编译:比如你可以在运行Linux系统的计算机上,开发运行windows下运行的应用程序

Go语言的特色和优势

特色:

  • 高效的并发编程
  • 内存回收(GC)
  • 编译速度快
  • 函数多返回值
  • 语言交互性
  • 没有异常处理(Error is value)

优势:

  • 学习曲线容易
  • 效率:快速的编译时间,开发效率和运行效率高
  • 并行和异步编程几乎没有痛点
  • 自由高效:组合的思想、无侵入式的接口;强大的标准库;部署方便:二进制文件,Copy部署;稳定性。

为什么选择Go语言?

  • 执行性能
  • 开发效率
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值