[喵咪Golang(1)]Go语言开篇

[喵咪Golang(1)]Go语言开篇

前言

哈喽大家好啊!喵咪我今天又来开坑了,最近学习和使用了go语言了一段时间,也在组合一些好的组件编写phalgo开发框架.在想是不是可以来写一个套关于go语言的文章和一些好的组件的介绍使用,虽然自己也是半桶水但是我相信在编写的过程中能给自己很多收获,最好也能帮助大家了解和熟悉golang这门语言,话不多说那么就开始今天的go语言之旅吧~

附上:

喵了个咪的博客:w-blog.cn

phalgo地址:github.com/wenzhenxi/phalgo

Go语言圣经:docs.ruanjiadeng.com/gopl-zh

1. go语言的诞生

如果是计算机专业出生的童鞋都听过贝尔实验室一词,这就是诞生著名的UNIX系统和C语言的地方,经过了40年在同一个地方Google工作的Ken Thompson和Rob Pike还有Robert Griesemer一同设计了Go语言,目的是为了解决在21世纪多核和网络化环境下越来越复杂的编程问题.

Go语言是从Ken Thompson发明的B语言、Dennis M. Ritchie发明的C语言逐步演化过来的,是C语言家族的成员,因此很多人将Go语言称为21世纪的C语言。纵观这几年来的发展趋势,Go语言已经成为云计算、云存储时代最重要的基础编程语言。

就笔者玩了一段时间的感受,go语言是C语言的衍生有C语言的特色,毕竟被称为21世纪的C语言,并且go也从一些现代语言中吸收了很多优秀的地方,比如C语言不具备的GC机制,接口机制,还有很多新的特性,而且在编译时可以大幅缩短时间,相对于C++的十分之一

下图展示了有哪些早期的编程语言对Go语言的设计产生了重要影响。

图片引用:Go语言圣经

go语言至今版本历史:

2007年,谷歌工程师Rob Pike, Ken Thompson和Robert Griesemer开始设计一门全新的语言,这是Go语言的最初原型。
2009年11月10日,Go语言以开放源代码的方式向全球发布。
2011年3月16日,Go语言的第一个稳定(stable)版本r56发布。
2012年3月28日,Go语言的第一个正式版本Go1发布。
2013年4月04日,Go语言的第一个Go 1.1beta1测试版发布。
2013年4月08日,Go语言的第二个Go 1.1beta2测试版发布。
2013年5月02日,Go语言Go 1.1RC1版发布。
2013年5月07日,Go语言Go 1.1RC2版发布。
2013年5月09日,Go语言Go 1.1RC3版发布。
2013年5月13日,Go语言Go 1.1正式版发布。
2013年9月20日,Go语言Go 1.2RC1版发布。
2014年6月19日,Go语言Go 1.3版发布。
2015年8月20日,Go语言Go 1.5版发布,本次更新中移除了”最后残余的C代码”。
2016年1月07日,Go语言Go 1.6版发布, Go1.6开始全面支持 HTTP/2 大幅改善GC性能

2.go语言特性

go里面有很多有意思的特性,笔者根据自己使用和收集了以下几点:

  1. Go 语言是一门类型安全和内存安全的编程语言。虽然 Go 语言中仍有指针的存在,但并不允许进行指针运算
  2. Go 语言语法结构与动态语言的易开发性进行有机结合,开发效率和性能都比较平衡
  3. Go 语言的对于网络通信、并发和并行编程的极佳支持,从而更好地利用大量的分布式和多核的计算机
  4. Go 语言编译速度非常快一般只需要几百毫秒
  5. Go 语言自带GC垃圾回收机制来解决内存问题
  6. Go 语言语法干净、整齐和简洁,关键字的数量仅仅25个
  7. Go 语言没有类和继承的概念,所以它和 Java 或 C++ 看起来并不相同。但是它通过接口(interface)的概念来实现多态性。
  8. Go 语言支持交叉编译,比如说你可以在运行 Linux 系统的计算机上开发运行下 Windows 下运行的应用程序。

