GO语言基础-08-内建函数-make()、new()

news2025/1/21 10:11:54

文章目录

  • 1. make
    • 1.1 概述
    • 1.2 示例(make切片)
    • 1.3 示例(make map)
    • 1.4 示例(make 通道)
  • 2. new
    • 2.1 概念
    • 2.2 示例(new 切片)
    • 2.3 示例(new和make对比)
    • 2.4 示例(new map)
    • 2.5 示例(new 结构体)

1. make

1.1 概述

  • 作用

用于分配 slice、map、chanel 类型的内存。

  • 返回值

返回数据本身(而new返回指针地址)

  • 语法
func make(t Type, size ...IntegerType) Type

1.2 示例(make切片)

  • 语法示例
mSlice := make([]string,3)
  • 完整示例
package main

import "fmt"

func main() {
	mSlice := make([]string,3)
	mSlice[0] = "刘备"
	mSlice[1] = "关羽"
	mSlice[2] = "张飞"
	fmt.Println(mSlice)
}
  • 结果
[刘备 关羽 张飞]

1.3 示例(make map)

  • 代码
package main

import "fmt"

func main() {
	mMap := make(map[string]string)
	mMap["姓名"] = "孔明"
	mMap["职业"] = "军师"
	mMap["势力"] = "西蜀"
	fmt.Println(mMap)
}
  • 结果
map[势力:西蜀 姓名:孔明 职业:军师]

1.4 示例(make 通道)

  • 语法示例
ch := make(chan string)
  • 代码
package main

import (
	"fmt"
	"time"
)

func main() {
	ch := make(chan string)
	names := []string{"刘备","关羽","张飞","赵云","马超","黄忠"}

	go func() { //启动一个携程向通道写入
		for _,name := range names {
			ch <- name
			time.Sleep(1*time.Second)  
		}
		close(ch)
	}()
	go func() {
		for c := range ch {
			fmt.Println(c)
		}
	}()
	time.Sleep(8*time.Second) //在学习携程同步之前,我们先用sleep等待携程结束

}
  • 结果
刘备
关羽
张飞
赵云
马超
黄忠

2. new

2.1 概念

  • 作用

new方法也是一个分配内存的内置函数。

  • 返回值

分配内存地址的指针。

  • 语法
func new(Type) *Type

2.2 示例(new 切片)

  • 语法示例
mSlice := new([]string)
  • 完整示例
package main

import "fmt"

func main() {

	mSlice := new([]string)
	mSlice = &[]string{"刘备","关羽","张飞"}
	fmt.Printf("mSlice 的类型为: %T\n打印结果:%+v",mSlice,mSlice)

}
  • 结果
mSlice 的类型为: *[]string
打印结果:&[刘备 关羽 张飞]

2.3 示例(new和make对比)

new一个实例slicePointermake一个实例sliceData。然后打印两个示例类型。

  • 代码
package main

import "fmt"

func main() {

	slicePointer := new([]string)
	sliceData := make([]string,3)
	fmt.Printf("slicePointer 的类型为: %T\n",slicePointer)
	fmt.Printf("sliceData 的类型为: %T\n",sliceData)

}
  • 结果
slicePointer 的类型为: *[]string
sliceData 的类型为: []string

如上可见:new的实例类型为切片的指针,make的实例为切片

2.4 示例(new map)

  • 代码
package main

import "fmt"

func main() {


	mapPointer := new(map[string]string)
	mapPointer = &map[string]string{"姓名":"孔明","职业":"军师","势力":"西蜀"}
	fmt.Println(mapPointer)
}
  • 结果
&map[势力:西蜀 姓名:孔明 职业:军师]
  • 给map中添加成员
  • 因为new出来的是一个指针,因此你单独添加成员不能写mapPointer["姓名"]="孔明"或者*mapPointer["姓名"]="孔明"或者mapPointer["姓名"]=&"孔明"或者什么乱七八糟的想法。
  • 你只能make一个实例,然后让指针指向这个实例的内存地址。
package main

import "fmt"

func main() {


	mapPointer := new(map[string]string)

	mapDate := make(map[string]string)
	mapDate["姓名"] = "孔明"
	mapDate["职业"] = "军师"
	mapDate["势力"] = "西蜀"

	mapPointer = &mapDate
	fmt.Println(mapPointer)
}

