当前位置: 首页 > article >正文

Go语言基础知识总结(超详细整理)

1. Go语言简介

Go语言(又称Golang)是Google于2009年发布的开源编程语言,具备简洁、高效、并发等特点,适合服务器开发、云计算、大数据等场景。


2. 环境安装与配置

  • 下载地址:https://golang.org/dl/
  • 安装后配置环境变量 GOPATHGOROOT
  • 使用命令验证:
go version
go env

3. 基本语法

Go语言代码文件以 .go 结尾,程序入口为 main 包下的 main() 函数。

package mainimport "fmt"func main() {fmt.Println("Hello, Go!")
}

4. 数据类型

Go的基本数据类型分为:

类型类别类型示例说明
整型int, int8, int16, int32, int64有符号整数
无符号整型uint, uint8, uint16, uint32, uint64无符号整数
浮点型float32, float64浮点数
字符串string字符串
布尔型booltruefalse

5. 变量与常量

变量定义示例:

var a int = 10
b := 20       // 简短声明(只能在函数内)
const Pi = 3.14

6. 运算符

运算符类型示例说明
算术运算符+, -, *, /, %加减乘除余数
关系运算符==, !=, <, >, <=, >=比较大小、相等
逻辑运算符&&, `, !`逻辑与、或、非
赋值运算符=, +=, -=, *=赋值及复合赋值

7. 流程控制

7.1 条件语句

if age >= 18 {fmt.Println("成年人")
} else {fmt.Println("未成年人")
}

7.2 switch语句

switch day {
case 1:fmt.Println("星期一")
case 2:fmt.Println("星期二")
default:fmt.Println("其他")
}

7.3 循环

Go只有一种循环:for,可用多种形式。

for i := 0; i < 5; i++ {fmt.Println(i)
}// 类似while
i := 0
for i < 5 {fmt.Println(i)i++
}// 无限循环
for {// ...
}

8. 函数

函数定义及调用示例:

func add(a int, b int) int {return a + b
}func main() {sum := add(3, 4)fmt.Println(sum) // 7
}

多返回值:

func swap(a, b string) (string, string) {return b, a
}

9. 数组与切片

9.1 数组

固定长度的同类型元素集合。

var arr [3]int = [3]int{1, 2, 3}
fmt.Println(arr[0]) // 1

9.2 切片

动态大小的数组。

slice := []int{1, 2, 3}
slice = append(slice, 4)
fmt.Println(slice) // [1 2 3 4]

10. 字典(map)

键值对集合。

m := make(map[string]int)
m["age"] = 30
fmt.Println(m["age"]) // 30

11. 结构体与接口

11.1 结构体

自定义类型,包含多个字段。

type Person struct {Name stringAge  int
}p := Person{Name: "Tom", Age: 25}
fmt.Println(p.Name) // Tom

11.2 接口

定义一组方法的集合,实现多态。

type Speaker interface {Speak() string
}type Dog struct{}func (d Dog) Speak() string {return "汪汪"
}func main() {var s Speaker = Dog{}fmt.Println(s.Speak()) // 汪汪
}

12. 面向对象编程基础

  • Go不支持传统继承,但支持组合和接口实现多态。
  • 结构体可以绑定方法。
func (p Person) Greet() {fmt.Println("Hello, my name is", p.Name)
}

13. 并发基础

Go的最大特点是内置协程goroutine和通信机制channel

go func() {fmt.Println("并发执行")
}()ch := make(chan string)
go func() {ch <- "消息"
}()
msg := <-ch
fmt.Println(msg)

14. 包与模块管理

  • 代码通过包组织,默认main为程序入口。
  • 使用go mod管理依赖。
go mod init example.com/mymodule
go get github.com/gin-gonic/gin

15. 错误处理

Go无异常机制,使用多返回值返回错误。

func divide(a, b int) (int, error) {if b == 0 {return 0, fmt.Errorf("除数不能为0")}return a / b, nil
}res, err := divide(10, 0)
if err != nil {fmt.Println("错误:", err)
}

16. 标准库常用功能

  • fmt:格式化输入输出
  • os:操作系统接口
  • net/http:HTTP客户端/服务器
  • time:时间处理
  • encoding/json:JSON编解码

