golang

Go
第一个正式版本的Go语言于2012年3月28日正式发布
Go语言(Golang)是为了让程序员有更高的生产效率
Go语言包含大量用于处理GO语言代码的命令和工具,其中常用命令:
    build:用于编译给定的代码包或GO语言源码文件及其依赖包
    clean:用于清除执行其他GO命令后遗留的目录和文件
    doc:用于执行godoc命令已打印制定代码包
    evn:用于打印GO语言环境信息
    fix:  执行go tool fix命令已修正给定代码包的源码包的源码文件中包含的过时语法和代码调用
    fmt:   用于执行gofmt命令以格式化给定代码包中的源码文件
    get:   用于下载和安装给定代码包及其依赖包
    list:   用于显示给定代码包的信息
    run:用于编译逼供运行给定的命令源码文件
    install:编译包文件并编译整个程序
    test:用于测试给定的代码包
    tool:用于运行GO语言的特殊工具
    version:用于显示当前安装的GO语言的版本信息
 
优势:
部署点大可以直接变成成机器码,不依赖其他库,glibc的版本有一定要求,部署就是扔一个文件就可以了
静态类型余元,但是有动态语言的感觉,静态类型的余元就是可以再编译的时候检查出来隐藏的大多数问题,动态语言的感觉就是有很多的包可以使用,写起来效率高
语言层面支持并发,这是Go最大的特色,天生支持并发,可以充分利用多核
内置runtime,支持回收垃圾,这属于动态语言之一,虽然目前来说GC(内存垃圾回收机制)不算完美,但是足以应付我们遇到的大多数问题
简单易学,Go语言的作者都有C的基因,那么Go自然就有了C的基因,Go关键字是25个,但是表达能力强大,几乎支持你见过的大多数特性:继承,重载,对象等
丰富的标准库,Go目前已经内置了大量的库,特别是网络库非常强大
语言特性:
Go语言作为一门全新的静态类型开发语言,与当前的开发语言相比具备众多令人兴奋不已的新特性,最主要的特性有:
自动垃圾回收
丰富的内置类型
函数多返回值
错误处理
匿名函数和闭包
类型和接口
并发编程(最关键的优势)
反射
语言交互:C语言之与Go,就像汇编之与C;
自动垃圾回收:各种非预期的原因,比如开发者的疏忽导致delete语句没有被调用,或者说该函数被调用的非常频繁,那么我们观察该进程执行是,会发现该进程占用的内存会一直疯长,会导致程序崩溃,更有可能导致系统崩溃,到目前为止,内存泄露的最佳解决方案是在语言级别引入自动垃圾回收算法简称GC,所谓垃圾回收即所有的内存非配动作都会被在运行时记录,同时任何对该内存的使用也都会被记,然后垃圾回收期会多所有已分配的内存进行检测,一旦发现有些内存已经不再被任何人调用使用,则会阶段性的回收这些内存
更丰富的内置类型:几乎所有语言都支持简单内置类型,Go语言还内置了一个对于其他静态类型语言通常用库方式支持的字典类型,另外有一个新增的数据类型:数组切片(slice),数组切片的功能是一种可动态增长的数组,数组切片功能与C++标准库中的vector非常相似
函数多返回值:目前的主流语言除了Python外基本都不支持函数的多返回值功能,不是没有这类需求,可能是语言设计者没有想好该如何提供这个功能,或者这个功能会影响语言的没干,Go语言革命性地在静态开发语言阵营中提供了多返回值的功能,这个特性让开发者可以从原来用各种比较别扭的方式返回多个值的痛苦中解脱出来,既不用在区分参数局列表中那几个用于输入那几个用于输出,再也不只为了返回多个值而专门定义一个数据结构
错误处理:Go语言引入了3个关键字用于标准的错误处理流程,这3个关键字分别为defer,panic和recover。
匿名函数和闭包:在Go语言中,所有的函数也是值类型,可以作为参数传递,Go语言支持常规的匿名函数和闭包,开发者可以随意对匿名函数变量进行传递和调用
类型和接口:Go语言的类型定义非常接近于C语言中的结构,甚至直接沿用了struct关键字,Go语言并没有直接沿袭C++和Java的传统去设计一个超级复杂的类型系统,不支持继承和重载,而只是支持了最基本的类型组合功能,巧妙的是,虽然看起来过于简洁,但是用起来会发现Go语言并不会出现无法表现的情况,GO语言也不是简单的对面向对象开发语言做减法,他还引入了一个无比强大的非侵入式接口的概念,让开发者从以往对C++和Java开发中的接口管理问题中解脱出来
并发编程:GO语言引入了goroutine概念,他使得并发编程变得非常简单,通过使用goroutine而不是用操作系统的并发机制,以及使用消息传递来的共享内存而不是使用共享内存来通信,GO语言让并发编程变得更加轻盈和安全,通过在函数调用钱使用关键字go,我们既可以让该函数以goroutine方式执行。goroutine是一种比线程更加轻盈,更省资源的协程。GO语言通过系统的线程来多路派遣这些函数的这行,使得每个用GO关键字执行的函数可以运行成为一个单位携程
反射:反射是在Java语言出现后迅速流行起来的一种概念,通过反射,你可以获取对象类型的详细信息,并可动态操作对象,反射是把双刃剑,功能强大但代码可读性并不理想,若非必要,不推荐使用反射
语言交互性:由于GO语言与C语言之间的天生练习,GO语言的设计者们自然不会忽略如何中有现有的C模块这个问题,这个功能直接被命名为Cgo。Cgo即使语言特性,同时也是一个工具的名称。
GO适合用来做什么:
服务器编程,分布式系统,网络编程,内存数据库,云平台
GO的位运算操作符:
&位运算and,蒋两个数对应的二进制进行“与”操作
|位运算or,将两个数对应的二进制进行“或”操作
^位运算XOR,将两个数对应的二进制进行“异或”操作,“异或”操作是将二进制相同的位置为0,不同的位置为1
&^位清空and not,对于第二个数字来说,将第二个数字对应的位清空。
左移运算富“<<”是双目运算符,左移N位就是乘以2的n次方,把"<<"左边的运算数的各的各个二进位全部左移若干位,由“<<”右边的指数置顶移动的为数,高位丢弃,低位补0
右移运算符">>"是双目运算符,右移N位就是除以2的N次方,其功能是把">>"左边的运算数的各二进位全部右移若干位,“>>”右边的数置顶移动的为数;
GO的float46存储比float32更准确;
原文地址:https://www.cnblogs.com/L-moye/p/11023849.html