Atitit.go语言golang语言的新的特性 attilax总结
Atitit.go语言golang语言的新的特性 attilax总结
1. 继承树less 动态接口1
1.1. 按照书中说的,Go语言具有以下的特征,下面我们分别来进行介绍。 q 自动垃圾回收 q2
1.2. 更丰富的内置类型 2
1.3. . 更丰富的内置类型2
1.4. 错误处理 defer3
1.5. 匿名函数和闭包 q3
1.6. 类型和接口 非侵入型”接口的概念。3
1.7. q 并发编程 4
1.8. q 反射 4
1.9. q 语言交互性4
1.10. 函数多返回值 > func getName()(firstName, middleName, lastName, nickName string){ > return "May", "M", "Chen", "Babe" } //定义了一个多返回值的函数getName > > fn, mn, ln, nn := getName() //调用赋值 > _, _, lastName, _ := getName() //缺省调用5
2. 参考5
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://blog.csdn.net/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总结相关推荐
- java functionex_Atitit. atiJavaExConverter4js 新的特性
Atitit. atiJavaExConverter4js 新的特性 1.1. V1新特性 Java ex convert 1.2. V2 新特性 Catch 不同的ex 2. Keyword Tr ...
- golang语言-1-go普及知识
Go 语言的官方网站是 golang.org,这个站点采用 Python 作为前端,并且使用 Go 语言自带的工具 godoc 运行在 Google App Engine 上来作为 Web 服务器提供 ...
- Atitit.rust语言特性 attilax 总结
Atitit.rust语言特性 attilax 总结 1. 创建这个新语言的目的是为了解决一个顽疾:软件的演进速度大大低于硬件的演进,软件在语言级别上无法真正利用多核计算带来的性能提升.1 2. 不会 ...
- 语言与golang语言运行速度_Golang语言情怀第13期 Go 语言设计模式 介绍
设计模式是什么 俗话说:站在别人的肩膀上,我们会看得更远.设计模式的出现可以让我们站在前人的肩膀上,通过一些成熟的设计方案来指导新项目的开发和设计,以便于我们开发出具有更好的灵活性和可扩展性,也更易于 ...
- GoLang语言多版本管理工具--GVM入门介绍
GoLang语言多版本管理工具--GVM入门介绍 GVM 由Josh Bussdieker(jbuss,jaja,jbussdieker)在Moovweb工作期间 GVM提供了一个管理Go版本的界面. ...
- call stack是什么错误_Go语言(golang)的错误(error)处理的推荐方案
原文链接:https://www.flysnow.org/2019/01/01/golang-error-handle-suggestion.html 微信公众号:flysnow_org(飞雪无情) ...
- 记录一次游戏服务器的压测调优记录(Golang语言)
记录一次游戏服务器的压测调优记录(Golang语言) 来自:烧书煮石_ 记录一次游戏服务器的压测调优记录(Golang语言) - 简书 (jianshu.com) 前言 辛苦开发了一年的服务,终于要上 ...
- 第01章 golang语言
Go语言(或 Golang)起源于 2007 年,并在 2009 年正式对外发布.Go 是非常年轻的一门语言,它的主要目标是"兼具 Python 等动态语言的开发速度和 C/C++ 等编译型 ...
- golang语言并发与并行——goroutine和channel的详细理解
转载自: http://blog.csdn.net/skh2015java/article/details/60330785 http://blog.csdn.net/skh2015java/arti ...
- 想系统学习GO语言(Golang),能推荐几本靠谱的书吗?
以下内容来自知乎: 链接:https://www.zhihu.com/question/30461290 学习任何一门语言,都要学习好基础,把基础打牢,那些框架对你来说都是工具,你自己的基础好,懂得了 ...
最新文章
- 如何用PyTorch进行语义分割?
- HDU 6304 Chiaki Sequence Revisited
- 【opencv】3.在一个opencv窗口中显示多个视频界面、画箭头、画掉头箭头
- 1.17 StringBuffer类详解
- java 正则表达式语法_Java 正则表达式基础语法
- struts2 手动验证和框架验证
- 云计算的认识和看法_云存储已经成为存储的未来,你的存储跟上节奏了吗?
- 杭州专场!华为机器视觉技术开放日—探索智能相机
- 带有审图号的区位图制作
- 联网JAVA模拟器_java模拟器
- 【POJ】Radar Installation题解
- 【Android自动化测试】Robot Framework+adb框架(四)——L2层关键字
- css-盒子模型border-box
- 华硕笔记本X450JB拆机及加装固态硬盘
- 初识DTW(动态时间规整)算法及Python实现例
- 手机编程神器Pydroid3的简单使用——Python和c语言
- ElasticSearch 亿级数据检索深度优化
- 常见的目标检测中的背景建模方法
- 切换输入法的c#代码
- 最优化理论——可行方向法
热门文章
- Linux打开关闭ping
- IOS中延时执行的几种方式的比较和汇总
- 完整版linux下android源码下载、编译、模拟器启动运行
- .Net 2.0对文件传输协议(FTP)操作(上传,下载,新建,删除,FTP间传送文件等) 2
- RIP实现等开销负载均衡的配置
- Opencv实现图像无缝拼接,Sift查找特征点,Flann进行匹配
- WINDOWS.H already included.MFC apps must not #include windows.h
- innodb存储引擎之内存
- 顺序输出一个整数的各位数字
- 微信公众号在调用扫一扫功能时,一维码(条形码)在直接返回结果时会在结果前带上EAN_8, EAN_13, CODE_25, CODE_39, CODE_128, UPC_A, UPC_E...