1. go语言介绍
Go(又称为 Golang)是由 Google 开发的一种静态类型、编译型的开源编程语言。它以其简洁、高效和并发支持而闻名,特别适合于构建网络服务和分布式系统。
2. 安装 Go 语言
- 访问 Go 官网 下载对应操作系统的安装包。
- 安装后设置环境变量,确保
GOPATH和GOROOT被正确配置。
2. 基础语法
-
变量声明:使用
var关键字声明变量。go var a int = 10 -
常量:使用
const关键字声明常量。go const Pi = 3.14 -
数据类型:包括基本数据类型(int, float, bool, string)和复合数据类型(数组,切片,结构体等)。
go var name string = "Kimi" var age int = 30
3. 控制结构
-
if语句:不需要括号包围条件。
go if age := 30; age > 18 { fmt.Println("Adult") } -
switch语句:可以没有
break。go switch day := 2; day { case 1: fmt.Println("Monday") case 2: fmt.Println("Tuesday") default: fmt.Println("Unknown day") } -
for循环:Go中没有while,使用for实现循环。
go for i := 0; i < 10; i++ { fmt.Println(i) }
4. 函数
-
定义函数:使用
func关键字。go func add(x, y int) int { return x + y } -
多返回值:函数可以返回多个值。
go复制 func minMax(a, b int) (int, int) { if a > b { return b, a } return a, b }
5. 错误处理
-
错误检查:使用
error类型进行错误处理。go复制 f, err := os.Open("file.txt") if err != nil { log.Fatal(err) }
猜数字项目实践学习笔记
首先加入输入输出字符功能,初始化参数,生成随机数字,加入用户提示,读取用户输入,去除换行符,加入错误处理,将用户输入字符串转换为整数,验证输入,给出用户反馈,设置结束标识。
package main
import (
"bufio"
"fmt"
"math/rand"
"os"
"strconv"
"strings"
"time"
)
func main() {
maxNum := 100
rand.Seed(time.Now().UnixNano())
secretNumber := rand.Intn(maxNum)
// fmt.Println("The secret number is ", secretNumber)
fmt.Println("Please input your guess")
reader := bufio.NewReader(os.Stdin)
for {
input, err := reader.ReadString('\n')
if err != nil {
fmt.Println("An error occured while reading input. Please try again", err)
continue
}
input = strings.Trim(input, "\r\n")
guess, err := strconv.Atoi(input)
if err != nil {
fmt.Println("Invalid input. Please enter an integer value")
continue
}
fmt.Println("You guess is", guess)
if guess > secretNumber {
fmt.Println("Your guess is bigger than the secret number. Please try again")
} else if guess < secretNumber {
fmt.Println("Your guess is smaller than the secret number. Please try again")
} else {
fmt.Println("Correct, you Legend!")
break
}
}
}
代码分析:
package main:定义了代码的主包,这是Go程序的入口点。import:导入了Go语言的标准库,用于输入输出、随机数生成、字符串处理和时间处理。func main():程序的入口函数。maxNum := 100:定义了一个变量maxNum,用于设置随机数的最大值。rand.Seed(time.Now().UnixNano()):设置随机数生成器的种子,使用当前时间的纳秒级时间戳,以确保每次运行程序时生成的随机数不同。secretNumber := rand.Intn(maxNum):生成一个0到maxNum-1之间的随机整数,并将其赋值给secretNumber变量。这个数字是用户需要猜测的“秘密数字”。fmt.Println("Please input your guess"):提示用户输入他们的猜测。reader := bufio.NewReader(os.Stdin):创建一个新的bufio.Reader对象,用于读取用户的输入。for {:开始一个无限循环,用户将在这个循环中不断猜测数字,直到猜对为止。input, err := reader.ReadString('\n'):从标准输入读取一行文本,直到遇到换行符。if err != nil { ... }:如果读取输入时发生错误,打印错误信息并继续循环。input = strings.Trim(input, "\r\n"):去除用户输入的字符串两端的换行符。guess, err := strconv.Atoi(input):尝试将用户输入的字符串转换为整数。if err != nil { ... }:如果转换失败(例如,用户输入的不是数字),打印错误信息并继续循环。fmt.Println("You guess is", guess):打印用户的猜测。if guess > secretNumber { ... } else if guess < secretNumber { ... } else { ... }:比较用户的猜测和秘密数字,给出相应的提示,并在猜对时退出循环。break:如果用户的猜测正确,退出循环
Go 语言(Golang)是一种静态类型、编译型、并发支持的语言,由 Google 开发。以下是一些关于 Go 语言的关键特性和最佳实践:
关键特性
- 简洁的语法:Go 语言的设计哲学是简洁至上,语法简单,易于学习。
- 静态类型:Go 是静态类型语言,变量的类型在编译时确定。
- 编译型语言:Go 语言编写的程序会被编译成机器码,直接在操作系统上运行,不需要解释器。
- 并发支持:Go 语言内置了对并发的原生支持,通过 goroutines 和 channels 实现。
- 内存管理:Go 语言有垃圾回收机制,自动管理内存。
- 跨平台:可以在不同的操作系统和架构上编译和运行 Go 程序。
- 标准库:Go 拥有丰富的标准库,覆盖了网络编程、文件处理、加密算法等多个领域。
最佳实践
- 代码格式化:使用
go fmt命令格式化代码,保持代码风格的一致性。 - 依赖管理:使用
go mod管理项目依赖,确保项目的可移植性和版本控制。 - 单元测试:编写单元测试,使用
go test命令运行测试,确保代码的健壮性。 - 代码审查:进行代码审查,提高代码质量和团队协作效率。
- 错误处理:合理使用多返回值的错误处理机制,避免使用
panic和recover除非必要。 - 接口设计:使用接口定义行为,而不是具体的实现,提高代码的灵活性和可扩展性。
- 并发编程:合理使用 goroutines 和 channels,避免共享状态和竞态条件。
- 避免全局变量:尽量减少全局变量的使用,以减少依赖和提高代码的模块化。
- 接口和类型断言:谨慎使用接口和类型断言,避免在代码中硬编码类型信息。
- 日志记录:使用标准库
log或第三方库进行日志记录,便于调试和监控。 - 避免不必要的复杂性:遵循 KISS 原则(Keep It Simple, Stupid),避免不必要的设计和实现复杂性。
- 性能优化:使用
pprof等工具进行性能分析和优化。 - 代码重构:定期重构代码,提高代码质量和可维护性。
Go 语言以其简洁、高效和强大的并发支持而受到开发者的喜爱,适用于构建高性能的网络服务和分布式系统。掌握 Go 语言的最佳实践,可以帮助开发者写出更高效、更可靠的代码。