2.5 示例(new 结构体)

  • 代码
package main

import "fmt"

type myStruct struct {
	name string
	age int
}

func main() {
	structPointer := new(myStruct)
	structPointer = &myStruct{
		name: "刘备",
		age: 28,
	}
	fmt.Printf("打印结构体:%+v",structPointer)
}
  • 结果
打印结构体:&{name:刘备 age:28}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/151849.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java基础算法每日5道详解(2)

83. Remove Duplicates from Sorted List 从排序列表中删除重复项 Given the head of a sorted linked list, delete all duplicates such that each element appears only once. Return the linked list sorted as well. Example 1: Input: head [1,1,2] Output: [1,2]Exa…

20230109测试ToyBrick的RK3588开发板运行Buildroot的V20220811版本

20230109测试ToyBrick的RK3588开发板运行Buildroot的V20220811版本 2023/1/9 14:25 开发板&#xff1a;Toybrick的TB-RK3588X开发板 SDK&#xff1a;RK3588_LINUX_20220811\rk3588-linux-20220811.tar.gz_06 H:\BaiduNetdiskDownload\RK3588_LINUX_20220811 rk3588-linux-2022…

【SQLyog错误号码2058解决办法】

当你遇到下图这个错误时&#xff0c;是由于SQLyog在8.0以上版本采用了新的加密方式。 解决办法&#xff1a; win R打开 &#xff0c; 输入cmd&#xff0c;打开命令行窗口&#xff0c; 然后连接你的SQLyog版本的服务器&#xff0c; mysql -uroot -P3306 -p注意&#xff1a;…

【Kotlin】数字类型 ( 安全转换函数 | 浮点型转整型 )

文章目录一、安全转换函数二、浮点型转整型一、安全转换函数 在 Kotlin 中 , 将 字符串 String 类型 转为 数字类型 , 如果 字符串 代表的数字类型 与 要换转的 数字类型 不匹配 , 就会出异常 ; 如 : 执行如下代码 , 就会报异常 ; 字符串内容是 0.5 , 显然是一个 Double 类…

Kotlin Flow响应式编程,StateFlow和SharedFlow

本文同步发表于我的微信公众号&#xff0c;扫一扫文章底部的二维码或在微信搜索 郭霖 即可关注&#xff0c;每个工作日都有文章更新。 大家好&#xff0c;今天是Kotlin Flow响应式编程三部曲的最后一篇。 其实回想一下我写这个Kotlin Flow三部曲的初衷&#xff0c;主要还是因为…

基于瑞芯微平台cif接口dvp相机的视频接入(ov2640、rv1126为例)

基于瑞芯微平台cif接口dvp相机的视频接入&#xff08;ov2640、rv1126为例&#xff09;名词定义视频格式sensor与ispI2CXCLK行场同步信号DATA抓图名词定义 CIF&#xff0c;指RK芯片中的VIP模块&#xff0c;用以接收Sensor数据并保存到Memory中&#xff0c;仅转存数据&#xff0c…

Komo 综合资产收集和漏洞扫描工具

前言 因工作中的需要&#xff0c;开发了这款综合资产收集和漏洞扫描工具&#xff0c;方便在工作中各方面的收集资产和漏洞扫描&#xff0c;同时也可用于挖洞。 Komo已经在工作中辅助我挖到过一些漏洞&#xff0c;同时轻便了我资产收集的过程。 Komo is a comprehensive asset c…

【图像处理OpenCV(C++版)】——3.3 几何变换之极坐标变换

前言&#xff1a; &#x1f60a;&#x1f60a;&#x1f60a;欢迎来到本博客&#x1f60a;&#x1f60a;&#x1f60a; &#x1f31f;&#x1f31f;&#x1f31f; 本专栏主要结合OpenCV和C来实现一些基本的图像处理算法并详细解释各参数含义&#xff0c;适用于平时学习、工作快…

MATLAB | 如何从热图中提取数据

这期做了个可能有用的小工具&#xff0c;一般论文中热图很少给出数据&#xff0c;于是就想写个小工具通过热图上的颜色估计出数据值来&#xff0c;目前写了个初版的工具分享给大家&#xff01; 工具函数 由于只是初版&#xff0c;要手动改的地方还是不少的&#xff0c;要设置…

