文章目录
- 一、教学目标
- 二、教学重难点
- (一)重点
- (二)难点
- 三、教学方法
- 四、教学过程
- (一)Go语言简介
- (二)环境搭建
- 1. 下载和安装Go语言开发环境
- 2. 配置Go语言环境变量
- 3. 命令行查看Go语言版本
- 4. 安装Gore交互式工具
- 5. 使用Gore交互式环境
- (三)基础语法
- 1. 变量与数据类型
- 2. 控制语句
- (1)条件语句
- (2)循环语句
- (四)函数
- 1. 基本语法
- 2. 案例演示
- (五)结构体
- 1. 基本语法
- 2. 案例演示
- (六)并发编程
- 1. 基础知识
- 2. 案例演示
- (七)Web开发
- 1. 基础知识
- 2. 案例演示
- (八)实践练习
- (九)总结
- 五、课后作业
一、教学目标
- 掌握Go语言的基础语法
- 理解Go语言的编程结构
- 案例演示Go语言的应用
二、教学重难点
(一)重点
- Go语言的变量、数据类型、控制语句
- Go语言的函数和结构体的定义与使用
(二)难点
- 理解Go语言的并发编程模型
- 运用所学知识开发实用案例
三、教学方法
- 讲授法、实例演示法、实践法
四、教学过程
(一)Go语言简介
- 简单介绍Go语言的起源、特点,如高效、简洁、并发性好等,激发学生学习兴趣。
(二)环境搭建
1. 下载和安装Go语言开发环境
- 下载网址:https://go.dev/dl/
- 下载到本地
-
安装Go语言
-
安装在默认位置
-
安装完成
-
2. 配置Go语言环境变量
- GO_HOME:
C:\Program Files\Go
- Path:
%GO_HOME%\bin;
3. 命令行查看Go语言版本
- 执行命令:
go version
4. 安装Gore交互式工具
- 初始化一个新的Go模块,执行命令:
go mod init gore-demo
- 安装Gore,执行命令:
go install github.com/x-motemen/gore/cmd/gore@latest
5. 使用Gore交互式环境
- 进入Gore交互式环境输出一条信息,然后退出
(三)基础语法
1. 变量与数据类型
- 演示如何声明变量( var 关键字),如 var num int = 10 ,也介绍简短声明 num := 10
- 讲解Go语言的基本数据类型( int 、 float 、 string 、 bool 等)
- 编写go程序:
ex3_1.go
package main
import "fmt"
func main() {
var age int = 25
fmt.Println("age =", age)
var score float64 = 87.5
fmt.Println("score =", score)
var name string = "howard"
fmt.Println("name =", name)
var flag bool = true
fmt.Println("flag =", flag)
}
- 运行程序,查看结果
2. 控制语句
(1)条件语句
- if - else 语句的使用
- 编写go程序:
ex3_2_1.go
package main
import "fmt"
func main() {
age := 20
if age >= 18 {
fmt.Println("已成年,欢迎访问~")
} else {
fmt.Println("未成年,拒绝访问~")
}
}
- 运行程序,查看结果
(2)循环语句
- for 循环的多种形式
- 编写程序:
ex3_2_2.go
package main
import "fmt"
func main() {
// 基本的for循环
sum := 0
for i := 1; i <= 100; i++ {
sum = sum + i
}
fmt.Println("1 + 2 + 3 + ... + 100 =", sum)
// 类似while的for循环
sum = 0
i := 1
for i <= 100 {
sum = sum + i
i++
}
fmt.Println("1 + 2 + 3 + ... + 100 =", sum)
}
- 运行程序,查看结果
(四)函数
1. 基本语法
2. 案例演示
- 编写程序:
ex4_1.go
package main
import "fmt"
// add函数用于计算两个整数的和
func add(a int, b int) int {
return a + b
}
func main() {
// 调用add函数并打印结果
fmt.Println("sum =", add(100, 150))
}
- 运行程序,查看结果
(五)结构体
1. 基本语法
2. 案例演示
- 编写程序:
ex5_1.go
package main
import "fmt"
// User 结构体定义,包含 Name 和 Age 两个字段
type User struct {
Name string
Age int
}
// main 函数,程序的入口点
func main() {
// 使用字段初始化值创建 User 实例
user1 := User{"Alice", 30}
fmt.Printf("User1: %s, %d years old\n", user1.Name, user1.Age)
// 使用字段名初始化创建 User 实例
user2 := User{Name: "Bob", Age: 25}
fmt.Printf("User2: %s, %d years old\n", user2.Name, user2.Age)
// 使用 new 函数创建 User 实例的指针
user3 := new(User)
user3.Name = "Charlie"
user3.Age = 35
fmt.Printf("User3: %s, %d years old\n", user3.Name, user3.Age)
// 调用 User 结构体的方法
user1.Introduce()
user2.Introduce()
user3.Introduce()
}
// Introduce 方法,用于打印用户的自我介绍
func (u User) Introduce() {
fmt.Printf("Hi, I'm %s and I'm %d years old.\n", u.Name, u.Age)
}
- 代码说明:这个Go程序定义了一个
User
结构体,包含Name
和Age
两个字段。在main
函数中,我们创建了三个User
实例:user1
、user2
和user3
。user1
和user2
是通过字段初始化值和字段名初始化的方式创建的,而user3
是通过new
函数创建的指针类型的实例。每个User
实例都调用了Introduce
方法,该方法打印出用户的自我介绍。这个程序展示了如何在Go语言中定义结构体、创建结构体实例以及为结构体关联方法。 - 运行程序,查看结果
(六)并发编程
1. 基础知识
2. 案例演示
- 编写程序:
ex6_1.go
package main
import (
"fmt"
"sync"
"time"
)
// 定义一个工作函数,模拟并发执行的任务
func worker(id int, wg *sync.WaitGroup) {
defer wg.Done() // 通知WaitGroup这个goroutine已经完成
for i := 0; i < 5; i++ {
fmt.Printf("Worker %d says hello %d\n", id, i+1)
time.Sleep(time.Millisecond * 100) // 模拟工作
}
}
func main() {
var wg sync.WaitGroup // 创建一个WaitGroup实例
// 启动多个goroutine并发执行worker函数
for i := 1; i <= 5; i++ {
wg.Add(1) // 增加WaitGroup的计数器
go worker(i, &wg) // 启动一个新的goroutine
}
wg.Wait() // 等待所有goroutine完成
fmt.Println("All workers have finished.")
}
- 代码说明:这个Go程序是一个并发编程的示例,它演示了如何使用goroutine和
sync.WaitGroup
来管理并发执行的任务。程序中定义了一个worker
函数,它模拟了一个并发执行的任务,打印五次"hello"消息,并在每次打印后暂停100毫秒。在main
函数中,我们创建了一个sync.WaitGroup
实例,并启动了五个goroutine来并发执行worker
函数。每个goroutine在开始执行前都会通过wg.Add(1)
增加WaitGroup
的计数器,表示有一个任务需要完成。当每个worker
函数执行完毕后,它们会通过defer wg.Done()
通知WaitGroup
一个任务已经完成。最后,main
函数中的wg.Wait()
会阻塞,直到WaitGroup
的计数器归零,即所有goroutine都完成了它们的任务。这个程序展示了Go语言并发编程的基本模式,包括goroutine的创建、sync.WaitGroup
的使用以及并发任务的同步。 - 运行程序,查看结果
(七)Web开发
1. 基础知识
2. 案例演示
- 编写程序:
ex7_1.go
package main
import (
"fmt"
"net/http"
)
// helloHandler 是一个简单的HTTP处理函数,用于响应客户端的请求
func helloHandler(w http.ResponseWriter, r *http.Request) {
// 使用fmt.Fprintf向客户端发送响应
fmt.Fprintf(w, "Hello Go World~")
}
func main() {
// 使用http.HandleFunc将URL路径"/"与helloHandler函数关联
http.HandleFunc("/", helloHandler)
// 使用http.ListenAndServe启动服务器,监听8080端口,没有特定的处理器
// 因此使用默认的ServeMux
http.ListenAndServe(":8080", nil)
}
- 代码说明:这个Go程序创建了一个简单的Web服务器,它只处理对根路径"/“的GET请求,并响应"Hello, World!”。程序首先导入了
fmt
和net/http
包,然后在helloHandler
函数中使用fmt.Fprintf
向http.ResponseWriter
发送响应。在main
函数中,使用http.HandleFunc
将根路径"/"与helloHandler
函数关联,最后调用http.ListenAndServe
在8080端口启动服务器。这个服务器会一直运行,直到被外部中断。 - 运行程序,查看结果
(八)实践练习
- 布置练习题,如实现一个简单的命令行工具,接受用户输入的两个数并计算它们的和。
- 巡视学生练习情况,及时给予指导。
(九)总结
- 回顾Go语言的基础语法、函数、结构体和并发编程等知识点
- 强调本次案例中涉及的实际应用开发思路
五、课后作业
- 完善课堂上的练习题,增加更多功能,如计算差、积、商等
- 研究Go语言中 map 数据结构的用法,并编写一个简单的程序展示