一文入门Go语言

科技   2024-06-14 09:01   上海  

最近几年Go语言非常火,也有不少公司使用Go来开发运维平台,比如小编之前写的一篇文章:开发一套云上数据库巡检系统

这一篇文章,就来讲一下从0入门Go语言。

1 Go语言的开发环境准备

访问:

https://go.dev/dl/

点击上面箭头所指的链接下载Go安装包,再双击下载之后的安装包就可以安装。

执行Windows + R ,进入CMD,执行go,看是否有命令帮忙。

再安装Go编译器GoLand

进入到:

https://www.jetbrains.com/go/

点击Download下载安装包,再双击下载之后的安装包进入安装步骤。

安装好Goland之后,再打开。

点击新建项目:

会进入下图的配置:

Location,就是项目的路径;

GOROOT,就是我们安装Go的路径;

Environment,可以增加国内代理:

GOPROXY=https://goproxy.cn


进到项目里面之后,先新建一个文件夹main,再新建一个文件hello.go,效果如下:

这样,我们的一个Go的开发环境就准备好了。


2 编写简单的Go程序

package main
import "fmt"
func main() { fmt.Println("Hello, MySQL!")}

这里解释一下上面代码里的含义:

  • package main 把这个文件归属到main包,每个文件最开始都要指定这个文件所属的包;
  • import "fmt"表示引入fmt这个包,应用这个包之后,就可以调用这个包里的函数;
  • func 后面接函数,main是函数名,这里的main代表的是主函数,如果执行程序,就是执行的main这个函数。
  • 再通过fmt里的函数Println输出后面的字符串。


运行方式,点击这个文件,再右键,点击 Run xxx,如下图:


3 Go赋值

隐式类型定义

比如:

var intA=10var charA = "a"

编译器可以根据变量的值来推断类型。


显式类型定义

var charB string = "b"

也就是变量定义时,写出变量类型。


除了使用上面这种形式进行赋值,还可以使用

intB := 20


如果是多个同类型的赋值,可以使用:

var intC, intD = 30,40


可以通过下面这段代码来测试Go赋值:

package main
import "fmt"
func main() { var intA = 10 var charA = "a" var charB string = "b" intB := 20 var intC, intD = 30,40 fmt.Printf("intA=%v,intB=%v,intC=%v,intD=%v,charA=%v",intA,intB,intC,intD,charA,charB)}


4 Go输出

我们先来看下fmt.Print:属于标准输出流

比如

fmt.Print("aaa")

但是Print不能换行


再来看下fmt.Printf

跟Print不同的是,它可以格式化输出

我们可以来试一下:

charA := "MongoDB"fmt.Printf("hello,%s",charA)

这里的%s 来占位,后面的变量就能替换前面%s的占位符

但是Printf也不会换行。


如果需要换行,可以使用Println

比如:

fmt.Println("aaa")fmt.Println("bbb")


5 数组和切片

数组和切片,都可以看成存储数据的容器

数组是固定长度的容器,用来存放相同类型的多个元素。

比如声明一个包含5个整数的数组,可以用:

var numbers [5]int

在声明数组的时候写入数据,可以使用:

level := [3]string{"a","b","c"}


切片跟数组类似,但是切片是动态长度的

比如定义一个切片,可以用:

var names []string

定义一个有元素的切片,可以执行:

num := []int{1, 2, 3, 4, 5}


切片的部分引用:

slice := num[1:3]

包含了索引为1和2的元素(第一个元素的索引是0),值是[2, 3]。

使用append()向切片添加新元素:

numbers = append(num, 6)

6 结构体struct

结构体是一种复合数据类型,可以把不同的数据类型组合在一起,比如:

type stuInfo struct {    name string    age int}

可以先创建结构体,再到后面的代码中使用,比如:

type Person struct {    name string    age  int}
func main() { // 创建一个Person类型的变量 p := Person{ name: "Alice", age: 30, }
// 访问和修改结构体的字段 fmt.Println(p.name) // Alice p.age = 31 fmt.Println(p.age) // 31}

大家可以试下上面代码运行的效果。


7 集合map

一种键值对的集合

可以通过这种方式声明一个map

ages := make(map[string]int)

在声明的同时初始化map并添加初始键值对:

ages := map[string]int{    "John":  20,    "Alice": 22,    "Bob":   19,}

要向map中添加新的键值对,你可以使用以下语法:

ages["Emily"] = 21

通过指定键,你可以访问map中对应的值:

fmt.Println(ages["John"])  // 输出:20


8 Go条件判断

package main
import ( "fmt")
func main() { score := 85
if score >= 90 && score <= 100 { return "A" } else if score >= 80 && score < 90 { return "B" } else if score >= 70 && score < 80 { return "C" } else if score >= 60 && score < 70 { return "D" } else if score >= 0 && score < 60 { return "F" } else { return "无效的分数" } fmt.Printf("得分:%d,等级:%s\n", score, grade)}

这里注意语法就行,逻辑跟其他语言差不多。


9 Go循环

先来举一个例子:

for i := 1; i <= 5; i++ {    fmt.Println(i)}

其中:

for 初始语句; 条件表达式; 后续语句 {    // 循环体代码}

另外还有一种形式,比如:

fruits := []string{"apple", "banana", "orange"}for _, fruit := range fruits {    fmt.Println(fruit)}

其中:

for 索引, 值 := range 可迭代对象 {    // 循环体代码}


10 Go函数

我们先来创建一个用来倒计时的测试函数

func countDown(timeDuration int) (endOutput string) {    for i := timeDuration;i>=0;{        fmt.Println(i)        time.Sleep(1 * time.Second)        i--    }    endOutput = "倒计时完成"    return}

其中:

  • countDown 是函数名;

  • timeDuration 是函数的输入变量,int表示这个输入变量的类型;

  • endOutput 是函数的输出变量,同样,string 表示输出的类型。


比如我们要使用这个函数,如下就是完整的代码:

package main
import ( "fmt"    "time")
func main() { a := countDown(10) // 调用倒计时函数    fmt.Println(a)  // 输出函数的返回}

func countDown(timeDuration int) (endOutput string) { for i := timeDuration;i>=0;{ fmt.Println(i) time.Sleep(1 * time.Second) i-- } endOutput = "倒计时完成" return}



好的,关于Go的基础入门知识点,就讲到这里;

学了这些,再借助AI,就可以完成一些简单的项目了。

当然,具体怎么通过Go完成DBA的一些项目,这些在DBA体系课(点击跳转查看详情)里也有详细讲解,比如课程中类似下面这些项目,都是用Golang开发的,并且包括详细开发过程:

云数据库(MySQL)慢查询系统开发;

云上数据库巡检系统开发(调用API);

DB自动化平台开发;

监控系统中开发发送企业微信告警的webhook;

自建数据库巡检系统开发;

数据库高可用测试程序;

等等。

MySQL数据库联盟
关注后,回复“高可用”,可获取8篇MySQL高可用文章
 最新文章