17. 练习题


17.1 选择题(共10题,每题1分)

  1. Go语言的程序入口是哪个函数?
    A. start()
    B. main()
    C. init()
    D. run()

  2. 以下哪个关键字用于定义常量?
    A. var
    B. let
    C. const
    D. static

  3. Go语言中下列哪个数据类型是无符号整数?
    A. int32
    B. uint
    C. float64
    D. byte

  4. 下列哪个循环语句在Go语言中不存在?
    A. for
    B. while
    C. 无限循环 for {}
    D. for-range

  5. 下列哪个函数声明是正确的?
    A. func add(a int, b int) int {}
    B. function add(a int, b int) int {}
    C. func add(a int, b int): int {}
    D. def add(a int, b int) int {}

  6. 下列哪个语句用于创建map?
    A. m := []int{}
    B. m := make(map[string]int)
    C. m := map{}
    D. m := map()

  7. Go中声明变量a的正确写法是?
    A. var a int = 10
    B. a := 10
    C. var a = 10
    D. 以上都对

  8. Go语言的并发单位是?
    A. Thread
    B. Process
    C. Goroutine
    D. Coroutine

  9. 在Go语言中,错误通常用什么类型返回?
    A. string
    B. error
    C. exception
    D. bool

  10. 下面关于Go接口的说法,哪个是正确的?
    A. 接口必须显示实现
    B. 结构体自动实现接口中所有方法即实现接口
    C. 接口不能作为类型使用
    D. 接口中只能定义字段


17.2 判断题(共5题,每题1分)

  1. Go语言支持继承机制。 ( )
  2. Go语言中的数组长度是固定的。 ( )
  3. defer语句用于延迟函数的执行直到当前函数结束。 ( )
  4. Go的slice是动态数组。 ( )
  5. panicrecover用于错误处理机制。 ( )

17.3 填空题(共5题,每题2分)

  1. 用关键字___定义常量。
  2. 用关键字___定义变量。
  3. 切片的底层数据结构是___
  4. 结构体中绑定的方法第一个参数通常是___
  5. 使用___关键字启动一个新的goroutine。

17.4 简答题(共5题,每题4分)

  1. 简述Go语言的变量声明方式。
  2. 什么是切片?它和数组有什么区别?
  3. Go语言如何实现并发?请简述goroutine和channel的作用。
  4. 如何在Go语言中处理错误?
  5. 介绍Go语言中接口的作用和特点。

17.5 编程题(共5题,每题6分)

  1. 编写函数,实现两个整数的交换(交换两个变量的值)。
func swap(a, b int) (int, int) {return b, a
}
  1. 编写函数,计算传入整数数组中所有元素的和。
func sum(arr []int) int {total := 0for _, v := range arr {total += v}return total
}
  1. 编写函数,判断一个整数是否为素数。
func isPrime(n int) bool {if n <= 1 {return false}for i := 2; i*i <= n; i++ {if n%i == 0 {return false}}return true
}
  1. 定义结构体Person,包含姓名和年龄,并写一个方法打印个人信息。
type Person struct {Name stringAge  int
}func (p Person) PrintInfo() {fmt.Printf("姓名: %s, 年龄: %d\n", p.Name, p.Age)
}
  1. 写一个函数,使用goroutine打印数字1到5,主函数等待所有goroutine完成。
import ("fmt""sync"
)func printNum(i int, wg *sync.WaitGroup) {defer wg.Done()fmt.Println(i)
}func main() {var wg sync.WaitGroupfor i := 1; i <= 5; i++ {wg.Add(1)go printNum(i, &wg)}wg.Wait()
}

练习题参考答案及简要解析

选择题

  1. B — Go程序入口函数是main()
  2. C — 常量用const声明
  3. B — uint是无符号整型
  4. B — Go没有while语句,用for实现类似功能
  5. A — Go函数用func定义,参数和返回类型明确
  6. B — make函数创建map
  7. D — 上述写法都合法
  8. C — Goroutine是Go语言轻量级并发单位
  9. B — 错误类型为error
  10. B — 结构体隐式实现接口

