Go语言基本介绍(1)

 

目录

Go语言起源:

Go 语言特色

Go语言标准库

开发工具


 

Go语言起源:

Go语言很多时候被描述为“C类似语言”,或者是“21世纪的C语言”。Go具有C语言相似的表达式语法、控制流结构、基础数据类型、调用参数传值、指针等很多思想,最重要的是具有C语言编译后机器码的运行效率以及和现有操作系统的无缝适配。

其实Go语言的家族树中还有其它的祖先。其中一个有影响力的分支来自Niklaus Wirth所设计的Pascal语言。摒弃了模块接口文件和模块实现文件之间的区别,面向对象特性所提供的方法的声明语法,是受Oberon语言的影响。包的导入和声明的语法受Oberon-2的影响。Go语言的另一支祖先,带来了Go语言区别其他语言的重要特性,灵感来自于贝尔实验室的Tony Hoare(托尼·霍尔 发明了快排算法)于1978年发表的鲜为外界所知的关于并发研究的基础文献 顺序通信进程 CSP(communicating sequential processes )。在CSP中,程序是一组中间没有共享状态的平行运行的处理过程,它们之间使用管道进行通信和控制同步。不过Tony Hoare的CSP只是一个用于描述并发性基本概念的描述语言,并不是一个可以编写可执行程序的通用编程语言。接下来,Rob Pike(罗布·派克 是贝尔实验室最早和Ken Thompson以及 Dennis M. Ritche 开发Unix的猛人,UTF-8的设计人)和其他人开始不断尝试将CSP引入实际的编程语言中。他们第一次尝试引入CSP特性的编程语言叫Squeak(老鼠间交流的语言),是一个提供鼠标和键盘事件处理的编程语言,它的管道是静态创建的。然后是改进版的Newsqueak语言,提供了类似C语言语句和表达式的语法和类似Pascal语言的推导语法。Newsqueak是一个带垃圾回收的纯函数式语言,它再次针对键盘、鼠标和窗口事件管理。但是在Newsqueak语言中管道是动态创建的,属于第一类值, 可以保存到变量中。在Plan9操作系统中,这些优秀的想法被吸收到了一个叫Alef的编程语言中。Alef试图将Newsqueak语言改造为系统编程语言,但是因为缺少垃圾回收机制而导致并发编程很痛苦。(译注:在Aelf之后还有一个叫Limbo的编程语言,Go语言从其中借鉴了很多特性。 具体请参考Pike的讲稿:http://talks.golang.org/2012/concurrency.slide#9 )Go语言的其他的一些特性零散地来自于其他一些编程语言;比如iota语法是从APL语言(是一种解释执行的计算机语言)借鉴,词法作用域与嵌套函数来自于Scheme语言(和其他很多语言)。当然,我们也可以从Go中发现很多创新的设计。比如Go语言的切片为动态数组提供了有效的随机存取的性能,这可能会让人联想到链表的底层的共享机制。还有Go语言新发明的defer语句。

Go 语言特色

  • 自动垃圾回收
  • 更丰富的内置类型
  • 函数多返回值
  • 简单的错误处理
  • 匿名函数和闭包(函数式编程)
  • 类型和接口(type、interface),不支持泛型(为了节省编译时间,后续是否支持不确定)
  • 并发编程(edang面向消息编程思想,goroutine和channel)
  • 反射
  • 语言交互性(CGO)

 

极大的降低代码的复杂性,多核处理器同步多工(同时处理多个工作任务)解决面向对象程序设计的麻烦,简洁、快速、安全、并行、有趣、开源、内存管理、数组安全、编译迅速(闪电般,秒级)是其特色。

Go语言也属于编译型语言(C、C++、JAVA等),而且是一个非常现代化的语言,精小但非常强大,写的更少,做得更多。

本身只有很少的特性,也不太可能添加太多的特性。例如,它没有隐式的数值转换,没有构造函数和析构函数,没有运算符重载,没有默认参数,也没有继承,没有泛型,没有异常,没有宏,没有函数修饰,更没有线程局部存储。但是,语言本身是成熟和稳定的,而且承诺保证向后兼容:用之前的Go语言编写程序可以用新版本的Go语言编译器和标准库直接构建而不需要修改代码。

Go语言有足够的类型系统以避免动态语言中那些粗心的类型错误,但是,Go语言的类型系统相比传统的强类型语言又要简洁很多。虽然,有时候这会导致一个“无类型”的抽象类型概念,但是Go语言程序员并不需要像C++或Haskell程序员那样纠结于具体类型的安全属性。在实践中,Go语言简洁的类型系统给程序员带来了更多的安全性和更好的运行时性能。

Go语言鼓励当代计算机系统设计的原则,特别是局部的重要性。它的内置数据类型和大多数的准库数据结构都经过精心设计而避免显式的初始化或隐式的构造函数,因为很少的内存分配和内存初始化代码被隐藏在库代码中了。Go语言的聚合类型(结构体和数组)可以直接操作它们的元素,只需要更少的存储空间、更少的内存写操作,而且指针操作比其他间接操作的语言也更有效率。由于现代计算机是一个并行的机器,Go语言提供了基于CSP的并发特性支持。Go语言的动态栈使得轻量级线程goroutine的初始栈可以很小,因此,创建一个goroutine的代价很小,创建百万级的goroutine完全是可行的。

Go语言的面向对象机制与一般语言不同。它没有类层次结构,甚至可以说没有类;仅仅通过组合(而不是继承)简单的对象来构建复杂的对象。方法不仅可以定义在结构体上, 而且, 可以定义在任何用户自定义的类型上;并且, 具体类型和抽象类型(接口)之间的关系是隐式的,所以很多类型的设计者可能并不知道该类型到底实现了哪些接口。

 

Go语言标准库

Go语言的标准库覆盖网络、系统、加密、编码、图形等各个方面,可以直接使用标准库的 http 包进行 HTTP 协议的收发处理;网络库基于高性能的操作系统通信模型(Linux 的 epoll、Windows 的 IOCP);所有的加密、编码都内建支持,不需要再从第三方开发者处获取。

Go 语言的编译器也是标准库的一部分,通过词法器扫描源码,使用语法树获得源码逻辑分支等。Go 语言的周边工具也是建立在这些标准库上。在标准库上可以完成几乎大部分的需求。

Go语言标准库包名

功  能

bufio

带缓冲的 I/O 操作

bytes

实现字节操作

container

封装堆、列表和环形列表等容器

crypto

加密算法

database

数据库驱动和接口

debug

各种调试文件格式访问及调试功能

encoding

常见算法如 JSON、XML、Base64 等

flag

命令行解析

fmt

格式化操作

go

Go 语言的词法、语法树、类型等。可通过这个包进行代码信息提取和修改

html

HTML 转义及模板系统

image

常见图形格式的访问及生成

io

实现 I/O 原始访问接口及访问封装

math

数学库

net

网络库,支持 Socket、HTTP、邮件、RPC、SMTP 等

os

操作系统平台不依赖平台操作封装

path

兼容各操作系统的路径操作实用函数

plugin

Go 1.7 加入的插件系统。支持将代码编译为插件,按需加载

reflect

语言反射支持。可以动态获得代码中的类型信息,获取和修改变量的值

regexp

正则表达式封装

runtime

运行时接口

sort

排序接口

strings

字符串转换、解析及实用函数

time

时间接口

text

文本模板及 Token 词法器

 

开发工具

推荐个工具是liteIDE,它是免费的,还是中文版的,对于我这种新手也比较友好,下载地址在这里http://sourceforge.net/projects/liteide/files/

  • 先装GO,然后下载liteIDE
  • 建立workspace/src,存放工程
  • 设置gopath
  • 新建工程,开发,测试,调试

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值