网站首页 > 文章中心 > 其它

go语言需要设计模式吗

作者:小编 更新时间:2023-09-29 18:16:51 浏览量:320人看过

如何学习GO语言?

Go语言也称 Golang,兼具效率、性能、安全、健壮等特性.这套Go语言教程(Golang教程)通俗易懂,深入浅出,既适合没有基础的读者快速入门,也适合工作多年的程序员查阅知识点.

go语言需要设计模式吗-图1

Go 语言

这套教程在讲解一些知识点时,将 Go 语言和其他多种语言进行对比,让掌握其它编程语言的读者能迅速理解 Go 语言的特性.Go语言从底层原生支持并发,无须第三方库、开发者的编程技巧和开发经验就可以轻松搞定.

Go语言是编程语言设计的又一次尝试,是对类C语言的重大改进,它不但能让你访问底层操作系统,还提供了强大的网络编程和并发编程支持.Go语言的用途众多,可以进行网络编程、系统编程、并发编程、分布式编程.

因为Go语言没有类和继承的概念,所以它和 Java 或 C++ 看起来并不相同.但是它通过接口(interface)的概念来实现多态性.Go语言有一个清晰易懂的轻量级类型系统,在类型之间也没有层级之说.所以呢可以说Go语言是一门混合型的语言.

此外,很多重要的开源项目都是使用Go语言开发的,其中包括 Docker、Go-Ethereum、Thrraform 和 Kubernetes.Go 是编译型语言,Go 使用编译器来编译代码.编译器将源代码编译成二进制(或字节码)格式;在编译代码时,编译器检查错误、优化性能并输出可在不同平台上运行的二进制文件.要创建并运行 Go 程序,程序员必须执行如下步骤.

保存文件;编译程序;运行编译得到的可执行文件.

这不同于 Python、Ruby 和 JavaScript 等语言,它们不包含编译步骤.Go 自带了编译器,所以呢无须单独安装编译器.

为什么要使用 Go 语言?Go 语言的优势在哪里

① 保留但大幅度简化指针

Go语言保留着C中值和指针的区别,但是对于指针繁琐用法进行了大量的简化,引入引用的概念.所以在Go语言中,你几乎不用担心会因为直接操作内寸而引起各式各样的错误.

还记得在C里面为了回馈多个参数,不得不开辟几段指针传到目标函数中让其操作么?在Go里面这是完全不必要的.而且多参数的支持让Go无需使用繁琐的exceptions体系,一个函数可以返回期待的返回值加上error,调用函数后立刻处理错误信息,清晰明了.

如果你习惯了Python中简洁的list和dict操作,在Go语言中,你不会感到孤单.一切都是那么熟悉,而且更加高效.如果你是C++程序员,你会发现你又找到了STL的vector 和 map这对朋友.

go语言需要设计模式吗-图2

Go语言最让人赞叹不易的特性,就是interface的设计.任何数据结构,只要实现了interface所定义的函数,自动就implement了这个interface,没有像Java那样冗长的class申明,提供了灵活太多的设计度和OO抽象度,让你的代码也非常干净.千万不要以为你习惯了Java那种一条一条加implements的方式,感觉还行,等接口的设计越来越复杂的时候,无数Bug正在后面等着你.

同时,正因为如此,Go语言的interface可以用来表示任何generic的东西,比如一个空的interface,可以是string可以是int,可以是任何数据类型,因为这些数据类型都不需要实现任何函数,自然就满足空interface的定义了.加上Go语言的type assertion,可以提供一般动态语言才有的duck typing特性, 而仍然能在compile中捕捉明显的错误.

Go语言本质上不是面向对象语言,它还是过程化的.但是,在Go语言中, 你可以很轻易的做大部分你在别的OO语言中能做的事,用更简单清晰的逻辑.是的,今天这一节,不需要class,仍然可以继承,仍然可以多态,但是速度却快得多.因为本质上,OO在Go语言中,就是普通的struct操作.

这个几乎算是Go语言的招牌特性之一了,我也不想多提.如果你完全不了解Goroutine,那么你只需要知道,这玩意是超级轻量级的类似线程的东西,但通过它,你不需要复杂的线程操作锁操作,不需要care调度,就能玩转基本的并行程序.在Go语言里,触发一个routine和erlang spawn一样简单.基本上要掌握Go语言,以Goroutine和channel为核心的内存模型是必须要懂的.不过请放心,真的非常简单.

和C比较,Go语言完全就是一门现代化语言,原生支持的Unicode, garbage collection, Closures(是的,和functional programming language类似), function是first class object,等等等等.

看到这里,你可能会发现,我用了很多轻易,简单,快速之类的形容词来形容Go语言的特点.我想说的是,一点都不夸张,连Go语言的入门学习到提高,都比别的语言门槛低太多太多.在大部分人都有C的背景的时代,对于Go语言,从入门到能够上手做项目,最多不过半个月.Go语言给人的感觉就是太直接了,什么都直接,读源代码直接,写自己的代码也直接.

Go 语言 channel 的阻塞问题

channel 内部其实是一个环形buf数据结构 ,是一种滑动窗口机制,当make完后,就分配在 Heap 上.

上面,向 chan 发送一条"hello"数据:

如果 G1 发送数据超过指定cap时,会出现什么情况?

看下面实例:

通过如下源码,你会更加清晰:

go语言需要设计模式吗-图3

上面,从 chan 获取数据:

Go 语言核心思想:"Do not communicate by sharing memory; instead, share memory by communicating." 你可以看看这本书名叫:Effective Go

如果接收者,接收一个空对象,也会发生什么情况?

代码示例 :

也会报错如下:

总结 :

chan 类型的特点:chan 如果为空,receiver 接收数据的时候就会阻塞等待,直到 chan 被关闭或者有新的数据到来.有这种个机制,就可以实现 wait/notify 的设计模式.

相关面试题:

以上就是土嘎嘎小编为大家整理的go语言需要设计模式吗相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章