PHP多商户AI智能在线客服系统源码 机器人自动回复 即时通讯聊天系统源码

一套智能在线客服系统源码 多商户网页客服系统源码 支持二十种国际语言 带机器人自动回复。 框架&#xff1a;Thinkphp5workerman&#xff0c; 环境&#xff1a;nginxphp7.3mysql5.6 支持H5公众号APP小程序 了解更多可私信我&#xff01; 系统功能&#xff1a; 1、支持国际…

编写程序时调用第三方程序时使用的是相对路径而不是绝对路径会造成什么严重后果(Windows Linux)

简介 在编写程序时&#xff0c;有很多人调用第三方程序使用的是相对路径&#xff0c;而不是绝对路径&#xff0c;如下&#xff1a; #!/bin/python3import osos.system("whoami") #调用whoami程序&#xff0c;查看当前用户名#!/bin/bashfind / -name "hellowor…

day10|239. 滑动窗口最大值、347.前 K 个高频元素

239. 滑动窗口最大值 给你一个整数数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值 。 示例 1&#xff1a; 输入&#xff1a;nums [1,3…

如何修改视频MD5的格式?这些方法值得你收藏

MD5实际上是计算机安全领域中广泛使用的一种散列函数&#xff0c;可以用来保护消息的完整性&#xff0c;简单来说就是类似于我们的指纹&#xff0c;可以说MD5是每个文件的“数字指纹”。比如&#xff1a;我们在平台上传一些热门视频&#xff0c;平台会自动识别视频的MD5值&…

嵌入式 LINUX 驱动开发 day01 第一个内核模块程序 多文件编译为一个程序, 内核模块参数, 内核模块依赖

1.第一个内核模块程序 ( 记得配置自己的交叉编译的工具,) 首先两个文件 vser.c Makefile (记得大写的M) vser.c #include <linux/init.h> //内核初始化头文件 #include <linux/module.h> //内核模块文件 #include <linux/kernel.h> //&…

Java基础算法每日5道详解(6)

112. Path Sum 路径总和 Given the root of a binary tree and an integer targetSum, return true if the tree has a root-to-leaf path such that adding up all the values along the path equals targetSum. A leaf is a node with no children. Example 1: Input: ro…

html+css实现一个响应式管理平台架构模板

文本将会带你使用htmlcss实现一个响应式的管理平台架构模板&#xff0c;目前来说市面上的管理平台架构模板大同小异&#xff0c;文本的知识点都会符合场景所需。 目录 1、管理平台的架构内容 2、顶部的布局 3、下半部分布局 4、左侧菜单区域实现 5、右侧主体区域实现 …

前端重新部署如何通知用户刷新网页?

我把我掘金的文章同步一份给CSDN 1.目标场景 有时候上完线&#xff0c;用户还停留在老的页面&#xff0c;用户不知道网页重新部署了&#xff0c;跳转页面的时候有时候js连接hash变了导致报错跳不过去&#xff0c;并且用户体验不到新功能。 2.思考解决方案 如何去解决这个问…

顶象助力绿球金科打造App低碳出行场景

“低碳出行”、“碳中和”、“碳惠普”正在成为近几年的科技热词之一。 自2020年9月&#xff0c;中国向世界许下“力争2030年前实现碳达峰&#xff0c;2060年前实现碳中和”的承诺以来&#xff0c;一场围绕绿色节能、低碳减排的变革正在席卷各行各业。 “碳中和”已经成为时代…

如何让SCI期刊审稿人,理解你的文章? - 易智编译EaseEditing

首先需要对论文进行全文润色 对于发表论文来说&#xff0c;进行润色是必须的&#xff0c;正因为SCI论文翻译要求高难度大&#xff0c;无论笔译还是口译都一定要有过硬的基本功&#xff0c;知识面要足够宽广&#xff0c;专业综合能力要求高。 所以当一篇论文的整体结构不到位&…

凯恩帝机床联网

一、设备信息确认 1、确认型号 数控面板拍照确认&#xff1a; 此系统为&#xff1a;K1TCi 注&#xff1a;凡是系统中带i的&#xff0c;基本上都含网口。 2、确认通讯接口 网口常见位置&#xff0c;XS92&#xff08;丝印标号&#xff09;&#xff0c;可通过这个确认&#x…