Atitit.go语言golang语言的新的特性 attilax总结
Atitit.go语言golang语言的新的特性 attilax总结
1.1. 按照书中说的,Go语言具有以下的特征,下面我们分别来进行介绍。 q 自动垃圾回收 q2
1. 继承树less 动态接口
编程语言作为工具和其他所有工具的目的是一样的,就是为了提高生产力。Go语言也不例外,Go语言也有GC、也支持Erlang式的轻量级并发,Go语言最有价值的地方是对现有OOP的改进,现在无论什么语言只要支持OOP就一定会有一个庞大的继承树,但是无论这个树设计的多庞大多精巧它仍然是一个静态的结构,一旦和实际问题不匹配就要写一堆Adapter。而Go语言采用完全不用的方法,类之间不存在静态的继承或者实现关系,这种关系直到使用它的时候才确定,比如java中FileInputStream实现了InputStream接口,这个关系在定义FileInputStream的时候就要确定,而Go语言中定义FileInputStream时不需要指定它要实现的接口,如果这个类里面实现的方法刚好和满足InputStream那你就可以认为实现了InputStream接口。这种实现方式意味着Go语言不再有传统的OOP存在的各种烦恼,同时又提供了相同的表达能力,而且更优雅。
图灵等价的编程语言之间不存在一个语言能解决而另外一个语言不能解决的问题,只能说一个语言比另外一个语言解决某种问题更优雅,Go语言因对OOP做的创新,在对象建模上更容易,类似Erlang的并发某行让开发高并发网络应用时可以大幅降低逻辑复杂性。
.
1.1. 按照书中说的,Go语言具有以下的特征,下面我们分别来进行介绍。
q 自动垃圾回收
q
作者:: 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 ) 汉字名:艾龙, EMAIL:1466519819@qq.com
转载请注明来源: http://www.cnblogs.com/attilax/
1.2.
1.3. 更丰富的内置类型
1.4. . 更丰富的内置类型
其实作为一种新兴的语言,如果仅仅是为了某种特定的用途那么可能其内置类型不是很多,仅需要能够完成我的功能即可,但是Go语言“不仅支持几乎所有语言都支持的简单内置类型(比如整型和浮点型等)外,还支持一些其他的高级类型,比如字典类型,map要知道这些类型在其他语言中都是通过包的形式引入的外部数据类型。数组切片(Slice),类似于C++ STL中的vector,在Go也是一种内置的数据类型作为动态数组来使用。这里满有一个颇为简单的解释:”既然绝大多数开发者都需要用到这个类型,为什么还非要每个人都写一行import语句来包含一个库?”
q
1.5. 错误处理 defer
defer、panic和recover,其中使用defer关键字语句的含义是不管程序是否出现异常,均在函数退出时自动执行相关代码。
所以上面你的java代码用Go进程重写只有两行:
conn := ...
defer conn.Close()
所以“Go语言的错误处理机制可以大量减少代码量,让开发者也无需仅仅为了程序安全性而添加大量一层套一层的try-catch语句。这对于代码的阅读者和维护者来说也是一件很好的事情,因为可以避免在层层的代码嵌套中定位业务代码。”
q
1.6. 匿名函数和闭包
q
1.7. 类型和接口 非侵入型”接口的概念。
可以看出,“虽然Bird类型实现的时候,没有声明与接口IFly的关系,但接口和类型可以直
接转换,甚至接口的定义都不用在类型定义之前,这种比较松散的对应关系可以大幅降低因为接
口调整而导致的大量代码调整工作”。
Go语言最让人赞叹不易的特性,就是interface的设计。任何数据结构,只要实现了interface所定义的函数,自动就implement了这个interface,没有像Java那样冗长的class申明,提供了灵活太多的设计度和OO抽象度,让你的代码也非常干净。千万不要以为你习惯了Java那种一条一条加implements的方式,感觉还行,等接口的设计越来越复杂的时候,无数Bug正在后面等着你。
同时,正因为如此,Go语言的interface可以用来表示任何generic的东西,比如一个空的interface,可以是string可以是int,可以是任何数据类型,因为这些数据类型都不需要实现任何函数,自然就满足空interface的定义了。加上Go语言的type assertion,可以提供一般动态语言才有的duck typing特性, 而仍然能在compile中捕捉明显的错误。
1.8. q 并发编程
Go 关键字,类似C#的async和await
Java的future模式..
毋庸置疑,Go语言对并发编程的支持是天生的、自然的和高效的。Go语言为此专门创造出了一个关键字“go”。使用这个关键字,我们就可以很容易的使一个函数被并发的执行。就像这样:
go func() {
fmt.Println("Concurrent execution!")
}()
1.9. q 反射
1.10. q 语言交互性
在Go语言中直接调用了C标准库的puts函数。
package main/*
#include <stdio.h>
*/import "C"import "unsafe"func main() {cstr := C.CString("Hello, world")
C.puts(cstr)
C.free(unsafe.Pointer(cstr))}
q
1.11. 函数多返回值
> func getName()(firstName, middleName, lastName, nickName string){ > return "May", "M", "Chen", "Babe" } //定义了一个多返回值的函数getName > > fn, mn, ln, nn := getName() //调用赋值 > _, _, lastName, _ := getName() //缺省调用
2. 参考
Go并发编程之Go语言概述.mht
Atitit.go语言golang语言的新的特性 attilax总结的更多相关文章
- Atitit. Object-c语言 的新的特性 attilax总结
Atitit. Object-c语言 的新的特性 attilax总结 1.1. Object-C语言由 Brad J.Cox于20世纪80年代早期设计,1 1.2. Object-C新增的数据结构: ...
- Atitit.rust语言特性 attilax 总结
Atitit.rust语言特性 attilax 总结 1. 创建这个新语言的目的是为了解决一个顽疾:软件的演进速度大大低于硬件的演进,软件在语言级别上无法真正利用多核计算带来的性能提升.1 2. 不会 ...
- RabbitMQ官方教程三 Publish/Subscribe(GOLANG语言实现)
RabbitMQ官方教程三 Publish/Subscribe(GOLANG语言实现) 在上一个教程中,我们创建了一个工作队列. 工作队列背后的假设是,每个任务都恰好交付给一个worker处理. 在这 ...
- RabbitMQ官方教程二 Work Queues(GOLANG语言实现)
RabbitMQ官方教程二 Work Queues(GOLANG语言实现) 在第一个教程中,我们编写了程序来发送和接收来自命名队列的消息. 在这一部分中,我们将创建一个工作队列,该队列将用于在多个wo ...
- 学习Golang语言(6):类型--切片
学习Golang语言(1): Hello World 学习Golang语言(2): 变量 学习Golang语言(3):类型--布尔型和数值类型 学习Golang语言(4):类型--字符串 学习Gola ...
- TODO:Golang语言TCP/UDP协议重用地址端口
TODO:Golang语言TCP/UDP协议重用地址端口 这是一个简单的包来解决重用地址的问题. go net包(据我所知)不允许设置套接字选项. 这在尝试进行TCP NAT时尤其成问题,其需要在同一 ...
- Atitit java c# php c++ js跨语言调用matlab实现边缘检测等功能attilax总结
Atitit java c# php c++ js跨语言调用matlab实现边缘检测等功能attilax总结 1.1. 边缘检测的基本方法Canny最常用了1 1.2. 编写matlab边缘检测代码, ...
- atitit.java解析sql语言解析器解释器的实现
atitit.java解析sql语言解析器解释器的实现 1. 解析sql的本质:实现一个4gl dsl编程语言的编译器 1 2. 解析sql的主要的流程,词法分析,而后进行语法分析,语义分析,构建sq ...
- hbase rest api接口链接管理【golang语言版】
# go-hbase-resthbase rest api接口链接管理[golang语言版]关于hbase的rest接口的详细信息可以到官网查看[http://hbase.apache.org/boo ...
随机推荐
- NOIP2016_day1_No1玩具谜题
#include <iostream> #include <cstdio> using namespace std; int main () { freopen("t ...
- haproxy代理kibana、nginx代理kibana并实现登录验证
在使用ELK进行日志统计的时候,由于Kibana自身并没有身份验证的功能,任何人只要知道链接地址就可以正常登录到Kibana控制界面,由于日常的查询,添加和删除日志都是在同一个web中进行,这样就有极 ...
- Kth Smallest Element in a Sorted Matrix -- LeetCode
Given a n x n matrix where each of the rows and columns are sorted in ascending order, find the kth ...
- Linux下进行Web服务器压力(并发)测试工具http_load、webbench、ab、Siege、autobench简单使用教程(转)
一.http_load 程序非常小,解压后也不到100K http_load以并行复用的方式运行,用以测试web服务器的吞吐量与负载.但是它不同于大多数压力测试工 具,它可以以一个单一的进程运行,一般 ...
- DOTween教程
参考自DOTween官方文档: DOTween起始上手起来很快,当然前提也是用心看一下哈. > 可以在Unity AssetStore下载得到. 使用方法: 准备: 在导入DOTween后,你需 ...
- python移植性提示
移植性提示 2.1 预计在python3.0中,运算符/只能执行True除法.3.0发布后,程序员要更新自己的程序,以兼容新行为. 3.1 python2.0版本开始引入增量赋值符号,在老版本pyth ...
- ISP图像处理算法之---Demosaic
目前市场上主流传感器为Coms传感器,sensor出来的的数据格式为bayer数据格式,这种格式,每个像素点只有三个颜色通道中的一个,如图1所示 ...
- display:inline-block;在各浏览器下的问题和终极兼容办法
display:inline-block;在各浏览器下的问题和终极兼容办法 一.IE 5.5.6.7 .8(Q)中display:inline-block;失效 兼容办法: IE 5.5.6.7 .8 ...
- 机器学习第4课:多变量线性回归(Linear Regression with Multiple Variables)
4.1 多维特征 目前为止,我们探讨了单变量/特征的回归模型,现在我们对房价模型增加更多的特征, 例如房间数楼层等,构成一个含有多个变量的模型,模型中的特征为(x1,x2,...,xn).
- Hadoop之Mapreduce详解
1. 什么是Mapreduce Mapreduce是一个分布式运算程序的编程框架,是用户开发“基于hadoop的数据分析应用”的核心框架: Mapreduce核心功能是将用户编写的业务逻辑代码和自带 ...