与所有编程语言一样,有很多可用于编写您希望完成的软件或自动化的选项,对于新程序员或一种新的语言的人来说,这可能会使他们变得笨拙。幸运的是,总的来说,用新语言使自己加快了自己的速度。例如,所有语言都具有变量和函数之类的组件,这意味着您可以从一种语言中获取所学并在另一种语言中使用它。
在这篇博客文章中,您将学习几种可以从今天开始以使自己熟悉的方法。
基本功能
函数在高水平上是代码的构建块。它们是您代码将要做的事情。您的代码将返回hello world
吗?它将对AWS进行身份验证吗?它会建造机器人以接管世界吗?
一个带有其中一个函数的GO代码文件包含:
-
package
关键字,然后是包装名称。如果将main
视为软件包名称,则意味着您使用的GO文件是应用程序堆栈中的输入点。main
软件包是运行所有子软件包的用途。如果您编写脚本或某些自动化代码,那么您的代码逻辑很可能会在main
软件包中。 -
import
关键字是您可以在代码中使用标准和第三方库的方法。例如,以下代码中使用的fmt
软件包允许您执行各种功能,包括将某物(例如字符串)在终端/控制台上打印的功能。 -
func
关键字定义了一个新功能,然后定义了功能名称。在下面的示例中,它调用了main
函数,该功能通常用作您在此博客文章的高级函数部分中学习的儿童/子函数的入口点。
要记住的一个重要信息是,当您定义main
软件包时,它必须在其中具有main
函数。 main
软件包是由go run
命令之类的东西运行的。它们内部没有main
的包装直接运行,它们从main
包装中运行。如果您尝试在没有main
函数的情况下运行main
软件包,则会获得类似于下面的错误。
function main is undeclared in the main package
以下是基本GO功能的示例。
package main
import "fmt"
func main() {
fmt.Println("Hello World")
}
高级功能
在上一节中,您看到了如何通过将大多数代码逻辑放入main
函数中创建的函数。尽管您可能会在各种脚本和自动化功能上看到此功能,但是您可能会将主要功能视为具有代码核心逻辑的功能。相反,您很可能会看到子函数内部的核心代码逻辑。
子函数是在main
函数之外创建的函数,通常由main
函数调用。为什么?简短的答案是,GO是一种基于功能的编程语言。它没有使用方法或类,而是利用其所有功能的功能。 main
函数(就像main
软件包一样)是代码中的入口点。您可以使用main
函数来调用子功能。
看下面的示例,您可以看到testing()
函数从main
函数中调用。然后,main
函数运行testing()
函数。
package main
import "fmt"
func main() {
testing()
}
func testing() {
fmt.Println("hello from the testing function")
}
变量
学习功能后,下一个逻辑步骤是学习变量。变量是您可以保存将随着时间变化而不是在内存中变化的位置,而不是硬编码代码中的某个位置。
例如,让我们说您有一个云区域,该区域可能会根据代码运行的位置在某个时候改变。如果将像us-east-1
之类的硬码硬编码到您的代码中,则意味着每次运行us-east-1
之外的代码时,您都必须浏览代码并将其更改。这是一个重大麻烦。
相反,您可以创建一个包含值us-east-1
的变量,并且在整个代码中使用变量时仅更改一个值。
例如:
region := "us-east-1"
该变量存储在内存中,这意味着它是短暂的,您可以始终根据运行方式和地点更改值。
在本节中,您将学习在GO中创建变量的三种主要方法。
速记
当您看到在GO中创建的变量时,通常会看到它看起来如下:
sayhi := "hello world"
sayhi
零件是钥匙,"hello world"
部分是值(因此键/值对)。结肠后跟等于符号(:=
)意味着正在定义一个变量。
GO函数内部的速记变量的一个示例在下面。
package main
import "fmt"
func main() {
sayhi := "hello world"
fmt.Println(sayhi)
}
满的
尽管在10分中有9倍您会看到所用的速记变量,但也有长达/完整变量。
完整变量包含:
- The
var
keyword - 变量的名称
- 变量类型(字符串,int,float等)
- 值
许多工程师喜欢完整变量,因为它告诉您并确切地定义了变量类型的内容,这节省了很多时间,以稍后进行故障排除,何时何时返回了预期的正确值。 GO是一种静态打字的语言,这意味着您指定的任何类型都是必须返回的类型。您将在此博客文章的返回类型部分中了解更多信息。
package main
import "fmt"
func main() {
var sayhi string = "hello world"
fmt.Println(sayhi)
}
全球的
您创建变量的最后一种方式是全局变量。请注意下面的代码示例如何,sayhi
变量在函数范围之外。原因是您可能有时间在多个功能的内部使用相同的变量。如果变量存在于函数内部,则其值仅与该函数相关。但是,如果该变量不在函数之外,则它是一个全局变量,可以在整个代码中使用。
package main
import "fmt"
var sayhi string = "hello world"
func main() {
testing()
testing2()
}
func testing() {
fmt.Println(sayhi)
}
func testing2() {
fmt.Println(sayhi + " again")
}
常数
常数本质上是一个硬编码的变量。这是一个永远无法改变的价值。使用变量,您可以在代码的一个部分中定义值,然后更改代码另一部分中相同变量的值。随着恒定的值,该值永远不会改变。
如果您很熟悉,它类似于python中的tuple
。
下面的代码示例显示了主函数内部常数的示例。
使用const
关键字初始化常数。请注意,看起来与Longhand变量几乎相同。唯一不同的是您指定const
关键字,而不是var
关键字。
package main
import "fmt"
func main() {
const hiagain string = "hello world"
fmt.Println(hiagain)
}
返回类型
在此博客文章的最后一部分中,您将了解返回特定价值的含义。当您返回值时,这意味着您在代码内指定该函数应返回的内容。是返回字符串吗? int?代码的某些输出以后要使用?
指定返回时,您将使用return
关键字,然后使用想要从功能返回的内容。请注意,当您在下面的代码中返回值时,您不专门将输出打印到屏幕上。您简单地将返回的值稍后使用。
例如,也许您使用GO函数来初始化与Kubernetes群集的连接。然后,当您在代码中运行特定任务时,您使用该功能连接到Kubernetes群集。如果要使用GO创建一个Kubernetes Pod,则必须连接到群集,并且可以通过创建连接到群集并返回Kubeconfig的函数来完成此操作。
由于GO是一种静态打字的语言,因此返回类型必须匹配返回的值。例如,如果将string
指定为返回类型并尝试返回int
,则会收到一个指示类型不匹配的错误。
package main
import "fmt"
func main() {
name("Mike")
}
func name(name string) string {
fmt.Println(name)
return name
}
结论
go是一种令人惊叹的编程语言,适用于任何与系统有关,与应用程序有关的和与自动化有关的内容。这种语言当然具有一种尺寸的感觉,并且几乎可以用于任何东西。如果您与Kubernetes合作,那是一种很好的语言,因为Kubernetes是在Go中写的。