Go 内置函数 ( buildin ) 基本内容 | 学习笔记

简介: 快速学习 Go 内置函数 ( buildin ) 基本内容

开发者学堂课程【Go 语言核心编程 - 基础语法、数组、切片、Map: Go 内置函数 ( buildin ) 基本内容】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/625/detail/9622


Go 内置函数 ( buildin ) 基本内容

基本内容

一、 len: 用来求长度

二、 new: 用来分配内存

三、 make: 用来分配内存

 

说明

Golang 设计者为了编程方便,提供了一些函数。这些函数可以直接使用,称它为 Go 的内置函数。在 Go 语言标准库文档中也就是 builtin 所属的那一部分,builtin 中函数很多。在 Go 语言标准库文档中,builtin 中有很多函数, new 内建函数 new 分配内存,其第一个实参为类型,而非值,其返回值指向该类型的新分配的零值的指针。内置函数也叫内建函数,常用的函数一个是 len,new 和 make。

文档: https://studygolang.com/pkgdoc -> builtin

 

一、 len: 用来求长度

比如求 string、array、slice、map、channel 的长度;或者是数组的大小。

 

二、new: 用来分配内存,主要用来分配值类型,

比如 int、float32,struct... 返回的是指针

1、之前讲的是分配整型,float 和字符串是直接赋值的,可以直接分配指针达到同样的效果。内嵌函数 new 分配内存。其第一个实参为类型,而非值。其返回值为指向该类型的新分配的零值的指针。

2、举例说明 new 的使用:

package main

import (

"fmt"

)

func main() {

num1 ;= 10a

fmt.Printf("num1的类型T , num1的值=%v , num1的地址%v\n", num1,num1,&num1)

num2 := new(int) // *int

//num2 的类型 %T =>*int

// num2 的值=地址 (系统分配的)

// num2 的地址 %v= 地址 (系统分配)

fmt.Printf("num2的类型%T , num2的值=%v, num2的地址%v\n",num2,num2,&num2)

}

3、输出结果:

num1 的类型 Int,num1 的值 100,num1 的地址 0xc04204c080

num2 的类型 *Int,num2 的值 0xc0420100e0,num2 的地址 0xc042004030

上面代码对应的内存分析图:

image.png

4、代码分析:

(1) 引入 fmt,写一个主函数。num1:=100,这种用法是最常见的用法,把一个 100 赋给 num1,再输出它的类型和地址 fmt.Printf("num1 的类型 T , num1 的值=%v , num1 的地址 %v\n", num1,num1,&num1),这种最常规的赋值方式可以拿到类型、值还有地址,如果画一个内存图在上方显示。在内存图中有个 num1,它指向了一个空间,空间里放了 100,num1 的地址就是指向这个空间的地址,也就是说如果这样分配一个 int 类型,在内存中就是上图这样分配的。

(2) 用 num2:=new(int) 这种方式分配,num2 的类型 %T =>*int 是一个指针类型, num2 的值=地址 (系统分配的), num2 的地址 %v= 地址 (系统分配)。首先有一个 num2 也会指向一个空间,但这个空间里的值是一个地址,本身空间里就有一个地址,这个地址就是 0xc042004030,也就是 num2 也空间关联的,这个地址才是真正指向值,这个值默认是 0。num2 其实是个指针类型,它的值是一个地址,但是这个地址指向的是一个空间,这个空间默认为 0,在没有赋值的时候默认为 0。结果输出 num2 这个指针,指向的值 =0,说明值是一个 0xc0420100e0。 new 首先分配了一个空间,把地址给了另一个空间,再把 0xc0420100e0 这个地址给 num2 。如果想通过 num2 改变值,*num2=100 ,通过 num2 找到了指向的值,并且改成了 100,再去运行的时候,num2 的指向的值就是 100,但是其它类型、地址没有变化。

(3) 运行后指向的值变成 100,但是地址发生了变化,因为每次执行需要实际的空间来分配,这个地址是有可能变化的,每次执行时内存空间会发生变化,不会固定不变。num2 本身地址的值还有本身空间的地址是无法分配的,是由系统分配的。 new 有两个作用,一是分配一个空间,装了一个数值,二是再分配一个空间把地址放进去,再让 num 指向这个空间。

 

三、 make: 用来分配内存,主要用来分配引用类型,

比如 channel、map、slice。

make 的用途非常多,make 也用来分配内存,分配引用类型的内存,但 channle、mao、slice 这几个类型还没有讲解。

相关文章
|
1月前
|
JSON 安全 网络协议
go语言使用内置函数和标准库
【10月更文挑战第18天】
16 3
|
3月前
|
Go
go函数
go函数
34 10
Go语言的条件控制语句及循环语句的学习笔记
本文是Go语言的条件控制语句和循环语句的学习笔记,涵盖了if语句、if-else语句、if嵌套语句、switch语句、select语句以及for循环和相关循环控制语句的使用方法。
Go语言的条件控制语句及循环语句的学习笔记
|
3月前
|
编译器 Go C++
Go to Learn Go之函数
Go to Learn Go之函数
29 0
|
3月前
|
存储 Go
Go: struct 结构体类型和指针【学习笔记记录】
本文是Go语言中struct结构体类型和指针的学习笔记,包括结构体的定义、成员访问、使用匿名字段,以及指针变量的声明使用、指针数组定义使用和函数传参修改值的方法。
|
3月前
|
编译器 Go 索引
Go数组、多维数组和切片(动态数组),及常用函数len(),cap(),copy(),append()在切片中的使用
本文介绍了Go语言中数组、多维数组和切片(动态数组)的基本概念和操作,包括数组的定义、初始化、访问,多维数组的定义和访问,以及切片的创建、使用和扩容。同时,还讲解了切片中常用的函数len()、cap()、copy()和append()的使用方法。
|
4月前
|
Prometheus Cloud Native Go
Go 1.22 标准库 slices 新增函数和一些旧函数增加新特性
Go 1.22 标准库 slices 新增函数和一些旧函数增加新特性
|
3月前
|
人工智能 算法 搜索推荐
Go学习笔记-代码调
近年来,人工智能技术飞速发展,Cody作为由Sourcegraph开发的一款AI驱动编码助手,应运而生。它不仅提供代码预测与补全,还能深度理解代码上下文,为开发者提供准确建议,提升编码效率和质量。Cody能识别潜在错误并提出修复建议,缩短调试时间,同时进行智能代码审查,帮助优化代码结构和风格。未来,随着AI技术进步,Cody将不断学习优化,成为开发者不可或缺的伙伴,推动编程领域的创新与发展。
36 0
|
4月前
|
设计模式 Java 数据库连接
|
4月前
|
Go 开发者