Go语言学习笔记(一)

Go语言学习笔记(一)

Go学习笔记

1.字符串类型

go 复制代码
package main


import "unsafe"
const (
    a = "abc"
    b = len(a)
    c = unsafe.Sizeof(a)
)


func main(){
    println(a, b, c)
}

unsafe.Sizeof(a)输出的结果是16 。字符串类型在 go 里是个结构, 包含指向底层数组的指针和长度,这两部分每部分都是 8 个字节,所以字符串类型大小为 16 个字节。

2._下划线

在Go语言中,下划线 _ 用作一个空白标识符(blank identifier),它用于忽略或丢弃不需要的变量或值。这在编程中非常有用,特别是在处理多个返回值、未使用的变量或者在某些情况下需要明确表示某个位置不需要值时。

以下是一些使用下划线的场景:

  1. 忽略函数返回的多个值

    Go语言中的函数可以返回多个值。如果函数的某个返回值不需要使用,可以使用下划线来忽略它。

    go 复制代码
    f, _ := os.Open("file.txt")

    在这个例子中,os.Open 函数返回两个值:文件句柄和错误。我们只需要文件句柄,因此使用 _ 来忽略错误值。

  2. 在多变量赋值中忽略某些变量

    当进行多变量赋值时,可以使用下划线来忽略不需要的变量。

    go 复制代码
    x, _ := 10, 20

    这里我们只关心 x 的值,所以第二个值被忽略。

  3. 在常量定义中使用iota时忽略某些值

    正如之前提到的,在使用 iota 定义一组常量时,可以使用下划线来忽略某些值。

    go 复制代码
    const (
      _ = iota // 忽略第一个值,iota 从0开始
      KB // 1
      MB // 2
    )
  4. 在类型断言中忽略错误

    在使用类型断言时,如果只关心第一个返回值(即断言后的值),可以使用下划线来忽略错误。

    go 复制代码
    s := interface{}("string").(string) // 断言为string类型,忽略错误
  5. 在结构体字段中忽略某些字段

    当处理结构体时,如果某些字段不需要赋值或使用,可以在字段声明时使用下划线。

    go 复制代码
    type T struct {
      X int
      _ string // 忽略这个字段
    }

使用下划线是一种清晰地表达代码意图的方式,它告诉其他开发者这个位置的值是被有意忽略的。

3.初始化二维数组

初始化二维数组

多维数组可通过大括号来初始值。以下实例为一个 3 行 4 列的二维数组:

go 复制代码
a := [3][4]int{  
 {0, 1, 2, 3} ,   /*  第一行索引为 0 */
 {4, 5, 6, 7} ,   /*  第二行索引为 1 */
 {8, 9, 10, 11},   /* 第三行索引为 2 */
}

注意:

以上代码中倒数第二行的 } 必须要有逗号,因为最后一行的 } 不能单独一行,也可以写成这样:

go 复制代码
a := [3][4]int{  
 {0, 1, 2, 3} ,   /*  第一行索引为 0 */
 {4, 5, 6, 7} ,   /*  第二行索引为 1 */
 {8, 9, 10, 11}}   /* 第三行索引为 2 */

我们可以看到Go语言里数组的声明是这样来写的

cpp 复制代码
var arr = [5]int{1, 2, 3, 4, 5}
// 或者
arr := [5]int{1, 2, 3, 4, 5}
相关推荐
ctlover12 小时前
Python学习第 5 日
学习
六点_dn13 小时前
RabbitMQ学习笔记-部署和使用
笔记·学习·rabbitmq
名字还没想好☜14 小时前
Next.js ‘use client‘ 到底加在哪:Server/Client Components 边界与常见报错
开发语言·前端·javascript·react·next.js
2501_9269783314 小时前
以说明书 DNA 为模板——完整 AGI 的结构图景
前端·人工智能·经验分享·笔记·ai写作
天天爱吃肉821814 小时前
商用车多体动力学实战笔记|第6篇:动力传动系统(发动机、变速箱、分动器、TCS、LSD限滑差速)
大数据·人工智能·笔记·python·嵌入式硬件·汽车
IT199515 小时前
Dify 实战笔记:工作流核心玩法 + 开源 AI 应用全解析
笔记
酷在前行15 小时前
【R生态】PERMANOVA 进阶实战:距离选择、PERMDISP、两两比较与受限置换(保姆级教程)
开发语言·r语言
MartinYeung516 小时前
[论文学习]OSReward:为跨平台计算机使用奖励模型建立标准化评估
人工智能·学习
dong13269716 小时前
Agent Skills学习笔记
笔记·学习
cxr82816 小时前
Graphify vs GitNexus vs CodeGraph — 三工具架构深度对比
开发语言·架构·知识图谱