当前位置: 首页 > 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题代码详见题目内容,均为标准答案。

http://www.lryc.cn/news/2403679.html

相关文章:

  • buuctf——web刷题第二页
  • MVC与MVP设计模式对比详解
  • 内嵌式mqtt server
  • 二叉树的遍历总结
  • win32相关(远程线程和远程线程注入)
  • 【Go语言基础【5】】Go module概述:项目与依赖管理
  • [Spring]-AOP
  • agent 开发
  • 多系统一键打包docker compose下所有镜像并且使用
  • Golang——5、函数详解、time包及日期函数
  • 【HarmonyOS 5】出行导航开发实践介绍以及详细案例
  • 深度学习环境配置指南:基于Anaconda与PyCharm的全流程操作
  • 03 Deep learning神经网络的编程基础 代价函数(Cost function)--吴恩达
  • 打卡day46
  • 在SpringBoot中使用AWS SDK实现邮箱验证码服务
  • AndroidR车机TextToSpeech音频焦点异常问题分析
  • ArcGIS Maps SDK for JavaScript:使用图层过滤器只显示FeatureLayer的部分要素
  • 深入理解二叉搜索树:原理到实践
  • 测试W5500的第11步_使用ARP解析IP地址对应的MAC地址
  • 终极数据结构详解:从理论到实践
  • STM32实战: CAN总线数据记录仪设计方案
  • 【k8s】k8s集群搭建
  • 60天python训练计划----day45
  • Python训练营打卡Day46(2025.6.6)
  • C# Wkhtmltopdf HTML转PDF碰到的问题
  • Vue3 (数组push数据报错) 解决Cannot read property ‘push‘ of null报错问题
  • Lifecycle 核心原理面试回答
  • PHP:Web 开发的强大基石与未来展望
  • html文字红色粗体,闪烁渐变动画效果,中英文切换版本
  • 六、【ESP32开发全栈指南:深入解析ESP32 IDF中的WiFi AP模式开发】