Go语言入门教案

文章目录

  • 一、教学目标
  • 二、教学重难点
    • (一)重点
    • (二)难点
  • 三、教学方法
  • 四、教学过程
    • (一)Go语言简介
    • (二)环境搭建
      • 1. 下载和安装Go语言开发环境
      • 2. 配置Go语言环境变量
      • 3. 命令行查看Go语言版本
      • 4. 安装Gore交互式工具
      • 5. 使用Gore交互式环境
    • (三)基础语法
      • 1. 变量与数据类型
      • 2. 控制语句
        • (1)条件语句
        • (2)循环语句
    • (四)函数
      • 1. 基本语法
      • 2. 案例演示
    • (五)结构体
      • 1. 基本语法
      • 2. 案例演示
    • (六)并发编程
      • 1. 基础知识
      • 2. 案例演示
    • (七)Web开发
      • 1. 基础知识
      • 2. 案例演示
    • (八)实践练习
    • (九)总结
  • 五、课后作业

一、教学目标

  1. 掌握Go语言的基础语法
  2. 理解Go语言的编程结构
  3. 案例演示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结构体,包含NameAge两个字段。在main函数中,我们创建了三个User实例:user1user2user3user1user2是通过字段初始化值和字段名初始化的方式创建的,而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!”。程序首先导入了fmtnet/http包,然后在helloHandler函数中使用fmt.Fprintfhttp.ResponseWriter发送响应。在main函数中,使用http.HandleFunc将根路径"/"与helloHandler函数关联,最后调用http.ListenAndServe在8080端口启动服务器。这个服务器会一直运行,直到被外部中断。
  • 运行程序,查看结果
    在这里插入图片描述

(八)实践练习

  1. 布置练习题,如实现一个简单的命令行工具,接受用户输入的两个数并计算它们的和。
  2. 巡视学生练习情况,及时给予指导。

(九)总结

  1. 回顾Go语言的基础语法、函数、结构体和并发编程等知识点
  2. 强调本次案例中涉及的实际应用开发思路

五、课后作业

  1. 完善课堂上的练习题,增加更多功能,如计算差、积、商等
  2. 研究Go语言中 map 数据结构的用法,并编写一个简单的程序展示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/915421.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[2024最新] java八股文实用版(附带原理)---java集合篇

介绍一下常见的list实现类&#xff1f; ArrayList 线程不安全&#xff0c;内部是通过数组实现的&#xff0c;继承了AbstractList&#xff0c;实现了List&#xff0c;适合随机查找和遍历&#xff0c;不适合插入和删除。排列有序&#xff0c;可重复&#xff0c;当容量不够的时候…

7天用Go从零实现分布式缓存GeeCache(学习)(3)

目录结构 ├── geecache │ ├── byteview.go │ ├── cache.go │ ├── consistenthash │ │ ├── consistenthash.go │ │ └── consistenthash_test.go │ ├── geecache.go │ ├── go.mod │ ├── http.go │ ├── lru │ …

OpenHarmony-1.启动流程

OpenHarmony启动流程 1.kernel的启动 流程图如下所示&#xff1a;   OpenHarmony(简称OH)的标准系统的底层系统是linux&#xff0c;所以调用如下代码&#xff1a; linux-5.10/init/main.c: noinline void __ref rest_init(void) {struct task_struct *tsk;int pid;rcu_sch…

HTB:Precious[WriteUP]

目录 连接至HTB服务器并启动靶机 使用nmap对靶机TCP端口进行开放扫描 使用curl访问靶机80端口 使用ffuf爆破一下子域 使用浏览器访问该域名 使用curl访问该域名响应头 使用exiftool工具查看该pdf信息 横向移动 USER_FLAG&#xff1a;adf5793a876a190f0c08b3b6247cec32…

jsmind 思维导图 + monaco-editor + vue3 + ts

Index.vue: <template><div class"m-jsmind-wrap"><div class"m-jsmind-header"><el-button type"primary" click"() > handleReset()">重置</el-button><el-button type"primary" cl…

在arm64架构下, Ubuntu 18.04.5 LTS 用命令安装和卸载qt4、qt5

问题&#xff1a;需要在 arm64下安装Qt&#xff0c;QT源码编译失败以后&#xff0c;选择在线安装&#xff01; 最后安装的版本是Qt5.9.5 和QtCreator 4.5.2 。 一、ubuntu安装qt4的命令(亲测有效)&#xff1a; sudo add-apt-repository ppa:rock-core/qt4 sudo apt updat…

AIGC学习笔记(5)——AI大模型开发工程师

文章目录 AI大模型开发工程师004 垂直领域的智能在线搜索平台1 智能在线搜索平台需求分析大模型不够“聪明”增强大模型的方式需求分析2 智能在线搜索平台方案设计方案设计技术选型大模型版本GLM-4大模型注册使用Google Cloud平台注册创建可编程的搜索引擎3 智能在线搜索平台代…

