基础语法|青训营

96 阅读6分钟

Go 语言入门指南:基础语法和常用特性解析

1.什么是Go语言

Go,也称为 Golang 或 Go 语言,是Google 开发的一种开源编程语言。软件开发人员在一系列操作系统和框架中使用 Go 来开发 Web 应用程序、云和网络服务以及其他类型的软件。

2.基本语法

Hello World

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

第一行package main代表这个文件属于main包的一部分,main包也就是程序的入口包。

第三行导入标准库里面的FMT包。这个包主要是用来往屏幕输入输出字符串、格式化字符串。

import下面是main函数,main函数里面调用了fmt.Println输出helloworld。要运行这个程序的话,我们就直接go run helloworld.go。

变量

Go语言是一种强类型语言,变量在声明时必须指定其类型,并且类型不能改变。常见的变量类型包括整数类型(int、int8、int16、int32、int64)、浮点数类型(float32、float64)、布尔类型(bool)、字符串类型(string)等。通过明确指定变量类型,可以提高代码的安全性和可靠性。

package main

import "fmt"

func main() {
    var name string = "John"
    var age int = 30
    var isStudent bool = true

    fmt.Println(name, age, isStudent)
}

条件与循环

Go语言提供了条件语句(if-else)和循环语句(for)来实现逻辑控制。条件语句可根据条件表达式的结果选择执行不同的代码块,而循环语句则用于重复执行特定的代码块。在循环语句中,可以使用关键字breakcontinue来控制循环的流程。

package main

import "fmt"

func main() {
    score := 90

    if score >= 90 {
        fmt.Println("优秀")
    } else if score >= 60 {
        fmt.Println("及格")
    } else {
        fmt.Println("不及格")
    }

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

switch语句

Go语言的switch语句更加灵活,支持多个条件分支和表达式匹配。它可以根据表达式的值选择执行对应的代码块。与其他编程语言不同的是,在Go语言中,每个分支的执行完毕后会自动退出,无需使用break语句。

ackage main

import "fmt"

func main() {
    numbers := []int{1, 2, 3, 4, 5}

    fmt.Println(numbers[0])     // 输出第一个元素
    fmt.Println(numbers[1:4])   // 输出索引1到3的元素
    fmt.Println(numbers[:3])    // 输出前三个元素
    fmt.Println(numbers[2:])    // 输出索引2及之后的元素
}

数组

数组是一种固定大小的数据结构,可以存储相同类型的元素。在Go语言中,数组的大小是固定的,并且通过索引访问元素。例如,var arr [5]int声明了一个包含5个整数的数组。可以使用循环来遍历数组元素。

切片

切片是对底层数组的动态窗口,它提供了更灵活的长度和容量。切片可以根据需要增加或缩减其长度。与数组不同,切片的长度可以在运行时进行改变。切片的创建方式为make([]T, length, capacity),其中T表示元素类型,length表示长度,capacity表示容量。

map

map是Go语言内置的一种关联数据类型,也称为字典。它由键值对组成,键必须唯一且无序。通过键可以快速检索到对应的值。使用make(map[keyType]valueType)可创建一个空的map,例如ages := make(map[string]int)

range

range关键字用于迭代数组、切片、字符串、map等数据结构。它提供了一种简洁的方式来遍历这些数据结构,并返回索引和值。例如,for index, value := range array

函数

函数是Go语言的基本构建块之一。它们用于封装可重用的代码块,并接收参数并返回结果。在Go语言中,函数可以有多个返回值,并支持匿名函数和闭包的概念。函数的定义格式为func functionName(parameters) (returnType) { ... }

package main

import "fmt"

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

func main() {
    result := add(3, 5)
    fmt.Println(result)
}

指针

指针是变量的内存地址。通过指针,可以直接访问或修改变量的值。在Go语言中,可以使用&操作符获取变量的地址,使用*操作符获取指针指向的值。

package main

import "fmt"

func main() {
    var num int = 10
    var ptr *int = &num

    fmt.Println(*ptr)   // 输出指针指向的值
}

结构体与结构体方法

结构体是一种自定义的复合数据类型,它可以包含不同类型的字段。通过定义结构体,可以创建具有多个相关字段的自定义类型。结构体方法是与结构体关联的函数,它们可以对结构体进行操作和修改。

package main

import "fmt"

type Person struct {
    Name string
    Age  int
}

func (p Person) SayHello() {
    fmt.Printf("Hello, my name is %s\n", p.Name)
}

func main() {
    person := Person{Name: "John", Age: 30}
    person.SayHello()
}

错误处理

错误处理是编写健壮程序的关键部分。Go语言使用error类型来表示错误,并通过返回错误值来进行处理。下面是一个错误处理的示例代码:


import ( "errors" "fmt" )

func divide(a, b float64) (float64,

继续

error) { if b == 0 { return 0, errors.New("除数不能为零") } return a / b, nil }

func main() { result, err := divide(10, 0) if err != nil { fmt.Println("发生错误:", err) } else { fmt.Println("结果:", result) } }

字符串操作与格式化

Go语言提供了丰富的字符串操作函数和格式化工具。下面是一个字符串操作和格式化的示例代码:

package main

import (
    "fmt"
    "strings"
)

func main() {
    str1 := "Hello, World!"
    str2 := "hello"

    fmt.Println(strings.Contains(str1, "World"))     // 判断是否包含子字符串
    fmt.Println(strings.ToUpper(str2))               // 将字符串转换为大写
    fmt.Printf("%s %d\n", str1, len(str1))           // 字符串格式化输出
}

JSON处理

Go语言内置了对JSON的支持,可以方便地进行JSON的编码和解码。下面是一个JSON处理的示例代码:

package main

import (
    "encoding/json"
    "fmt"
)

type Person struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}

func main() {
    person := Person{Name: "John", Age: 30}

    jsonData, _ := json.Marshal(person)      // 结构体转换为JSON字符串
    fmt.Println(string(jsonData))

    var decodedPerson Person
    json.Unmarshal(jsonData, &decodedPerson) // JSON字符串解析为结构体
    fmt.Println(decodedPerson.Name, decodedPerson.Age)
}

时间处理

Go语言提供了强大的时间处理功能,可以进行时间的格式化、解析和计算等操作。下面是一个时间处理的示例代码:

package main

import (
    "fmt"
    "time"
)

func main() {
    currentTime := time.Now()

    fmt.Println(currentTime.Format("2006-01-02"))    // 时间格式化
    fmt.Println(currentTime.AddDate(0, 1, 0))        // 增加一个月
}

数字解析

Go语言提供了用于数字解析的函数,可以将字符串转换为对应的数字类型。下面是一个数字解析的示例代码:

package main

import (
    "fmt"
    "strconv"
)

func main() {
    numberStr := "1234"

    number, _ := strconv.Atoi(numberStr)     // 字符串转换为整数
    fmt.Println(number)

    numberFloat, _ := strconv.ParseFloat(numberStr, 64)    // 字符串转换为浮点数
    fmt.Println(numberFloat)
}

进程信息

在Go语言中,可以通过os包获取当前进程的信息。下面是一个获取进程信息的示例代码:

package main

import (
    "fmt"
    "os"
)

func main() {
    processID := os.Getpid()
    processPath, _ := os.Executable()

    fmt.Println("Process ID:", processID)
    fmt.Println("Process Path:", processPath)
}