Golang学习记录


1 go语言结构

Go语言(又称Golang)是一种静态类型的、编译型的编程语言,由Google开发。Go语言的结构清晰简洁,旨在提高编程效率和代码可读性。以下是Go语言的一些基本结构:

  1. 包(Packages)
    在Go语言中,代码被组织成包。包是Go程序的基本构建块,用于封装相关的函数、变量和常量。每个Go程序都至少包含一个包,即main,它是程序的入口点。

  2. 导入(Imports)
    在Go程序的开头,可以声明要导入的其他包。导入的包提供了程序所需的函数、变量和其他资源。

  3. 函数(Functions)
    函数是执行特定任务的代码块。在Go语言中,函数可以接收输入参数并返回结果。函数是组织代码和重用逻辑的关键方式。

  4. 变量(Variables)
    变量用于存储程序中的数据。在Go语言中,变量必须在使用之前声明,并指定其类型。Go语言支持多种数据类型,如整数、浮点数、字符串、布尔值等。

  5. 控制结构(Control Structures)
    Go语言提供了常见的控制结构,如条件语句(if-else)、循环语句(for、range)、选择语句(switch-case)等。这些控制结构用于控制程序的执行流程。

  6. 数组、切片和映射(Arrays, Slices, and Maps)

    • 数组是具有固定长度的序列,用于存储相同类型的元素。
    • 切片是对数组的抽象,提供了更灵活的操作方式。
    • 映射(Map)是一种无序的键值对集合,用于存储和检索数据。
  7. 结构体(Structs)
    结构体是一种用户定义的数据类型,用于表示一组相关的字段。结构体可以包含不同类型的字段,并且可以通过方法来扩展其功能。

  8. 接口(Interfaces)
    接口定义了一组方法的契约,但不提供这些方法的实现。接口用于实现多态性,允许不同类型的对象共享相同的行为。

  9. 错误处理(Error Handling)
    Go语言鼓励显式处理错误,而不是忽略它们。函数可以返回多个值,其中最后一个值通常用于表示错误。调用者可以检查错误并采取适当的措施。

  10. 并发(Concurrency)
    Go语言内置了对并发的支持,通过goroutines和channels实现。Goroutines是轻量级的线程,用于并发执行代码。Channels是用于在goroutines之间传递数据的管道。

下面是一个使用结构体的Go程序示例:

package main

import "fmt"

// 定义一个Person结构体,表示一个人
type Person struct {
    Name string // 人的名字
    Age  int    // 人的年龄
}

// 定义一个Student结构体,它嵌入了Person结构体,并添加了一个额外的字段
type Student struct {
    Person       // 匿名嵌入Person结构体,继承了其字段和方法
    StudentID int // 学生的学号
}

// main函数是程序的入口点
func main() {
    // 创建一个Student实例
    stu := Student{
        Person: Person{ // 初始化Person部分
            Name: "Alice",
            Age:  20,
        },
        StudentID: 1001, // 初始化Student特有的字段
    }

    // 访问Student实例中的字段
    fmt.Printf("Student Name: %s\n", stu.Name)
    fmt.Printf("Student Age: %d\n", stu.Age)
    fmt.Printf("Student ID: %d\n", stu.StudentID)

    // 也可以直接修改Student实例中的字段
    stu.Name = "Bob"
    stu.Age = 21

    // 再次访问修改后的字段
    fmt.Printf("Updated Student Name: %s\n", stu.Name)
    fmt.Printf("Updated Student Age: %d\n", stu.Age)
}

在这个示例中,我们定义了两个结构体类型:PersonStudentStudent 结构体匿名嵌入了 Person 结构体,这意味着 Student 继承了 Person 的所有字段和方法。我们在 main 函数中创建了一个 Student 实例,并初始化了它的字段。然后,我们通过点符号访问和修改了这些字段的值,并打印了它们。

运行这段代码,您将会看到类似下面的输出:

Student Name: Alice
Student Age: 20
Student ID: 1001
Updated Student Name: Bob
Updated Student Age: 21

请注意,由于Go语言中没有类(class)的概念,结构体(struct)通常用于实现面向对象编程中的数据和方法的封装。在这个例子中,我们通过结构体嵌入的方式实现了类似继承的效果。

如何编译?

  1. 首先,确保你的Go代码保存在一个以.go为扩展名的文件中,例如main.go

  2. 打开终端或命令行窗口,切换到代码所在的目录。

  3. 运行go build命令,Go编译器会自动寻找当前目录下的Go源文件,并编译成可执行文件。如果你的代码文件名是main.go,编译命令如下:

    go build main.go
    

    如果编译成功,同目录下会出现一个可执行文件,名称与源代码所在目录的名字相同(如果在包main中)。但如果你想要指定输出的可执行文件名,你可以这样做:

    go build -o myprogram main.go
    

    这里-o myprogram指定了输出文件的名字为myprogram(在Windows上将会是myprogram.exe)。

  4. 运行可执行文件。在Unix-like系统上,通过下面的命令来运行你的程序:

    ./myprogram
    

    在Windows上,直接双击可执行文件或者在命令提示符下运行:

    myprogram.exe
    

此外,如果你想在不生成可执行文件的情况下直接运行你的Go程序,你可以使用go run命令:

go run main.go

这个命令会编译并执行你的程序,但不会生成可执行文件。任何标准输出(比如通过fmt.Println打印的内容)都会直接显示在终端上。



2 变量的声明

局部变量的声明
方法一: 声明一个变量,默认值是0

var a int

方法二:声明一个变量,初始化一个值

var b int = 100

方法三:在初始化的时候,可以省去数据类型,通过值自动匹配当前变量的类型

var c = 100
var cc = "abcd"

方法四:(常用的方法)省去关键字var,直接自动匹配

e := 100
f := "hello"

全局变量的声明
声明全局变量 方法一、二、三是可以的
方法四不支持全局,:= 只能用在函数体内来声明


多变量的声明
单行写法

var gA int = 100
var gB = 200

多行的多变量声明

var (
    vv int  = 100
    jj bool = true
)

reference

posted @   guanyubo  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示