零基础 go - 41(内置/内建函数)

0 阅读2分钟

为了编程方便,go设计者提供了一些函数,这些函数可以直接使用,无需导入任何包。这些函数涵盖了字符串处理、数学计算、输入输出等常见操作,极大地方便了开发者的编程工作。

len: 用来计算字符串、数组、切片、映射等数据结构的长度。

package main

import "fmt"

func main() {
    // 无中文的字符串len计算的是字符数
    str := "Hello, World!"
    fmt.Println(len(str)) // 输出: 13

    // 包含中文的字符串len计算的是字节数
    str2 := "你好,世界!"
    fmt.Println(len(str2)) // 输出: 18,因为中文字符占用3个字节

    // 数组、切片、映射的len计算的是元素个数
    arr := [5]int{1, 2, 3, 4, 5}
    fmt.Println(len(arr)) // 输出: 5
    // 数组、切片、映射的len计算的是元素个数
    slice := []int{1, 2, 3}
    fmt.Println(len(slice)) // 输出: 3
    // 数组、切片、映射的len计算的是元素个数
    m := map[string]int{"a": 1, "b": 2}
    fmt.Println(len(m)) // 输出: 2
}

new: 用于分配内存,返回一个指向新分配的类型为T的零值的指针。

  • num1 := 100 是一个普通的int变量,存储在栈上,直接使用变量名访问其值。
  • num2 := new(int) 使用new分配了一个int类型的内存,num2是一个指针,指向分配的内存地址。要访问或修改num2的值,需要使用*num2来解引用指针。

image.png

package main

import "fmt"

func main() {
    num1 := 100
    fmt.Println(num1) // 输出: 100,num1是一个普通的int变量,存储在栈上

    // 使用new分配一个int类型的内存
    num2 := new(int)
    fmt.Println(*num2) // 输出: 0,new分配的内存会被初始化为类型的零值
    *num2 = 42
    fmt.Println(*num2) // 输出: 42
    fmt.Println(num2) // 输出: 0xc0000120b0,num2是一个指针,指向分配的内存地址
    fmt.Println(&num2) // 输出: 0xc00000e028,&num2是指针num2的地址,不同于num2指向的地址




    // 使用new分配一个结构体类型的内存
    type Person struct {
        Name string
        Age int
    }
    personPtr := new(Person)
    fmt.Println(*personPtr) // 输出: { 0},结构体的零值是字段的零值
    personPtr.Name = "Alice"
    personPtr.Age = 30
    fmt.Println(*personPtr) // 输出: {Alice 30}

make: 用于创建切片、映射和通道,返回一个初始化的(非零)类型为T的值。(后续进行补充)

copy: 用于复制切片,将一个切片的内容复制到另一个切片中。(后续进行补充)

append: 用于向切片添加元素,返回一个新的切片。(后续进行补充)

panic: 用于触发运行时错误,通常用于处理不可恢复的错误。(后续进行补充)

recover: 用于从panic中恢复,通常与defer一起使用来捕获和处理错误。(后续进行补充)