首先
首先,我将供认£
我第一次看到一条路时,我发现语言很奇怪而无私。
- 您如何没有尝试/捕捉?
- 你为什么所有这些不同的语法?
- 为什么没有“每种”语言具有的功能xyz?
这些是我问自己的一些问题。
在我决定第二次机会学习并决定学习的几年后。
入口,首先,有一个建议:我什至没有专注于我什至没有做的愚蠢细节。
语言比bonita语法要多得多。
很可能在旅途中与您习惯的方式不同,因此没有稀缺。
介绍
Go是一种由Google开发人员创建的语言,并于2009年推出了药丸。
语言天生专注于简单,稳定性和生产力,旨在开发复杂且长期存在的应用程序。
在本文中,我们将详细了解我认为最重要的语言的观点。
tonpicos:
- 可屈服性
- 汇编和可移植性
- concorróncia
- 丰富的标准库
- 简单
- 本地性能谱图福特拉龙
- 本地证词
1.可逆转
Go在2012年推出了版本稳定的1.0,并承诺新版本1.x.y是返回的。
换句话说,这意味着使用1.0经文在2012年编写的一种方法将在2023年使用Versatage 1.20.5进行编译和运行。
Google和许多其他公司在其内部项目中测试GO的清单,以确保该语言保持兼容,并且没有任何破坏。这样做的优点是,如果一个数百万生产线和测试的项目尚未破坏,那么较小的项目将破坏。
是非常改进的。一部分在某些情况下可以违反兼容性的承诺,例如:
- 安全故障校正
- 语言中的错误校正
和其他一些可观的场景。
语言的落后最重要的是让我们发展长期存在的国家,而不必不断纠正和适应新语言更改的代码。
2.汇编和便携性
在GO的正式实施中,该课程是为可以执行的所有操作的可执行人员编译的,这减少了头痛的rie。
GO编译并优化了构建时间的时间,因此程序不会使用内存或CPU优化其在执行时间的提示,与Python,Java,JavaScript DO,Java,Java,Java,Java,Java,Java,Java,Java,Java,Java,Java,Java,Java, Java php等。
一个重要的细节是,在Go中也可以将其编译到其他架构中。这意味着您在ARM处理器中的Linux上可以编译您的代码以在Windows 64位上运行。
看起来似乎不是这样,但是在C中,这样做并不是很琐碎。
GO程序的交叉编译示例:
GOOS=windows GOARCH=386 go build main.go # windows 32 bits
GOOS=linux GOARCH=arm go build main.go # linux arm
3.竞争
go具有类似于threads的Goroutines,它的打火机和由运行时管理 do。
go将葫芦分发给CPU的数量,这使得可以并行处理事物,并且还可以大量使用I/O assíncrono,这在应用程序中可以大量使用I// I/ I/ I// o,作为Web应用程序。
语言还具有频道(频道),这是通信和同步gourthines的强大工具。
频道是我用uma série de 5 artigos专用于它们的语言的一种非常重要的舌头。
4.丰富的标准图书馆
go带有一个非常丰富的包装库,您可以在应用程序中使用。
这些只是几个例子:
-
io
:处理阅读,写作等。字节 -
os
:处理OS(文件,Env,Process等) -
time
:获得,转换和格式化时间 -
testing
:用于自动测试,包括基准和模糊 -
crypto
:用于算法和恒定加密 -
net
:处理TCP,UDP,DNS -
net/http
:适用于客户和服务器http 1和2 -
html/template
:模板引擎para html
5.简单
当有人听到某人说“ C©非常简单的语言”时,很多人感到害怕。
但是,当某人说“ c©simple”并不意味着在c©Molleza中编程,而是语言本身更简约,它没有多种不同的方法可以做同一件事,没有出色的行为,等等。
一些如何应用于GO的一些示例:
- 理想情况下是一种做某事的方法
- 或相当于“建筑商” E“驱逐舰”Sé£或Exploites
- 语言只有25个保留单词(vs vs of Java,95 C ++)
- 规格有大约100页(java的+800,+1800,来自C ++)
- stdlib在不需要时防止抽象和间接使用
注意:Java和C ++仅用于比较目的
一种简单的语言的优势在于,您将自己奉献的时间更少,学习语言本身,而更多的时间发展和学习更重要的概念。
6.本地性能分析工具
我没有将这个Tâpic作为第一个,因为大多数解决方案在大多数情况下都具有“足够好”的性能,并且优化通常非常准时。
por,当它的应用程序每天都有百万个通常的端点时,这种语言几乎没有内存,并且每秒管理数千个请求是一个差异。
go具有一个本机工具来衡量纪念用途,CPU,Gourthines等,使您可以根据Trica而不是假设优化性能。
此外,由于Versatile 1.20,GO支持Profile-guided optimization (PGO),它将使用在绩效配置文件中获得的数据作为parano来优化编译时的代码。
7.本地测试工具
go随着自动测试,模糊和基准测试的本地支持。
通过自动测试,您可以验证您的方式始终是按预期的。
func TestFormatarNomeDeCartao(t *testing.T) {
nome := "Zezinho da Silva Freitas Junior"
esperado := "Zezinho da S F Junior"
resultado := FormatarNomeDeCartao(nome)
if resultado != esperado {
t.Errorf("esperado: %s, obtido: %s", esperado, resultado)
}
}
通过模糊测试,您可以使用初始值进行测试,在我们的示例中,该值将是一个名称,Fuzzer将开始创建此值的变体并使用它们调用其功能。
func FuzzFormatarNomeDeCartao(f *testing.F) {
f.Add("Zezinho da Silva")
f.Fuzz(func (t *testing.T, nome string) {
resultado := FormatarNomeDeCartao(nome)
if len(resultado) > len(nome) {
t.Errorf("O nome abreviado '%s' está maior que o original '%s'", resultado, nome)
}
})
}
通过基准测试,您可以检查功能运行,使用内存,分配等的DIO的时间。
func BenchmarkFormatarNomeDeCartao(b *testing.B) {
for i := 0; i < b.N; i++ {
FormatarNomeDeCartao("Zezinho da Silva Freitas Junior")
}
}