GO语言make()分配用法实例

 更新时间:2015年02月28日 15:03:15   作者:niuniu  
这篇文章主要介绍了GO语言make()分配用法,实例分析了make()的功能及使用技巧,需要的朋友可以参考下

本文实例讲述了GO语言make()分配用法。分享给大家供大家参考。具体分析如下:

make()分配:内部函数 make(T, args) 的服务目的和 new(T) 不同。
它只生成切片,映射和程道,并返回一个初始化的(不是零)的,type T的,不是 *T 的值。

这种区分的原因是,这三种类型的数据结构必须在使用前初始化.
比如切片是一个三项的描述符,包含数据指针(数组内),长度,和容量;在这些项初始化前,切片为 nil 。

对于切片、映射和程道,make初始化内部数据结构,并准备要用的值。
记住 make() 只用于映射、切片和程道,不返回指针。要明确的得到指针用 new() 分配

复制代码 代码如下:
package main
import "fmt"
func main() {
 //分配片结构;* p==零
 var p *[]int = new([]int)
 *p = make([]int, 100, 100) //这样写有点复杂,很容易就搞乱了
 fmt.Println(p)
 //现在将V分配一个新的数组,100个整型
 //写法一
 //var v  []int = make([]int, 100)
 //写法二:非常常用的写法,简节明了
 v := make([]int, 100)
 fmt.Println(v)
}
通过make()还可以灵活地创建数组切片。如
//创建切片也使用make函数,它被分配一个零数组和指向这个数组的切片。
//创建一个初始元素个数为5的数组切片,元素初始值为0
a := make([]int, 5)  // len(a)=5
//切片有长度和容量。切片的最大长度就是它的容量。
//指定一个切片的容量,通过第三个参数。
//创建一个初始元素个数为5的数组切片,元素初始值为0,并预留10个元素的存储空间
b := make([]int, 5, 10)    // len(b)=5, cap(b)=10
//通过重新切片,可使切片增加。
b = b[:cap(b)] // len(b)=5, cap(b)=5
b = b[1:]      // len(b)=4, cap(b)=4
//直接创建并初始化包含5个元素的数组切片
c := []int{1,2,3,4,5}

希望本文所述对大家的Go语言程序设计有所帮助。

相关文章

  • Go语言并发编程 互斥锁详情

    Go语言并发编程 互斥锁详情

    在并发编程中,多个Goroutine访问同一块内存资源时可能会出现竞态条件,我们需要在临界区中使用适当的同步操作来以避免竞态条件。Go 语言中提供了很多同步工具,本文将介绍互斥锁Mutex和读写锁RWMutex的使用方法。
    2021-10-10
  • 利用Go语言遍历目录下所有文件的示例代码

    利用Go语言遍历目录下所有文件的示例代码

    这篇文章主要介绍了如何使用 Go 语言遍历指定目录,递归地列出该目录及其所有子目录下的所有文件路径,并有详细的代码示例供大家参考,需要的朋友可以参考下
    2025-07-07
  • gorm+gin实现restful分页接口的实践

    gorm+gin实现restful分页接口的实践

    本文主要介绍了gorm+gin实现restful分页接口的实践,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • 一文带你理解Golang中的Time结构

    一文带你理解Golang中的Time结构

    根据golang的time包的文档可以知道,golang的time结构中存储了两种时钟,一种是Wall Clocks,一种是Monotonic Clocks,下面我们就来简单了解一下这两种结构吧
    2023-09-09
  • 利用golang实现pdf中自动换行的表格

    利用golang实现pdf中自动换行的表格

    这篇文章主要给大家介绍了如何利用golang实现pdf中自动换行的表格,文中通过代码示例给大家讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-02-02
  • 一文详解go mod依赖管理详情

    一文详解go mod依赖管理详情

    这篇文章主要介绍了一文详解go mod依赖管理详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-07-07
  • Go实现完全静态编译和交叉编译的示例代码

    Go实现完全静态编译和交叉编译的示例代码

    Go 语言天生支持跨平台编译,并且其标准库几乎不依赖系统动态库,所以在大多数场景下,它编译出来的二进制文件几乎可以直接丢到任何机器运行,但实际开发中,我们经常遇到两个问题,如何完全静态编译和交叉编译,本文详细的给大家介绍了解决方法,需要的朋友可以参考下
    2025-07-07
  • golang之反射和断言的具体使用

    golang之反射和断言的具体使用

    这篇文章主要介绍了golang之反射和断言的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • Go语言开发k8s之ConfigMap操作解析

    Go语言开发k8s之ConfigMap操作解析

    这篇文章主要为大家介绍了Go语言开发k8s之ConfigMap操作示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • Golang Map value不可寻址使用指针类型代替示例详解

    Golang Map value不可寻址使用指针类型代替示例详解

    这篇文章主要为大家介绍了Golang Map value不可寻址使用指针类型代替示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11

最新评论