Go 语言入门笔记|青训营

45 阅读4分钟

Go 语言入门笔记|青训营

Go语言基础语法的学习笔记

简介

GoLang(简称为Go)是一门由Google开发的开源编程语言,是一种并发、高效和简单的编程语言,特别适用于构建大规模网络服务和分布式系统。

Go语言具有以下特点:

  1. 并发性:Go语言内置支持并发编程,使用Goroutines(轻量级线程)和Channels(通道)来实现并发操作。
  2. 性能优化:Go语言的设计目标之一是提供出色的性能。它具有高效的垃圾回收机制,并且能够利用多核处理器的优势。
  3. 静态编译:Go语言是静态类型的编程语言,并且支持交叉编译。这意味着您可以在一个平台上编译Go代码,并在其他平台上运行,而无需对代码进行修改。
  4. 内置工具:Go语言提供了许多内置工具,如格式化代码工具(gofmt)、性能分析工具(pprof)等,这些工具有助于编写高质量的代码和调试应用程序。

Go语言的入门

1.Hello, World!

从一个传统的"Hello, World!"程序开始。创建一个名为hello.go的文件,内容如下:

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

在命令行中,使用以下命令运行程序:

go run hello.go

终端得到输出:"Hello, World!"。我建议如果是简单编写程序使用Vscode即可,当然goland的代码补全更为舒适。

2. 变量和数据类型

以下是一些常见的基本数据类型:

// 整数类型
var num int = 10
// 浮点数类型
var pi float64 = 3.14
// 布尔类型
var isTrue bool = true
// 字符串类型
var message string = "Hello, Go!"

下面是简洁的变量声明与赋值

x := 5

在这里需要吐槽一下,Go语言与C、C++、C#、Java等语言的差距很大,变量类型在后面,赋值语句也较为独特,初学时很容易报错。

3.函数

下面是一个简单的函数示例:

func add(a, b int) int {
    return a + b
}

函数名在前,参数类型在后。在本例中,函数名是add,它接受两个整数类型的参数ab,并返回它们的和。函数可以有多个参数和返回值,并且支持多返回值,这一点与python相同。

4.控制流

Go支持常见的控制流语句,如ifforswitch

if语句:

if age >= 18 {
    fmt.Println("成年人")
} else {
    fmt.Println("未成年人")
}

for循环:

在Go中 for与while语句进行了合体

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

switch语句:

switch可以替代多个if else的组合

day := "Monday"
switch day {
case "Monday":
    fmt.Println("星期一")
case "Tuesday":
    fmt.Println("星期二")
default:
    fmt.Println("其他")
}

5. 数组和切片

Go支持数组和切片。数组在声明时需要指定长度,而切片则是动态大小的。

切片中较为常用的函数为 append与 slice,append 来追加元素, slice可以用来进行切片。

// 数组
var numbers [5]int = [5]int{1, 2, 3, 4, 5}

// 切片
var mySlice []int = numbers[1:4]

6. 结构体

结构体是一种自定义的复合数据类型,用于存储不同类型的字段。

type Person struct {
    name string
    age  int
}

func main() {
    person := Person{name: "Alice", age: 30}
    fmt.Println(person.name, person.age)
}

7.结构体方法

虽然没有面对对象但是在 Golang 里面可以为结构体去定义一些方法,这使得结构体存在一些“类成员函数”。在实现结构体的方法的时候分带指针与不带指针的写法。带指针的参数在函数内会对结构体进行修改,函数内使用的是不带指针的参数的拷贝,是无法对结构体进行修改的。

8. 并发

Go原生支持并发编程,通过goroutinechannel实现并发操作。

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

func main() {
    go printNumbers() // 启动goroutine
    time.Sleep(time.Second * 1) // 等待一秒钟,以确保goroutine有足够的时间执行
}

对Go语言的看法与体会

首先,go语言与其他主流的编程语言在语法上的差距很大。Go语言的编程风格偏向于面向过程编程,对面对对象变成的特性支持较弱。Go语言的语法相对简单和一致,代码具有良好的可读性。在一定程度上简化了编程,避免冗余的语法和复杂的概念,从而使代码更易于维护和理解。Go标准库非常强大且丰富,涵盖了网络、加密、IO、测试等多个方面。

Golang使用了错误值(error)来处理异常情况,而不是像其他一些编程语言那样使用异常机制。这使得我这样的小白也可以简单的入手Go语言的错误处理,更好的展示了编写中出现的错误。