【Go语言】常用变量类型的创建

1. 切片slice

在Go语言中,创建切片有两种常见的方式:使用 var 声明空切片和使用 make 函数。

  • 使用 var 声明空切片:
var s []int
s = append(s, 100)

这种方式会声明一个空的切片,初始时没有分配底层数组。你可以使用 append 函数向空切片中添加元素,切片会根据需要自动扩容。

  • 使用 make 函数创建切片:
s := make([]int, 0)

这种方式使用 make 函数创建了一个初始长度为0的切片,并分配了对应的底层数组。你可以使用 append 函数向切片中添加元素,切片会在需要时自动扩容。
区别:
使用 var 声明空切片时,切片的底层数组在初始时不会被分配。只有在使用 append 函数添加元素时,才会根据需要动态分配底层数组。
使用 make 函数创建切片时,切片的底层数组会在初始时被分配。通过 make 函数创建的切片已经具有了初始的长度和容量,可以直接使用 append 函数添加元素。

2. 映射map

在 Go 语言中,创建一个 map 类型的变量有两种常见的方式:使用 make 函数和直接声明。这两种方式有一些区别:

  • 使用 make 函数创建 map:
m := make(map[keyType]valueType)

这种方式使用 make 函数来创建一个空的 map,并分配了对应的内存空间。你可以在后续的代码中使用赋值操作符(=)来添加键值对到 map 中。

  • 直接声明 map 变量:
var m map[keyType]valueType

这种方式只是声明了一个 map 类型的变量,但没有分配内存空间。在这种情况下,map 变量是一个 nil 值,不能直接使用。你需要使用 make 函数来分配内存空间,然后才能向 map 中添加键值对。
以下是两种方式的示例:

  • 使用 make 函数创建 map:
m := make(map[string]int)
m["a"] = 1
m["b"] = 2
fmt.Println(m) // 输出: map[a:1 b:2]
  • 直接声明 map 变量:
var m map[string]int
m = make(map[string]int)
m["a"] = 1
m["b"] = 2
fmt.Println(m) // 输出: map[a:1 b:2]

需要注意的是,无论是使用 make 函数还是直接声明 map 变量,都需要在使用前进行初始化。否则,如果直接使用一个空的 map(nil 值),会导致运行时错误。

3. 通道channel

在 Go 语言中,可以使用声明定义通道变量,但需要在使用前通过 make 函数进行初始化,否则会导致运行时错误。
以下是通过声明定义通道变量并使用的示例:

var ch chan int // 声明一个通道变量// 初始化通道
ch = make(chan int)// 使用通道进行发送和接收操作
go func() {ch <- 42 // 发送数据到通道
}()
val := <-ch // 从通道接收数据
fmt.Println(val) // 输出: 42

在上述示例中,我们首先使用 var 关键字声明了一个名为 ch 的通道变量,然后使用 make 函数对其进行初始化。在后续的代码中,我们可以使用通道进行发送和接收操作。
需要注意的是,如果在使用通道之前没有进行初始化,即没有使用 make 函数对其进行初始化,那么在尝试发送或接收数据时,会导致运行时错误。因此,为了安全起见,在使用通道之前应该始终使用 make 函数进行初始化。

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

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

相关文章

Spring Security 之 表单登录

