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 这几个类型还没有讲解。

相关文章
|
2月前
|
存储 安全 Java
【Golang】(4)Go里面的指针如何?函数与方法怎么不一样?带你了解Go不同于其他高级语言的语法
结构体可以存储一组不同类型的数据,是一种符合类型。Go抛弃了类与继承,同时也抛弃了构造方法,刻意弱化了面向对象的功能,Go并非是一个传统OOP的语言,但是Go依旧有着OOP的影子,通过结构体和方法也可以模拟出一个类。
212 1
|
3月前
|
存储 Java Go
对比Java学习Go——函数、集合和OOP
Go语言的函数支持声明与调用,具备多返回值、命名返回值等特性,结合`func`关键字与类型后置语法,使函数定义简洁直观。函数可作为一等公民传递、赋值或作为参数,支持匿名函数与闭包。Go通过组合与接口实现面向对象编程,结构体定义数据,方法定义行为,接口实现多态,体现了Go语言的简洁与高效设计。
|
6月前
|
人工智能 Dart Go
Go语言中的make和new函数的区别及使用场景
本文详细解析了Go语言中`make`和`new`函数的使用方法及区别。`make`用于创建切片、映射和通道等引用类型,返回初始化后的值;`new`用于创建任意类型的零值对象,返回指向该对象的指针。文章通过多个示例说明两者的应用场景,并总结了面试中可能遇到的相关问题,如底层实现、使用场景及优缺点等,帮助读者更好地理解和区分这两个函数。
220 1
|
7月前
|
Go 调度
GO语言函数的内部运行机制分析
以上就是Go语言中函数的内部运行机制的概述,展示了函数在Go语言编程中如何发挥作用,以及Go如何使用简洁高效的设计,使得代码更简单,更有逻辑性,更易于理解和维护。尽管这些内容深入了一些底层的概念,但我希望通过这种方式,将这些理论知识更生动、更形象地带给你,让你在理解的同时找到编程的乐趣。
162 5
|
7月前
|
Go Python
函数的定义与调用 -《Go语言实战指南》
本文介绍了 Go 语言中函数的核心特性与用法,包括基本定义格式、调用方式、多返回值、返回值命名、参数类型简写、可变参数、高阶函数及匿名函数等内容。通过示例代码详细展示了如何定义和使用不同类型的函数,使读者能够全面了解 Go 函数的灵活性与强大功能。
149 12
|
JSON 安全 网络协议
go语言使用内置函数和标准库
【10月更文挑战第18天】
188 3
go函数
go函数
110 11
|
编译器 Go C++
Go to Learn Go之函数
Go to Learn Go之函数
147 1
Go语言的条件控制语句及循环语句的学习笔记
本文是Go语言的条件控制语句和循环语句的学习笔记,涵盖了if语句、if-else语句、if嵌套语句、switch语句、select语句以及for循环和相关循环控制语句的使用方法。
Go语言的条件控制语句及循环语句的学习笔记
Go: struct 结构体类型和指针【学习笔记记录】
本文是Go语言中struct结构体类型和指针的学习笔记,包括结构体的定义、成员访问、使用匿名字段,以及指针变量的声明使用、指针数组定义使用和函数传参修改值的方法。

热门文章

最新文章