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 mainimport "fmt"func main() {var age int = 25fmt.Println("age =", age)var score float64 = 87.5fmt.Println("score =", score)var name string = "howard"fmt.Println("name =", name)var flag bool = truefmt.Println("flag =", flag)
}
  • 运行程序,查看结果
    在这里插入图片描述

2. 控制语句

(1)条件语句
  • if - else 语句的使用
  • 编写go程序:ex3_2_1.go
    在这里插入图片描述
package mainimport "fmt"func main() {age := 20if age >= 18 {fmt.Println("已成年,欢迎访问~")} else {fmt.Println("未成年,拒绝访问~")}
}
  • 运行程序,查看结果
    在这里插入图片描述
(2)循环语句
  • for 循环的多种形式
  • 编写程序:ex3_2_2.go
    在这里插入图片描述
package mainimport "fmt"func main() {// 基本的for循环sum := 0for i := 1; i <= 100; i++ {sum = sum + i}fmt.Println("1 + 2 + 3 + ... + 100 =", sum)// 类似while的for循环sum = 0i := 1for i <= 100 {sum = sum + ii++}fmt.Println("1 + 2 + 3 + ... + 100 =", sum)
}
  • 运行程序,查看结果
    在这里插入图片描述

(四)函数

1. 基本语法

在这里插入图片描述

2. 案例演示

  • 编写程序:ex4_1.go
    在这里插入图片描述
