Go语言入门笔记总结(上) | 青训营
以下是关于Go语言入门的一些笔记总结(上):
Go语言是一种简洁高效的编程语言,适用于各种应用领域Go语言入门涵盖了基本语法、常用特性和控制结构等关键概念,以下是一份总结:
1.包和导入
在Go中,包(package)是一种组织代码的方式,用于将相关的功能组合在一起。每个Go源文件开头的
package
声明指定了该文件所属的包。一个包可以包含多个相关的函数、类型和变量等。包的名称一般与包含的文件夹名称相同。
导入其他包
在Go中,要使用其他包中的功能,需要使用 import
语句导入这些包。导入的包可以来自标准库,也可以是自己创建的包。
下面是一个示例,演示如何创建自定义包、导入标准库包以及使用导入的功能:
- 创建自定义包:
创建一个名为 mathutil
的文件夹,在其中创建一个名为 math.go
的文件:
// mathutil/math.go
package mathutil
func Add(a, b int) int {
return a + b
}
func Subtract(a, b int) int {
return a - b
}
- 使用自定义包:
在主程序中,可以导入自定义包并使用其中的功能:
// main.go
package main
import (
"fmt"
"your-module-path/mathutil" // 使用您实际的模块路径
)
func main() {
result1 := mathutil.Add(5, 3)
result2 := mathutil.Subtract(10, 4)
fmt.Println("Addition:", result1)
fmt.Println("Subtraction:", result2)
}
- 导入标准库包:
直接导入Go标准库中的包,例如 fmt
和 time
:
package main
import (
"fmt"
"time"
)
func main() {
currentTime := time.Now()
fmt.Println("Current time:", currentTime)
}
这个示例展示了如何创建自定义包、导入它并使用其中的函数,以及如何导入标准库包并使用其功能。通过这种方式,可以有效地组织代码,使其更具模块性和可重用性。
2.定义函数
函数是在程序中执行特定任务的基本代码块。它们用于将代码分解为可重用和可维护的单元,以提高代码的可读性和组织性。以下是关于函数的详细解释,以及附带的代码示例。
在Go中,使用 func
关键字来定义函数。函数的基本语法如下:
func functionName(parameters) returnType {
// 函数体
return result
}
functionName
是您定义的函数的名称。parameters
是函数的参数列表,每个参数由名称和类型组成。returnType
是函数的返回值类型。- 函数体内的代码是函数的实际逻辑。
return
语句用于指定函数的返回值。
示例:函数定义和调用
下面是一个示例,展示如何定义函数并在主程序中调用它:
package main
import "fmt"
func add(a, b int) int {
return a + b
}
func main() {
result := add(3, 5)
fmt.Println("Result:", result)
}
在这个示例中,定义了一个名为 add
的函数,它接受两个整数参数 a
和 b
,并返回它们的和。在 main
函数中,调用了 add
函数并将结果存储在变量 result
中,然后使用 fmt.Println
打印出结果。
参数和返回值
函数可以有零个、一个或多个参数,这些参数传递给函数的输入值。同样,函数可以返回一个值或多个值作为输出。
func add(a, b int) int {
return a + b
}
func divide(a, b float64) (float64, error) {
if b == 0 {
return 0, errors.New("division by zero")
}
return a / b, nil
}
在上述示例中,add
函数接受两个整数参数并返回一个整数。divide
函数接受两个浮点数参数,返回一个浮点数结果和一个错误。错误类型通过 errors.New
函数创建,用于处理潜在的错误情况。
匿名函数和闭包
Go还支持匿名函数,这是一种没有函数名的函数。匿名函数通常用于传递给其他函数,或者在需要时直接调用。
func main() {
add := func(a, b int) int {
return a + b
}
result := add(2, 3)
fmt.Println("Result:", result)
}
此外,Go还支持闭包,这是一种在函数内部引用外部变量的方式。闭包可以在函数中定义并返回,用于保持状态和状态。
总结
函数是Go语言中的基本构建块,用于执行特定任务并提高代码的模块性和可维护性。通过合理的参数和返回值设计,可以创建更具有灵活性和可扩展性的代码。匿名函数和闭包则提供了更高级的特性,用于处理更复杂的问题。 变量和常量是Go语言中非常重要的概念,它们用于存储和管理数据。以下是对变量和常量的详细解释,以及附带的代码示例。
3.变量
变量和常量是Go语言中非常重要的概念,它们用于存储和管理数据。以下是对变量和常量的详细解释,以及附带的代码示例。
变量的声明
在Go中,使用 var
关键字来声明变量。变量是用来存储和管理数据的容器。变量可以显式指定类型,也可以进行类型推断。
以下是一些示例:
显式指定类型
package main
import "fmt"
func main() {
var age int
age = 30
var name string
name = "Alice"
fmt.Println("Name:", name)
fmt.Println("Age:", age)
}
类型推断
package main
import "fmt"
func main() {
age := 30
name := "Bob"
fmt.Println("Name:", name)
fmt.Println("Age:", age)
}
常量
在Go中,使用 const
关键字声明常量。常量是不可更改的值,它们在编译时确定。常量声明时必须赋予初始值。
package main
import "fmt"
func main() {
const pi = 3.14159
const daysInWeek = 7
fmt.Println("Pi:", pi)
fmt.Println("Days in a week:", daysInWeek)
}
多变量声明
Go语言支持同时声明多个变量。您可以使用 var
关键字,也可以使用 :=
进行类型推断。
package main
import "fmt"
func main() {
var width, height int = 10, 5
fmt.Println("Width:", width)
fmt.Println("Height:", height)
name, age := "Alice", 25
fmt.Println("Name:", name)
fmt.Println("Age:", age)
}
枚举
虽然Go语言没有显式的枚举类型,但您可以使用常量组来模拟枚举。以下是一个示例:
package main
import "fmt"
const (
Monday = iota + 1
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
)
func main() {
fmt.Println("Monday:", Monday)
fmt.Println("Tuesday:", Tuesday)
fmt.Println("Sunday:", Sunday)
}
总结
变量和常量是Go语言中用于存储和管理数据的重要概念。可以使用 var
关键字声明变量,可以显式指定类型或进行类型推断。常量使用 const
关键字声明,并在声明时必须赋予初始值。同时,Go语言支持同时声明多个变量,并使用常量组来模拟枚举。这些特性使我们能够有效地处理数据,并编写更清晰和可维护的代码。
4.控制流
控制流是编程中用于决定程序执行路径的关键概念。在Go语言中,使用条件语句、循环和开关语句来控制程序的执行流程。以下是对控制流的详细解释,以及附带的代码示例。
条件语句:if、else if 和 else
在Go中,使用 if
、else if
和 else
语句来进行条件判断。下面是一个示例,展示如何使用这些语句:
package main
import "fmt"
func main() {
num := 10
if num > 5 {
fmt.Println("Number is greater than 5")
} else if num == 5 {
fmt.Println("Number is equal to 5")
} else {
fmt.Println("Number is less than 5")
}
}
循环:for 循环和 range 迭代
在Go中,使用 for
循环进行迭代。除了常见的 for i := 0; i < n; i++
形式外,Go还支持 for
用作 while
循环。
package main
import "fmt"
func main() {
// 常规的 for 循环
for i := 0; i < 5; i++ {
fmt.Println(i)
}
// 当作 while 使用
sum := 0
for sum < 10 {
sum += 2
fmt.Println("Sum:", sum)
}
}
此外,使用 range
关键字可以遍历切片、数组、映射、通道等集合。
package main
import "fmt"
func main() {
numbers := []int{1, 2, 3, 4, 5}
for index, value := range numbers {
fmt.Printf("Index: %d, Value: %d\n", index, value)
}
}
开关语句:switch
switch
语句用于根据不同情况选择执行的分支。它可以与常规的 case
一起使用,也可以与值的比较一起使用。
package main
import "fmt"
func main() {
day := "Monday"
switch day {
case "Monday":
fmt.Println("It's the first day of the week")
case "Friday":
fmt.Println("It's the last workday of the week")
default:
fmt.Println("It's just another day")
}
}
总结
控制流是程序中决定执行路径的关键部分。在Go语言中,使用 if
、else if
、else
来进行条件判断,使用 for
循环进行迭代,还可以使用 range
迭代集合。switch
语句用于根据不同情况选择执行的分支。这些控制流结构使程序能够根据不同条件做出不同的决策和动作,从而实现更复杂的逻辑。