更具以上特性,相信大家对go的也有了一个抽象的定位了

3.go语言著名项目

Docker

到现在,Docker几乎是Go再难找到也难以复制的一个成功案例。Docker项目在2014年9月份就拿到了C轮4000万美元融资,版本迭代速度超快,目前从GitHub看到已有78个版本,而它仅仅是再2013年初才正式开始的一个项目而已。

Docker团队之所以喜欢用Go语言,主要是Go具有强大的标准库、全开发环境、跨平台构建的能力。

GitHub托管地址: https://github.com/docker/docker

Lime

Revel是一个高生产力的Go语言Web框架。Revel框架支持热编译,当编辑、保存和刷新源码时,Revel会自动编译代码和模板;全栈特性,支持路由、参数解析、缓存、测试、国际化等功能。

GitHub托管地址: https://github.com/revel/revel

InfluxDB

一个Go语音编写的开源分布式的时序、事件和指标数据库,无需外部依赖。其设计目标是实现分布式和水平伸缩扩展。

GitHub托管地址: https://github.com/influxdb/influxdb

Gogs

Gogs则是一款由国人无闻( GitHub)开发的自助Git服务项目。Gogs的目标是打造一个最简单、最快速和最轻松的方式搭建自助Git服务。据作者称,之所以选择使用Go语言开发,就是Go允许Gogs可以通过独立的二进制分发,且对跨平台有良好支持。

GitHub托管地址: https://github.com/gogits/gogs

3. 总结

我们回顾一下我们主要讲解了go语言的历史,它是一个什么样子的语言它的特性是怎么样的,有那些有名的开源项目,大家是不是对go语言充满了期待,也充满了疑惑呢,那么就请大家带着期待带着疑惑的心里,来进入下一篇的GO语言-安装与Helloworld篇吧!

注:笔者能力有限有说的不对的地方希望大家能够指出,也希望多多交流!

时间: 2024-11-17 21:26:12

[喵咪Golang(1)]Go语言开篇的相关文章

[喵咪Golang(2)]安装和Helloworld

[喵咪Golang(2)]安装和Helloworld 前言 哈喽大家好啊!今天我们紧接着来学习关于Go语言的安装和使用Go打印出helloworld,本节内容将会讲解关于Go语言在Liunx下怎么安装,环境变量怎么配置分别起到了什么作用,然后我们把go运行起来并且打印出helloworld,那么就开始今天的Go语言之旅吧! 附上: 喵了个咪的博客:w-blog.cn phalgo地址:github.com/wenzhenxi/phalgo Go语言圣经:docs.ruanjiadeng.com/

[喵咪Linux(2)]环境变量的坑

[喵咪Linux(2)]环境变量的坑 前言 玩过linux的童鞋对环境变量都不陌生,我们在安装好一些软件,组件之后想要直接使用它都需要加入环境变量,并且比如java啊golang都必须依赖你设置的环境变量来运行,在最近笔者在日常工作中遇到了一些关于环境变量的坎,所以今天把这些"坑"分享出来和大家交流! 附上: 喵了个咪的博客:w-blog.cn 1. 两场景 笔者有个习惯就是喜欢追问场景,比如别人问我一个问题,token要怎么用sign要怎么玩,我都会先问你是什么场景,什么场景才使用什

[喵咪MQ(2)]RabbitMQ单机模式使用

[喵咪MQ(2)]RabbitMQ单机模式使用 w-blog博客 哈喽!本周我们又见面了,今天呢我们接着说MQ软件RabbitMQ的故事,在上小节以及成功的安装了RabbitMQ也配置了开机启动,那么我们应该要开始的真正的接触并且使用它来管理使用解决业务问题,请紧张的往下看- 附上: 喵了个咪的博客:w-blog.cn RabbitMQ官网 :http://www.rabbitmq.com/ 1.用户权限体系 在RabbitMQ中提供了一套账户体系,账户体系围绕着vhost进行展开,那么vhos