表单登录 Spring Security提供了支持通过HTML表单提供用户名和密码。本节详细介绍了Spring Security中表单身份验证的工作原理。 本节将介绍Spring Security中的基于表单的登录工作原理。首先,我们将看到用户如何被重定向到登录表单。 第1步,用户首先对其未经授权的资源(/…

Java复习系列之阶段一:基础能力(1)

1. 面向对象 1.1 基本概念 OOD&#xff1a;代表“面向对象设计”&#xff08;Object-Oriented Design&#xff09;是一种编程设计方法学&#xff0c;基于面向对象编程&#xff08;OOP&#xff09;的概念和原则&#xff0c;如封装、继承和多态。OOD的核心在于使用对象&#xf…

【Spring】Spring AOP原理

文章目录 前言代理模式静态代理动态代理JDK动态代理CGLib 动态代理 总结 前言 前面我们学习了关于 Spring AOP 的使用&#xff0c;那么今天这篇文章&#xff0c;我们将深入理解 Spring AOP 的原理&#xff0c;也就是 Spring 是如何实现 AOP 的。 Spring AOP 是基于动态代理来…

matlab抽取与插值

什么是抽取&#xff1f; 我们假设一个数字信号 x ( n ) , n 1 , 2 , . . . , N x(n),n1,2,...,N x(n),n1,2,...,N共有 N N N个点&#xff0c;抽取就是每个几个点抽1个点&#xff0c;比如2倍抽取&#xff0c;那么抽取后的信号为 y ( n ) , y ( 1 ) x ( 1 ) , y ( 2 ) x ( 3 …

IO 专题

使用try-with-resources语句块&#xff0c;可以自动关闭InputStream [实践总结] FileIUtils 共通方法最佳实践 [实践总结] java 获取在不同系统下的换行符 [实践总结] StreamIUtils 共通方法最佳实践 斜杠“/“和反斜杠“\“的区别 路径中“./”、“…/”、“/”代表的含义…

你真的会数据结构吗:顺序表

❀❀❀ 文章由不准备秃的大伟原创 ❀❀❀ ♪♪♪ 若有转载&#xff0c;请联系博主哦~ ♪♪♪ ❤❤❤ 致力学好编程的宝藏博主&#xff0c;代码兴国&#xff01;❤❤❤ 又和大家见面啦&#xff01;在大家看到这个标题的时候其实就已经发现了&#xff1a;我们的C语言的基础知识大…

【GitHub项目推荐--不错的 Go开源项目】【转载】

开源实时性能分析平台 Pyroscope 是基于 Go 的开源实时性能分析平台&#xff0c;在源码中添加几行代码 pyroscope 就能帮你找出源代码中的性能问题和瓶颈、CPU 利用率过高的原因&#xff0c;调用树展示帮助你理解程序&#xff0c;支持 Go、Python、Ruby 语言。 Pyroscope 可以…

java程序判等问题

注意 equals 和 的区别 对基本类型&#xff0c;比如 int、long&#xff0c;进行判等&#xff0c;只能使用 &#xff0c;比较的是直接值。因为基本类型的值就是其数值。对引用类型&#xff0c;比如 Integer、Long 和 String&#xff0c;进行判等&#xff0c;需要使用 equals 进…

创业板动量策略年化20%如何优化来的?|多策略并行回测以及策略的超参数优化(代码+数据)

原创文章第449篇&#xff0c;专注“AI量化投资、个人成长与财富自由"。 今天的代码工作&#xff0c;是多策略运行&#xff0c;及策略的超参数优化。 最近思考意义比较多。 包括AI量化的意义——从自动化&#xff0c;数字化到智能化。 赚钱是意义吗&#xff1f;赚钱是好…

智能解决方案——体脂秤芯片CSU18M91

现在的年轻人爱健身&#xff0c;十分关注身材、形体&#xff0c;减肥、健身成了生活日常&#xff1b;中老年人则关注健康指数、有无病症&#xff0c;实时把握身体情况。现在一台体脂称通过测试体重、体脂、BMI、水分等数据并给出相应提示&#xff0c;并且许多人都将体脂检测数据…

go语言网络编程通信案例

一.服务端 package mainimport ("fmt""net" )// 服务端 func main() {fmt.Println("服务器开始监听...")listen, err : net.Listen("tcp", "localhost:8889")if err ! nil {fmt.Println("监听错误&#xff1a;",…

MySQL分组,获取组内最新的10条数据

一、记录 记录一次SQL&#xff0c;最近在项目中遇到了一个相对比较复杂的SQL。 要求依据分组&#xff0c;获取每个分组后的前10条数据。 分组查询最新的数据&#xff0c;应该都做过&#xff0c;但是获取前10条数据&#xff0c;还是没处理过的。 二、处理 2.1 前期数据准备 …

力扣刷题第十天 美丽塔 一

给你一个长度为 n 下标从 0 开始的整数数组 maxHeights 。 你的任务是在坐标轴上建 n 座塔。第 i 座塔的下标为 i &#xff0c;高度为 heights[i] 。 如果以下条件满足&#xff0c;我们称这些塔是 美丽 的&#xff1a; 1 < heights[i] < maxHeights[i]heights 是一个 山脉…

开发知识点-Flutter移动应用开发

支持 安卓 IOS Android 鸿蒙 第一章dart基础章节介绍 移动电商——Flutter-广告Banner组件制作 移动电商——Flutter实战课程介绍 Flutter实例——路由跳转的动画效果

Elment UI的el-table-column表头旁边有点击按钮类似的操作

Elment UI的el-table-column表头旁边有点击按钮类似的操作 <el-table-column fixed"right" label"操作" ><!-- 表头 --> {{-- <template slot"header" header"scope">--}} {{-- <span…

精通 VS 调试技巧,学习与工作效率翻倍!

​ ✨✨ 欢迎大家来到贝蒂大讲堂✨✨ ​ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; ​ 所属专栏&#xff1a;C语言学习 ​ 贝蒂的主页&#xff1a;Betty‘s blog 1. 什么是调试 当我们写代码时候常常会遇见输出结果不符合我们预…

基于开源库imu_gps_localization进行组合导航

文章目录 概要数据准备准备工作运行复现结果参考概要 利用imu和GPS数据进行组合导航,在我的数据集上复现效果较差。 数据准备 https://github.com/ucr-robotics/citrus-farm-dataset 准备工作 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone https://github.com…

not eligible for auto-proxying

​ 异常分析 异常信息 is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)异常触发 int beanProcessorTargetCount beanFactory.getBeanPostProcessorCount() 1 postProcessorNames.length;beanFactory.a…

单轴测径仪在线缆电缆测控中的应用

线缆电缆在生产中能进行品质测量与控制&#xff0c;对其生产模式而言&#xff0c;是更为合适的&#xff0c;毕竟其生产模式决定了其任何品质问题出现都会造成产品的品质下降或不合格。要想进行生产高品质的产品&#xff0c;对产线的要求较高。 单轴测径仪作为测控一体&#xff…

转义特殊字符——printf命令、sed命令

shell脚本中,一些字符串引用了特殊字符,但不能通过单引号原样输出,这时候就需要通过转义符对特殊符号进行转义。 printf命令——转义特殊字符 printf 命令是一个用于格式化输出的命令,可以根据指定的格式字符串和参数输出格式化的文本。 printf %q [参数列表]%q 是 pr…