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
)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)