[喵咪MQ(1)]RabbitMQ简单介绍准备工作

[喵咪MQ(1)]RabbitMQ简单介绍准备工作 前言 哈喽大家好呀! 看标题就知道我们这次要讲MQ,之前博客中有提到的KafKa理论上来说也是一个优秀的MQ队列软件,比较知名的MQ有:Go语言编写的 nsq , 阿里云的RocketMQ , 大名鼎鼎的KafKa 以及 redis(也可以做队列),不过我们这次的主角是RabbitMQ. 附上: 喵了个咪的博客:w-blog.cn RabbitMQ官网 :http://www.rabbitmq.com/ 1.队列做什么?RabbitMQ是什么?

[喵咪软件推荐(1)]全球化地址基础数据

[喵咪软件推荐(1)]全球化地址基础数据 前言 哈喽大家好啊!今天又来刨坑了,这次给大家带来的是软件推荐系列,主要是把一些特别好用的一些软件推荐给大家并且分析使用场景以及用法,今天要给大家介绍的一个类软件呢,主要是解决全球化地址这类问题,那么话不多说进入今天的正片环节. 附上: 喵了个咪的博客:w-blog.cn 全球国家信息国旗以及经纬度范围:https://github.com/mledoze/countries 全球国家各语言名称:https://github.com/umpirsky/c

[喵咪Redis]Redis安装与介绍

[喵咪Redis]Redis安装与介绍 前言 哈喽大家好啊,这次要来和大家一起来了解学习Redis的一系列技术,最终目的是搭建一个高可用redis集群自动负载灾备,那我们先从最基础的Redis的一些基本介绍以及安装来说起! 附上: 喵了个咪的博客:w-blog.cn Redis官网:http://redis.io/ Redis命令大全:http://doc.redisfans.com/ Redsi源码地址:http://download.redis.io/releases/ GitHub地址:h

[喵咪的Liunx(1)]计划任务队列脚本后台进程Supervisor帮你搞定

喵咪的Liunx(1)]计划任务队列脚本后台进程Supervisor帮你搞定 前言 哈喽大家好啊,好久不见啊(都快一个月了),要问为什么没有更新博客呢只应为最近在录制PhalApi的视频教程时间比较少,作为弥补那么为大家带来一点干货Supervisor,话不多说那么就开始今天的分享把 附上: 喵了个咪的博客:w-blog.cn Supervisor官网地址:https://pypi.python.org/pypi/supervisor PhalApi官网地址:http://www.phalapi

[喵咪KafKa(1)]KafKa的介绍以及使用场景

[喵咪KafKa(1)]KafKa的介绍以及使用场景 前言 哈喽!大家好呀,真是一坑未平一坑又起,otter还在继续更新的同时,笔者也为大家带来了关于kafka相关的一系列博客,要说到kafka就离不开现在特别火热的大数据技术,了解的童鞋可能只要一些大数据的带名词比如Hadoop,spark,storm,包括最近很火的微服务,kafka也是其中一员,但是不同的是kafka并不负责处理数据,要给kafka一个定义的话应该是一个分布式发布订阅消息系统可以说是一个数据通道保证数据稳定传输,要是感兴趣就

[喵咪Liunx(4)Monit进程监控

[喵咪Liunx(4)Monit进程监控 前言 有一段时间没有更新博客了,最近因为公司项目全球化以及最近慢慢在偏向学习团队管理忙的有点不可开交了,不过这次要给大家带来两篇关于Liunx日常开发维护管理中非常好用的两款利器,其中一个就是Monit啦,Monit是什么呢?他是一个进程级别的一个监控软件,不卖关子我们就进入到今天的正文当中吧! 附上: 喵了个咪的博客:w-blog.cn Monit官网地址:https://www.mmonit.com/monit/documentation/monit