【React】状态管理之Redux

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 状态管理之Redux引言1. Redux 的核心概念1.1 单一数据源&#xff08;Single Sou…

Unity类银河战士恶魔城学习总结(P124 CharacterStats UI玩家的UI)

【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili 教程源地址&#xff1a;https://www.udemy.com/course/2d-rpg-alexdev/ 本章节实现了玩家属性栏&#xff0c;仓库&#xff0c;物品栏UI的制作 UI_StatSlot.cs 这个脚本是用来在Unity的UI上显示玩家属性&#xf…

蓝桥杯每日真题 - 第7天

题目&#xff1a;&#xff08;爬山&#xff09; 题目描述&#xff08;X届 C&C B组X题&#xff09; 解题思路&#xff1a; 前缀和构造&#xff1a;为了高效地计算子数组的和&#xff0c;我们可以先构造前缀和数组 a&#xff0c;其中 a[i] 表示从第 1 个元素到第 i 个元素的…

Llama旋转位置编码代码实现及详解

旋转位置编码RoPE 在旋转位置编码与Transformer和BERT之间的区别中介绍了旋转位置编码&#xff08;RoPE&#xff09;的特点和优势&#xff0c;这种输入长度动态可变的优势使得在Llama编码时&#xff0c;不需要掩码将多余的嵌入掩住。为了详细了解RoPE是如何实现的&#xff0c;…

WebSocket和HTTP协议的性能比较与选择

WebSocket和HTTP协议的性能比较与选择 引言&#xff1a; 在web应用开发中&#xff0c;无论是实时聊天应用、多人在线游戏还是实时数据传输&#xff0c;网络连接的稳定性和传输效率都是关键要素之一。目前&#xff0c;WebSocket和HTTP是两种常用的网络传输协议&#xff0c;它们…

WebRTC项目一对一视频

开发步骤 1.客户端显示界面 2.打开摄像头并显示到页面 3.websocket连接 4.join、new-peer、resp-join信令实现 5.leave、peer-leave信令实现 6.offer、answer、candidate信令实现 7.综合调试和完善 1.客户端显示界面 步骤&#xff1a;创建html页面 主要是input、button、vide…

GIS基础知识:WKT格式、WKB格式

什么是WKT格式&#xff1f; WKT&#xff08;Well-Known Text&#xff09;是一种用于描述地理空间几何对象的文本格式。 这种格式是由Open Geospatial Consortium&#xff08;OGC&#xff09;定义并维护的一种开放标准&#xff0c;主要用于在不同的GIS系统和数据库之间交换空间…

力扣(LeetCode)611. 有效三角形的个数(Java)

White graces&#xff1a;个人主页 &#x1f649;专栏推荐:Java入门知识&#x1f649; &#x1f439;今日诗词:雾失楼台&#xff0c;月迷津渡&#x1f439; ⛳️点赞 ☀️收藏⭐️关注&#x1f4ac;卑微小博主&#x1f64f; ⛳️点赞 ☀️收藏⭐️关注&#x1f4ac;卑微小博主…

Mac Nginx 前端打包部署

安装homebrew /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 安装Nginx brew install nginx nginx相关命令 nginx启动命令&#xff1a;nginx nginx -s reload #重新加载配置 nginx -s reopen #重启 nginx -s stop #…

利用VMware workstation pro 17安装 Centos7虚拟机以及修改网卡名称

通过百度网盘分享的文件&#xff1a;安装虚拟机必备软件 链接&#xff1a;https://pan.baidu.com/s/1rbYhDh8x1hTzlSNihm49EA?pwdomxy 提取码&#xff1a;omxy 123网盘 https://www.123865.com/s/eXPrVv-UsKch 提取码:eNcy 先自行安装好VMware workstation pro 17 设置虚拟机…

《实时流计算系统设计与实现》-Part 2-笔记

做不到实时 做不到实时的原因 实时计算很难。通过增量计算的方式来间接获得问题的&#xff08;伪&#xff09;实时结果&#xff0c;即使这些结果带有迟滞性和近似性&#xff0c;但只要能够带来尽可能最新的信息&#xff0c;那也是有价值的。 原因可分成3个方面&#xff1a; …

《C陷阱与缺陷》

文章目录 1、【词法陷阱】1.1 符号与组成符号间的关系1.1 与 1.3 y x/*p 与 y x/(*p)&#xff0c;a-1 与 a - 1 与 a -1, 老版本编译器的处理是不同的&#xff0c;严格的ANSI C则会报错1.4 十进制的 076&#xff0c;会被处理为八进制&#xff0c;ANSI C禁止这种用法&#x…

初阶C++之C++入门基础

大家好&#xff01;欢迎来到C篇学习&#xff0c;这篇文章的内容不会很难&#xff0c;为c的引入&#xff0c;c的重点内容将在第二篇的文章中讲解&#xff0c;届时难度会陡然上升&#xff0c;请做好准备&#xff01; 我们先看网络上的一个梗&#xff1a;21天内⾃学精通C 好了&am…