开始(Golang)
#编程 #devops #go #kubernetes

与所有编程语言一样,有很多可用于编写您希望完成的软件或自动化的选项,对于新程序员或一种新的语言的人来说,这可能会使他们变得笨拙。幸运的是,总的来说,用新语言使自己加快了自己的速度。例如,所有语言都具有变量和函数之类的组件,这意味着您可以从一种语言中获取所学并在另一种语言中使用它。

在这篇博客文章中,您将学习几种可以从今天开始以使自己熟悉的方法。

基本功能

函数在高水平上是代码的构建块。它们是您代码将要做的事情。您的代码将返回hello world吗?它将对AWS进行身份验证吗?它会建造机器人以接管世界吗?

一个带有其中一个函数的GO代码文件包含:

  1. package关键字,然后是包装名称。如果将main视为软件包名称,则意味着您使用的GO文件是应用程序堆栈中的输入点。 main软件包是运行所有子软件包的用途。如果您编写脚本或某些自动化代码,那么您的代码逻辑很可能会在main软件包中。
  2. import关键字是您可以在代码中使用标准和第三方库的方法。例如,以下代码中使用的fmt软件包允许您执行各种功能,包括将某物(例如字符串)在终端/控制台上打印的功能。
  3. 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中写的。