判断题

  1. × — Go不支持继承
  2. √ — 数组长度固定
  3. √ — defer延迟执行函数直到当前函数退出
  4. √ — slice是动态数组
  5. √ — panic和recover配合处理异常

填空题

  1. const
  2. var
  3. 数组
  4. 结构体变量(如p)
  5. go

简答题

  1. 变量声明可以用var声明,指定类型;函数内可以用:=简短声明。
  2. 切片是基于数组的动态大小序列,长度可变。
  3. Go通过goroutine实现轻量级线程,并用channel通信同步。
  4. 错误通过多返回值返回,调用方判断error是否为nil处理。
  5. 接口定义行为规范,结构体实现接口方法即实现接口,实现多态。

编程题

26-30题代码详见题目内容,均为标准答案。

相关文章:

Go语言基础知识总结(超详细整理)

1. Go语言简介 Go语言&#xff08;又称Golang&#xff09;是Google于2009年发布的开源编程语言&#xff0c;具备简洁、高效、并发等特点&#xff0c;适合服务器开发、云计算、大数据等场景。 2. 环境安装与配置 下载地址&#xff1a;https://golang.org/dl/安装后配置环境变量…...

buuctf——web刷题第二页

[网鼎杯 2018]Fakebook和[SWPU2019]Web1没有&#xff0c;共30题 目录 [BSidesCF 2020]Had a bad day [网鼎杯 2020 朱雀组]phpweb [BJDCTF2020]The mystery of ip [BUUCTF 2018]Online Tool [GXYCTF2019]禁止套娃 [GWCTF 2019]我有一个数据库 [CISCN2019 华北赛区 Day2…...

MVC与MVP设计模式对比详解

MVC&#xff08;Model-View-Controller&#xff09;和MVP&#xff08;Model-View-Presenter&#xff09;是两种广泛使用的分层架构模式&#xff0c;核心目标是解耦业务逻辑、数据和界面&#xff0c;提升代码可维护性和可测试性。以下是它们的对比详解&#xff1a; MVC 模式&…...

内嵌式mqtt server

添加moquette依赖 <dependency><groupId>io.moquette</groupId><artifactId>moquette-broker</artifactId><version>0.17</version><exclusions><exclusion><groupId>org.slf4j</groupId><artifactId>…...

二叉树的遍历总结

