文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Go语言酷的一些东西

2024-12-10 15:16

关注

Go是一种相对较新的语言,由Google的Robert Griesemer,Rob Pike和Ken Thompson于2009年之前创建。它是开源的,因此任何人都可以为此做出贡献并提出新功能。

替代C ++似乎主要是为了使Google的软件工程师的工作更轻松。 它针对系统编程,例如云系统,分布式系统和微服务。

一些特点

Go是静态类型的。 所有变量都需要使用给定类型声明。 bool,string和" number"(int,uint,float64,complex128等)类型是基本类型。 然后,也可以声明结构(就像在C中一样)。 这对于在编译时检测错误很有帮助。 哦,顺便说一句,Go是一种编译语言。

Go代码编译非常快! 这是创建者试图改进的有关C和C ++的关键方面之一,他们做到了! 此外,由于代码直接编译为机器代码,因此执行时间非常快。 这也使可执行文件高度可移植到具有相同平台的其他计算机上。

Go有接口。 对于面向对象的程序员,这可能有点令人失望,但是Go没有类。 它不支持继承。 但是,它确实支持结构的创建以及为它们的方法的定义。 此外,它支持接口的定义,该接口支持松散耦合的系统。 还有一件很酷的事情是,您可以定义一个空接口(interface {}),然后将声明一个通用对象!

Go专注于处理错误。 Go不支持例外。 它的哲学是函数必须返回返回值(或多个值,因为它可以同时返回多个变量)和错误值。 这使开发人员可以考虑发生故障时该怎么办。 但是,还有一些与例外类似的东西,即"恐慌"和"恢复"机制。

去有垃圾收集。 这是对C和C ++的重大改进。 它是一种非常有效的语言,它增加了大多数最近使用的语言所具有的非常有用的功能。

Go支持内置并发。 到目前为止,这是Go语言最酷的功能! 它非常有效且易于使用。 我们将在下一节中详细说明。

Go中的并发

首先,让我们区分并发和并行。 并发是关于同时但不一定同时执行的独立进程。 并行意味着执行是同时的。 因此,并行化只能通过多个内核来实现,而并发只能通过正确调度不同的进程在一个内核上完成。 Go实现了非常高效的并发性,并且还支持并行性。

人们认为Go遵循参与者模型的并发性。 在此模型中,参与者是计算的原始单位。 接收消息并根据消息进行某种计算的东西。 他们获得输入,执行操作并提供输出。 Go中的演员是goroutines。

角色完全相互隔离。 这意味着它们不共享内存,而是通过其他结构进行通信,从而为它们提供同步。 Go为此实现了渠道。 即使可以通过不同的goroutine来使用共享内存结构,使用通道也可以使并发真正容易且安全。

最好的部分是goroutines非常轻巧。 Go计划在系统线程上执行goroutine,从而允许多个goroutine在单个OS线程上同时运行。 这样做的好处是减少了例程的堆栈(与OS线程的1MB相比,减少了4KB),并节省了OS线程之间的上下文切换成本,这比在goroutine之间切换要大得多。 我们甚至可以以非常低的成本同时运行数十万个goroutine!

我们还提到过,在go中使用并发很容易。 让我们看一个例子!

  1. package main 
  2. import “fmt”func add_string(string_to_add string, input_ch chan string, output_ch chan string) { 
  3.   fmt.Println(“Running: add_string”)  result_string :<-input_ch + string_to_add  output_ch <- result_string}func initialize_string(initial_string string, input_ch chan string) { 
  4.   fmt.Println(“Running: initialize_string”)  input_ch <- initial_string}func main() { 
  5.   input_ch :make(chan string) 
  6.   output_ch :make(chan string) 
  7.   go add_string(“Hello World!”, input_ch, output_ch) 
  8.   go initialize_string(“”, input_ch) 
  9.   fmt.Println(“Waiting for goroutines”) 
  10.   fmt.Println(<-output_ch)} 

运行此代码后,输出为:

  1. Waiting for goroutines 
  2. Running: initialize_string 
  3. Running: add_string 
  4. Hello World! 

因此,在这里我们看到运行并发的go例程有多么容易。 只需定义一个函数并在调用它之前添加" go"即可。 就这么简单! 这将安排goroutine,但调用者函数的执行将继续。 在这种情况下,我们调用该函数以添加" Hello World!"。 第一。 然后是初始化函数,然后我们打印消息" Waiting for goroutines",但控制台显示了不同的打印消息顺序。 为什么?

如前所述,为了同步goroutine,我们可以使用通道。 我们首先创建一个输入通道和一个输出通道,然后以以下方式使用它们。 add_string函数将等待,直到输入通道中有内容为止。 然后我们调用该函数以空字符串初始化输入通道。 但是,主函数继续执行并显示" Waiting for goroutines"。 然后,它等待输出通道中包含某些内容。 这将允许初始化函数将空字符串放入输入通道。 add_string函数将唤醒并添加" Hello World!"。 到输出通道,然后主功能将再次唤醒并最终打印完整的消息。 容易吧?

Go在哪里使用?

Go用于开发许多您可能知道的解决方案,例如Google,YouTube,Soundcloud,Docker等。但是,在Worldsensing中使我们开始了解Go的一种是Chirpstack。 这是一个开源的LoRaWAN网络服务器堆栈。 它提供了一个用于设备管理的Web界面,并提供了许多方法来集成其他应用程序,例如API,MQTT队列等。它具有模块化的体系结构,如您所见。


Chirpstack是可配置的,并且易于部署。 您甚至可以找到带有docker-compose.yml文件的开源项目,该文件可以轻松启动所有内容!

如您所见,Go等出色的语言使开发人员可以创建出色的项目。

 

来源:今日头条内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