go语言学而思【持续更新】

问题:在Go语言中nil是什么意思?

答:在Go语言中,nil是一个预声明的标识符,用于表示某些类型的零值。它可以被用作以下类型的零值:

  • 指针(Pointer)
  • 切片(Slice)
  • 映射(Map)
  • 通道(Channel)
  • 函数(Function)
  • 接口(Interface)

nil的主要用途是初始化这些类型的变量或者表示它们尚未指向任何有效的内存地址、数据结构、函数或接口实现。使用nil可以检查一个变量是否已经被初始化或分配了资源。

例如:

  • 对于指针,nil表示它不指向任何对象。
  • 对于切片和映射,nil表示它们没有被初始化,即它们不引用底层的数据结构。
  • 对于通道,nil表示它没有被创建。
  • 对于函数类型的变量,nil表示它没有引用任何函数。
  • 对于接口,nil表示它既没有存储值也没有具体类型。

使用nil时需要注意,尝试对nil值进行操作可能会导致运行时错误。

例如,尝试对nil切片进行追加操作是安全的,但尝试访问nil切片的元素或对nil映射进行读写操作将导致运行时恐慌(panic)。


问题:range关键字 是什么意思?

答:在Go语言中,range关键字用于在for循环中迭代各种集合元素,如数组、切片、字符串、映射或通道(channel)。使用range可以方便地获取集合中的索引和值。

使用range的基本形式如下:

  • 数组和切片:range返回索引和元素值。
go 复制代码
  nums := []int{2, 3, 4}
    for index, value := range nums {
        fmt.Println(index, value)
    }
  • 字符串:range遍历字符串时,返回的是Unicode字符的索引(注意是字节的索引,对于非ASCII字符可能不是连续的)和字符的rune值。
go 复制代码
   for index, runeValue := range "go语言" {
        fmt.Printf("%d -> %c\n", index, runeValue)
    }
  • 映射(Map):range返回键值对。
go 复制代码
  m := map[string]int{"a": 1, "b": 2}
    for key, value := range m {
        fmt.Println(key, value)
    }
  • 通道(Channel):range从通道连续读取值,直到通道被关闭。
go 复制代码
  c := make(chan int)
    go func() {
        c <- 1
        c <- 2
        close(c)
    }()
    for value := range c {
        fmt.Println(value)
    }

注意事项:

  • 当使用range迭代映射时,每次迭代的顺序可能不同,因为Go语言中的映射不保证顺序。
  • 如果只需要索引或键,可以忽略第二个变量:
go 复制代码
  for index := range nums {
        fmt.Println(index)
    }
  • 如果只需要值,可以使用_(空白标识符)忽略索引或键:
go 复制代码
   for _, value := range nums {
        fmt.Println(value)
    }

range关键字提供了一种简洁的方式来迭代各种类型的集合元素,使代码更加清晰和简洁。


相关推荐
魔力女仆3 分钟前
分享一个 JS 鼠标跟随贪吃蛇背景库
开发语言·javascript·计算机外设
2401_894915531 小时前
GEO 搜索优化完整源码从零部署:环境配置、集群搭建全流程
开发语言·python·tcp/ip·算法·unity
麻瓜老宋1 小时前
AI开发C语言应用按步走,表达式计算器calc的第二十二步,分号赋值链式修复、TOKEN_ASSIGN
c语言·开发语言·atomcode
FellAveal2 小时前
【Go语言入门学习笔记】Part18.工作池与WaitGroup(也即协程池)
笔记·学习·golang
颜x小3 小时前
[C#] C++与c#语法对比
开发语言·c++·c#
weixin_423652133 小时前
C#使用JObject
开发语言·c#
国科安芯4 小时前
FreeRTOS RISC-V 浮点上下文切换移植:在 IAR 工程中完整保存 FPU 寄存器
java·开发语言·单片机·嵌入式硬件·算法·系统架构·risc-v
2501_915921435 小时前
iOS开发环境搭建详解 Xcode 配置与快蝎轻量级工具选择
ide·vscode·macos·ios·个人开发·xcode·敏捷流程
霸道流氓气质5 小时前
Java中集成Smile 技术教程:从入门到工程实践
java·开发语言
BerrySen1785 小时前
迈向 Next-Gen Java:企业级高并发架构演进与大模型 Agent 落地深度实战
java·开发语言·架构