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天前
|
Go 数据处理
Go杂记1-切片Slice作为函数参数那点事儿
Go杂记1-切片Slice作为函数参数那点事儿
7 0
|
1天前
|
存储 Go 开发者
【Go语言专栏】函数在Go语言中的使用与实现
【4月更文挑战第30天】本文介绍了Go语言中函数的使用和实现,包括函数定义、参数传递、返回值、匿名函数、变长参数、函数类型、闭包和错误处理。通过示例展示了如何定义和调用函数,以及如何利用闭包和递归解决问题。此外,还提到了Go函数作为一等公民的特性,允许存储和传递。进一步学习可参考官方文档和相关书籍。
|
1天前
|
Go
Golang深入浅出之-Go语言函数基础:定义、调用与多返回值
【4月更文挑战第21天】Go语言函数是代码组织的基本单元,用于封装可重用逻辑。本文介绍了函数定义(包括基本形式、命名、参数列表和多返回值)、调用以及匿名函数与闭包。在函数定义时,注意参数命名和注释,避免参数顺序混淆。在调用时,要检查并处理多返回值中的错误。理解闭包原理,小心处理外部变量引用,以提升代码质量和可维护性。通过实践和示例,能更好地掌握Go语言函数。
31 1
Golang深入浅出之-Go语言函数基础:定义、调用与多返回值
|
1天前
|
程序员 Go API
【Go语言快速上手(二)】 分支与循环&函数讲解
【Go语言快速上手(二)】 分支与循环&函数讲解
|
1天前
|
存储 Go 开发者
Golang深入浅出之-Go语言字符串操作:常见函数与面试示例
【4月更文挑战第20天】Go语言字符串是不可变的字节序列,采用UTF-8编码。本文介绍了字符串基础,如拼接(`+`或`fmt.Sprintf()`)、长度与索引、切片、查找与替换(`strings`包)以及转换与修剪。常见问题包括字符串不可变性、UTF-8编码处理、切片与容量以及查找与替换的边界条件。通过理解和实践这些函数及注意事项,能提升Go语言编程能力。
28 0
|
1天前
|
自然语言处理 数据挖掘 程序员
《Go 简易速速上手小册》第2章:控制结构与函数(2024 最新版)(下)
《Go 简易速速上手小册》第2章:控制结构与函数(2024 最新版)(上)
27 1
|
1天前
|
数据采集 搜索推荐 Go
《Go 简易速速上手小册》第2章:控制结构与函数(2024 最新版)(上)
《Go 简易速速上手小册》第2章:控制结构与函数(2024 最新版)
26 1
|
1天前
|
供应链 算法 安全
掌握Go语言:函数精髓,定义、参数、多返回值与应用(14)
掌握Go语言:函数精髓,定义、参数、多返回值与应用(14)
|
1天前
|
消息中间件 编译器 数据库连接
|
1天前
|
存储 分布式计算 算法
GO学习笔记之表达式
GO学习笔记之表达式
34 1