144.二叉树的前序遍历(opens new window)145.二叉树的后序遍历(opens new window)94.二叉树的中序遍历 二叉数的先中后序统一遍历法 public static void preOrder(BiTree root){BiTree p root;LinkedList<BiTree> stack new LinkedList<>();while(p ! null ||…...

win32相关(远程线程和远程线程注入)

远程线程和远程线程注入 CreateRemoteThread函数 作用&#xff1a;创建在另一个进程的虚拟地址空间中运行的线程 HANDLE CreateRemoteThread([in] HANDLE hProcess, // 需要在哪个进程中创建线程[in] LPSECURITY_ATTRIBUTES lpThreadAttributes, // 安全…...

【Go语言基础【5】】Go module概述:项目与依赖管理

文章目录 一、Go Module 概述二、Go Module 核心特性1. 项目结构2. 依赖查找机制 三、如何启用 Go Module四、创建 Go Module 项目五、Go Module 关键命令 一、Go Module 概述 Go Module 是 Go 1.11 版本&#xff08;2018 年 8 月&#xff09;引入的依赖管理系统&#xff0c;用…...

[Spring]-AOP

AOP场景 AOP: Aspect Oriented Programming (面向切面编程) OOP: Object Oriented Programming (面向对象编程) 场景设计 设计: 编写一个计算器接口和实现类&#xff0c;提供加减乘除四则运算 需求: 在加减乘除运算的时候需要记录操作日志(运算前参数、运算后结果)实现方案:…...

agent 开发

什么是 agent&#xff1f; Agent智能体&#xff08;又称AI Agent&#xff09;是一种具备自主感知、决策与行动能力的智能系统&#xff0c;其核心在于模仿人类的认知过程来处理复杂任务。以下是其关键特性和发展现状的综合分析&#xff1a; 一、核心定义与特征 #‌## 自主决策…...

多系统一键打包docker compose下所有镜像并且使用

本方法适合在已经pull好docker镜像正常使用的机器 将环境迁移到无网络 或者网络不好的机器使用 linux 用法 cd 到 docker-compose.yml 所在目录 ./save_compose_images.sh #!/bin/bash # 拉取镜像并保存为 .tar 文件 docker save $(docker-compose images | awk {print…...

Golang——5、函数详解、time包及日期函数

函数详解、time包及日期函数 1、函数1.1、函数定义1.2、函数参数1.3、函数返回值1.4、函数类型与变量1.5、函数作参数和返回值1.6、匿名函数、函数递归和闭包1.7、defer语句1.8、panic和recover 2、time包以及日期函数2.1、time.Now()获取当前时间2.2、Format方法格式化输出日期…...

【HarmonyOS 5】出行导航开发实践介绍以及详细案例

以下是 ‌HarmonyOS 5‌ 出行导航的核心能力详解&#xff08;无代码版&#xff09;&#xff0c;聚焦智能交互、多端协同与场景化创新&#xff1a; 一、交互革新&#xff1a;从被动响应到主动服务 ‌意图驱动导航‌ ‌自然语义理解‌&#xff1a;用户通过语音指令&#xff08;如…...

深度学习环境配置指南:基于Anaconda与PyCharm的全流程操作

一、环境搭建前的准备 1. 查看基础环境位置 conda env list 操作说明&#xff1a;通过该命令确认Anaconda默认环境&#xff08;base&#xff09;所在磁盘路径&#xff08;如D盘&#xff09;&#xff0c;后续操作需跳转至该磁盘根目录。 二、创建与激活独立虚拟环境 1. 创…...

03 Deep learning神经网络的编程基础 代价函数(Cost function)--吴恩达

深度学习中的损失函数(Cost Function)用于量化模型预测与真实数据的差距,是优化神经网络的核心指标。以下是常见类型及数学表达: 核心原理 逻辑回归通过sigmoid函数将线性预测结果转换为概率: y ^ ( i ) \hat{y}^{(i)}...

打卡day46

知识点回顾&#xff1a; 不同CNN层的特征图&#xff1a;不同通道的特征图什么是注意力&#xff1a;注意力家族&#xff0c;类似于动物园&#xff0c;都是不同的模块&#xff0c;好不好试了才知道。通道注意力&#xff1a;模型的定义和插入的位置通道注意力后的特征图和热力图 内…...

在SpringBoot中使用AWS SDK实现邮箱验证码服务

1.依赖导入&#xff08;maven&#xff09; <dependency><groupId>software.amazon.awssdk</groupId><artifactId>ses</artifactId><version>2.31.46</version></dependency> 2.申请两个key 发件人邮箱需要验证&#xff1a; …...

AndroidR车机TextToSpeech音频焦点异常问题分析

一、引言 文章《Android车机之TextToSpeech》介绍了TextToSpeech的使用,当前较多座舱系统语音服务都接入了原生TextToSpeech接口调用。 我司自研语音TTS服务,也接入了此TTS接口调用,对外提供TextToSpeech能力,播报时由客户端Client自行管理音频焦点,播报前申请音频焦点,…...

ArcGIS Maps SDK for JavaScript:使用图层过滤器只显示FeatureLayer的部分要素

文章目录 引言1 需求场景分析2精确过滤实现方案2.1 基础过滤语法2.2 动态过滤实现 3 模糊查询进阶技巧3.1 LIKE操作符使用3.2 特殊字段处理 4. 性能优化与注意事项4.1 服务端vs客户端过滤4.2 最佳实践建议 5 常见问题解答 引言 在地图应用开发中&#xff0c;图层过滤是常见的需…...

深入理解二叉搜索树:原理到实践

1.二叉搜索树的概念 ⼆叉搜索树⼜称⼆叉排序树&#xff0c;它或者是⼀棵空树&#xff0c;或者是具有以下性质的⼆叉树 若它的左树不为空&#xff0c;则左子树上所有节点的值都小于或等于根节点的值。若它的右树不为空&#xff0c;则右子树上所有节点的值都大于或等于根节点的…...

测试W5500的第11步_使用ARP解析IP地址对应的MAC地址

本文介绍了基于W5500芯片的ARP协议实现方法&#xff0c;详细阐述了ARP请求与回复的工作机制。ARP协议通过广播请求和单播回复实现IP地址与MAC地址的映射&#xff0c;确保局域网设备间的可靠通信。文章提供了完整的STM32F10x开发环境下的代码实现&#xff0c;包括网络初始化、SP…...

终极数据结构详解:从理论到实践

终极数据结构详解&#xff1a;从理论到实践 我将从 底层原理、时间复杂度、空间优化、实际应用 和 代码实现 五个维度&#xff0c;彻底解析数据结构。内容涵盖&#xff1a; 线性结构&#xff08;数组、链表、栈、队列&#xff09;非线性结构&#xff08;树、图&#xff09;高…...

STM32实战: CAN总线数据记录仪设计方案

以下是基于STM32的CAN总线数据记录仪/转发器的设计与实现方案&#xff0c;结合了核心功能和进阶需求&#xff1a; 系统架构 graph TBA[CAN总线] -->|CAN_H/CAN_L| B(STM32 bxCAN)B --> C[数据处理核心]C --> D[SD卡存储<br>FATFS文件系统]C --> E[串口输出…...

【k8s】k8s集群搭建

k8s集群搭建 一、环境准备1.1 集群类型1.2 安装方式1.3 主机规划1.4 环境配置1.4.1 说明1.4.2 初始化1.4.3 关闭防火墙和禁止防火墙开机启动1.4.4 设置主机名1.4.5 主机名解析1.4.6 时间同步1.4.7 关闭selinux1.4.8 关闭swap分区1.4.9 将桥接的IPv4流量传递到iptables的链1.4.1…...

60天python训练计划----day45

DAY 45 Tensorboard使用介绍 知识点回顾&#xff1a; tensorboard的发展历史和原理tensorboard的常见操作tensorboard在cifar上的实战&#xff1a;MLP和CNN模型 之前的内容中&#xff0c;我们在神经网络训练中&#xff0c;为了帮助自己理解&#xff0c;借用了很多的组件&#x…...

Python训练营打卡Day46(2025.6.6)

知识点回顾&#xff1a; 不同CNN层的特征图&#xff1a;不同通道的特征图什么是注意力&#xff1a;注意力家族&#xff0c;类似于动物园&#xff0c;都是不同的模块&#xff0c;好不好试了才知道。通道注意力&#xff1a;模型的定义和插入的位置通道注意力后的特征图和热力图 i…...

C# Wkhtmltopdf HTML转PDF碰到的问题

最近碰到一个Html转PDF的需求&#xff0c;看了一下基本上都是需要依赖Wkhtmltopdf&#xff0c;需要在Windows或者linux安装这个可以后使用。找了一下选择了HtmlToPDFCore&#xff0c;这个库是对Wkhtmltopdf.NetCore简单二次封装&#xff0c;这个库的好处就是通过NuGet安装HtmlT…...

Vue3 (数组push数据报错) 解决Cannot read property ‘push‘ of null报错问题

解决Cannot read property ‘push‘ of null报错问题 错误写法 定义变量 <script setup>const workList ref([{name:,value:}])</script>正确定义变量 <script setup>const workList ref([]) </script>解决咯~...

Lifecycle 核心原理面试回答

1. 核心目标与设计思想 解耦生命周期管理&#xff1a; 将 Activity/Fragment 的生命周期回调逻辑从视图控制器中剥离&#xff0c;让业务组件&#xff08;如 Presenter, Repository 封装&#xff09;能独立感知生命周期。 状态驱动&#xff1a; 将离散的生命周期事件 (ON_CREAT…...

PHP:Web 开发的强大基石与未来展望

在当今数字化时代&#xff0c;Web 开发技术日新月异&#xff0c;各种编程语言和框架层出不穷。然而&#xff0c;PHP 作为一种历史悠久且广泛应用的服务器端脚本语言&#xff0c;依然在 Web 开发领域占据着重要地位。 PHP 的历史与现状 PHP&#xff08;Hypertext Preprocessor…...

html文字红色粗体,闪烁渐变动画效果,中英文切换版本

1. 代码 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>红色粗体闪烁文字表格 - 中英文切换</t…...