Golang学习记录
1 go语言结构
Go语言(又称Golang)是一种静态类型的、编译型的编程语言,由Google开发。Go语言的结构清晰简洁,旨在提高编程效率和代码可读性。以下是Go语言的一些基本结构:
- 
包(Packages) 
 在Go语言中,代码被组织成包。包是Go程序的基本构建块,用于封装相关的函数、变量和常量。每个Go程序都至少包含一个包,即main包,它是程序的入口点。
- 
导入(Imports) 
 在Go程序的开头,可以声明要导入的其他包。导入的包提供了程序所需的函数、变量和其他资源。
- 
函数(Functions) 
 函数是执行特定任务的代码块。在Go语言中,函数可以接收输入参数并返回结果。函数是组织代码和重用逻辑的关键方式。
- 
变量(Variables) 
 变量用于存储程序中的数据。在Go语言中,变量必须在使用之前声明,并指定其类型。Go语言支持多种数据类型,如整数、浮点数、字符串、布尔值等。
- 
控制结构(Control Structures) 
 Go语言提供了常见的控制结构,如条件语句(if-else)、循环语句(for、range)、选择语句(switch-case)等。这些控制结构用于控制程序的执行流程。
- 
数组、切片和映射(Arrays, Slices, and Maps) - 数组是具有固定长度的序列,用于存储相同类型的元素。
- 切片是对数组的抽象,提供了更灵活的操作方式。
- 映射(Map)是一种无序的键值对集合,用于存储和检索数据。
 
- 
结构体(Structs) 
 结构体是一种用户定义的数据类型,用于表示一组相关的字段。结构体可以包含不同类型的字段,并且可以通过方法来扩展其功能。
- 
接口(Interfaces) 
 接口定义了一组方法的契约,但不提供这些方法的实现。接口用于实现多态性,允许不同类型的对象共享相同的行为。
- 
错误处理(Error Handling) 
 Go语言鼓励显式处理错误,而不是忽略它们。函数可以返回多个值,其中最后一个值通常用于表示错误。调用者可以检查错误并采取适当的措施。
- 
并发(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)
}
在这个示例中,我们定义了两个结构体类型:Person 和 Student。Student 结构体匿名嵌入了 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)通常用于实现面向对象编程中的数据和方法的封装。在这个例子中,我们通过结构体嵌入的方式实现了类似继承的效果。
如何编译?
- 
首先,确保你的Go代码保存在一个以 .go为扩展名的文件中,例如main.go。
- 
打开终端或命令行窗口,切换到代码所在的目录。 
- 
运行 go build命令,Go编译器会自动寻找当前目录下的Go源文件,并编译成可执行文件。如果你的代码文件名是main.go,编译命令如下:go build main.go如果编译成功,同目录下会出现一个可执行文件,名称与源代码所在目录的名字相同(如果在包 main中)。但如果你想要指定输出的可执行文件名,你可以这样做:go build -o myprogram main.go这里 -o myprogram指定了输出文件的名字为myprogram(在Windows上将会是myprogram.exe)。
- 
运行可执行文件。在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
)

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号