Go语言简介

主要目标:

兼具Python等动态语言的开发速度和C/C++等编译型语言的性能与安全性。支持网络编程、系统编程、并发编程、分布式编程。

Go使用编译器编译代码,编译器检查错误、优化性能并输出可在不同平台上运行的二进制文件。

Go语言为并发而生

如今,多核CPU已经成为服务器的标配,对多核的运算能力挖掘一直由程序员人工设计算法及框架来完成,这个过程需要开发人员具有一定的并发设计及框架设计能力。Go语言在多核并发上具有原生的设计优势,经过Go语言重构的系统能够使用更少的硬件资源实现更高的并发和I/O吞吐表现。

Go语言底层原生支持并发。Go语言的并发基于goroutinegoroutine是一种虚拟线程,Go语言运行时参与调度goroutine,并将goroutine合理分配到每个CPU中,最大限度使用CPU性能。

多个goroutine中,Go语言使用channel进行通信,程序可以将需要并发设计的环节设计为生产者模式和消费者模式,将数据放入通道,通道另外一端的代码将这些数据进行并发计算并返回结果

多个goroutine通信
使用Go语言开发的开源项目

Go语言开发的开源项目包括DockerGo-EthereumThrraformKubernetes

Docker是一种操作系统层面的虚拟化技术,可以在操作系统和应用程序之间进行隔离,也可以称之为容器。Docker可以在一台物理服务器上快速运行一个或多个实例。例如,启动一个CentOS操作系统,并在其内部命令行执行指令后结束,整个过程就像自己在操作系统一样高效。

Kubernetes 构建于Docker之上的容器调度服务,用户可以通过Kubernetes集群进行云端容器集群管理。

etcd一款分布式、可靠的KV存储系统,可以快速进行云配置。

beego是一个类似PythonTornado框架,采用了RESTFul的设计思路,使用Go语言编写的一个极轻量级、高可伸缩性和高性能的 Web 应用框架。

martini 一款快速构建模块化Web 应用的 Web 框架。

codis 国产的优秀分布式 Redis 解决方案。

delve Go语言强大的调试器,被很多集成环境和编辑器整合。

Go语言的标准库强大

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

Go语言的编译器也是标准库的一部分,通过词法器扫描源码,使用语法树获得源码逻辑分支等。Go语言的周边工具也是建立在这些标准库上,在标准库上几乎可以完成大部分的需求。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 支持将代码编译为插件,按需加载
reflect 语言反射支持,可以动态获得代码中的类型信息,获取和修改变量的值
regexp 正则表达式封装
runtime 运行时接口
sort 排序接口
strings 字符串转换、解析及实用函数
time 时间接口
text 文本模版及Token词法器
Go语言上手简单

Go语言是一种静态型、编译型并自带垃圾回收和并发的编程语言。

HTTP文件服务器是常见的Web服务器之一,开发阶段为了测试,需要自行安装ApacheNginx服务器,下载安装配置需要大量的时间,使用Go语言实现简单的HTTP服务器只需要几行代码

package main //标记当前文件为main包,main包是程序的入口包
import (
    "net/http"  //导入net/http包,这个包的作用是HTTP的基础访问和封装
)
func main() { //程序执行的入口函数main()

    http.Handle("/", http.FileServer(http.Dir(".")))  
    //使用http.FileServer文件服务器将当前目录作为根目录处理

    http.ListenAndServe(":8080", nil) 
    //默认的HTTP服务侦听在本机的8080端口
}

你可能感兴趣的:(Go语言简介)