package mainimport "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 mainimport "fmt"// User 结构体定义,包含 Name 和 Age 两个字段
type User struct {Name stringAge  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 = 35fmt.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 mainimport ("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 mainimport ("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端口,没有特定的处理器// 因此使用默认的ServeMuxhttp.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 数据结构的用法,并编写一个简单的程序展示

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

普通人如何做好AI数字人直播带货月入10W?

在科技飞速发展的今天&#xff0c;AI数字人直播正以惊人的速度崛起&#xff0c;为直播领域带来了一场前所未有的变革。那到底AI数字人直播前景怎么样&#xff0c;是怎样一个形式&#xff0c;普通人能够利用Ai数字人直播赚取到收益吗&#xff1f; 首先讲到AI数字人直播很多人想的…

飞牛私有云访问外网

飞牛私有云 fnOS NAS 是一款有着卓越的性能以及强大的兼容性和智能化的管理界面&#xff0c;它之所以能在 NAS 市场中脱颖而出&#xff0c;是因为 fnOS 基于最新的 Linux 内核&#xff08;Debian发行版&#xff09;深度开发&#xff0c;不仅兼容主流 x86 硬件&#xff0c;还支持…

论文 | The Capacity for Moral Self-Correction in LargeLanguage Models

概述 论文探讨了大规模语言模型是否具备“道德自我校正”的能力&#xff0c;即在收到相应指令时避免产生有害或偏见输出的能力。研究发现&#xff0c;当模型参数达到一定规模&#xff08;至少22B参数&#xff09;并经过人类反馈强化学习&#xff08;RLHF&#xff09;训练后&…

计算机毕业设计Python+大模型农产品推荐系统 农产品爬虫 农产品商城 农产品大数据 农产品数据分析可视化 PySpark Hadoop

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

一文窥见神经网络

一文窥见神经网络 1.初识神经元1.1 生物神经元1.2 人工神经元1.3 权重的作用1.4 偏置的作用1.5 激活函数的作用1.5.1 线性激活函数1.5.2 非线性激活函数 2. 神经元模型2.1 多输入单神经元模型2.2 一层神经元模型2.3 神经网络&#xff08;多层神经元&#xff09;模型 3. 神经网络…

【视觉SLAM】2-三维空间刚体运动的数学表示

读书笔记&#xff1a;学习空间变换的三种数学表达形式。 文章目录 1. 旋转矩阵1.1 向量运算1.2 坐标系空间变换1.3 变换矩阵与齐次坐标 2. 旋转向量和欧拉角2.1 旋转向量2.2 欧拉角 3. 四元数 1. 旋转矩阵 1.1 向量运算 对于三维空间中的两个向量 a , b ∈ R 3 a,b \in \R^3 …

shell 100例

1、每天写一个文件 (题目要求&#xff09; 请按照这样的日期格式(xxxx-xx-xx每日生成一个文件 例如生成的文件为2017-12-20.log&#xff0c;并且把磁盘的使用情况写到到这个文件中不用考虑cron&#xff0c;仅仅写脚本即可 [核心要点] date命令用法 df命令 知识补充&#xff1…

[Python学习日记-66] 多态与多态性

[Python学习日记-66] 多态与多态性 简介 多态 多态性 鸭子类型 简介 多态与多态性都是面向对象的特征之一&#xff0c;它们都是面向对象编程的一个重要概念&#xff0c;在 Python 当中也有一些独特的见解和用法&#xff0c;下面我们一起来了解一下是怎么回事吧。 多态 多态…

Linux基础1

Linux基础1 Linux基础1学习笔记 ‍ 声明&#xff01; ​​​学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章 笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他…

GESP4级考试语法知识(贪心算法(二))

排队接水2代码&#xff1a; #include<iostream> #include<cstdio> #include<algorithm> using namespace std; struct people {int num;int time; }; people s[1001]; int n,r,a[1001]; double sum,ave; bool cmp(people x,people y) {return x.time<y.t…

MySQL45讲 第二十讲 幻读是什么,幻读有什么问题?

文章目录 MySQL45讲 第二十讲 幻读是什么&#xff0c;幻读有什么问题&#xff1f;一、幻读的定义二、幻读带来的问题&#xff08;一&#xff09;语义问题&#xff08;二&#xff09;数据一致性问题 三、InnoDB 解决幻读的方法四、总结 MySQL45讲 第二十讲 幻读是什么&#xff0…

【再谈设计模式】建造者模式~对象构建的指挥家

一、引言 在软件开发的世界里&#xff0c;创建对象是一项基本且频繁的操作。然而&#xff0c;当对象的构造变得复杂&#xff0c;涉及众多属性和初始化步骤时&#xff0c;传统的构造函数方式往往会让代码陷入混乱的泥沼。就如同搭建一座复杂的建筑&#xff0c;若没有合理的规划和…

三、模板与配置(下)

三、模板与配置 8、WXSS模板样式-全局样式和局部样式 类型说明适用情景注意点全局样式定义在 app.wxss 中的样式&#xff0c;作用于每一个页面。当有一些通用的样式规则需要应用于整个小程序时&#xff0c;比如全局的字体大小、颜色、布局等。全局样式可能会被局部样式覆盖&a…

SQL面试题——抖音SQL面试题 主播播出时长

主播播出时长 现有如下数据,主播id、房间号、播出的批次号,每个批次号进出房间的时间戳、分区时间: 每一次直播都有一个上播和下播,每个房间里,同一个批次号会有两条数据,分别记录了上播和下播时间,求每个主播的播出时长? 通过上面的数据,可以清晰的看出,同一个批次…

大语言模型LLM综述

一、LM主要发展阶段 1.1、统计语言模型SLM 基于统计学习方法&#xff0c;基本思想是基于马尔可夫假设HMM建立词概率预测模型。如n-gram语言模型 1.2、神经语言模型NLM 基于神经网络来做词的分布式表示。如word2vec模型 1.3、 预训练语言模型PLM 预训练一个网络模型来做词表…

用 Python 从零开始创建神经网络(七):梯度下降(Gradient Descent)/导数(Derivatives)

梯度下降&#xff08;Gradient Descent&#xff09;/导数&#xff08;Derivatives&#xff09; 引言1. 参数对输出的影响2. 斜率&#xff08;The Slope&#xff09;3. 数值导数&#xff08;The Numerical Derivative&#xff09;4. 解析导数&#xff08;The Analytical Derivat…

防爆手机市场“百花齐放”,该怎么选?

在危险作业场景&#xff0c;如石化煤矿&#xff0c;通讯设备采购关系到提高生产效率‌&#xff0c;保障安全生产‌&#xff0c;‌符合法规要求‌。在应急救援通信场景&#xff0c;通讯设备采购&#xff0c;与保障救援行动的效率和准确性息息相关。而通信设备的性能参数是评估其…

似然函数解析

从贝叶斯定理引出似然函数 最大似然估计用来估计均值方差的 文心对似然函数的解释&#xff0c;注意 抛出正反的概率&#xff0c;就是固定均值方差的条件概率密度了

记录配置ubuntu18.04下运行ORBSLAM3的ros接口的过程及执行单目imu模式遇到的问题(详细说明防止忘记)

今天的工作需要自己录制的数据集来验证昨天的标定结果 用ORBSLAM3单目imu模式运行&#xff0c;mentor给的是一个rosbag格式的数据包&#xff0c;配置过程出了几个问题记录一下&#xff0c;沿配置流程写。 一.orbslam3编译安装 1.首先是安装各种依赖 这里不再赘述&#xff0…

实验5:网络设备发现、管理和维护

实验5&#xff1a;网络设备发现、管理和维护 实验目的及要求&#xff1a; 通过实验&#xff0c;掌握Cisco 路由器和交换机的IOS配置管理。自动从NTP服务器获取时间信息。能够利用TFTP服务器实现路由器和交换机配置文件的备份和恢复。同时验证CDP协议和LLDP协议的网络参数。完…