Go 语言 里 `var`、`make`、`new`、`:=` 的区别

Go 语言varmakenew:= 的区别彻底梳理一下。


1️⃣ var

作用:声明变量(可以带初始值,也可以不带)。

  • 语法

    var a int        // 声明整型变量,默认值为 0
    var b string     // 默认值 ""
    var c = 10       // 类型推断为 int
    var d int = 20   // 显式类型
    
  • 特点

    • 不赋值时,自动初始化为零值(0、“”、nil 等)。
    • 适用于包级变量或需要显式声明类型的地方。
    • 不能在函数体外用 :=,但 var 可以。

2️⃣ :=(短变量声明)

作用:声明并初始化变量(只能在函数内用)。

  • 语法

    x := 100          // 类型推断为 int
    y := "hello"      // 类型推断为 string
    
  • 特点

    • 必须同时声明并赋值

    • 只能在函数内部使用。

    • 适合局部变量,简洁方便。

    • 如果左边变量部分已声明:= 会更新未声明的部分:

      a := 1
      a, b := 2, 3 // a 已存在,更新值;b 新声明
      

3️⃣ new

作用:为某种类型分配内存,返回该类型的指针(零值)。

  • 语法

    p := new(int)     // *int 类型,指向的值是 0
    *p = 100          // 修改指针指向的值
    fmt.Println(*p)   // 100
    
  • 特点

    • 只分配内存,不初始化(除了零值)。

    • 返回的是指针类型*T)。

    • 多用于需要指针的场景,比如:

      type Person struct { Name string }
      p := new(Person) // *Person
      

4️⃣ make

作用只用于创建 slice、map、channel,并完成初始化。

  • 语法

    s := make([]int, 5, 10)   // 长度5,容量10的切片
    m := make(map[string]int) // 空map
    ch := make(chan int, 3)   // 缓冲区大小为3的channel
    
  • 特点

    • make分配内存初始化底层数据结构
    • 返回的是引用类型本身(不是指针)。
    • new 不同:new 返回指针,make 返回初始化完成的对象。

5️⃣ 区别总结表

关键字作用返回类型用途初始化
var声明变量(可选初始值)值类型(或引用类型)全局变量/局部变量默认零值
:=声明并赋值(只能函数内)值类型(或引用类型)局部变量需要立即赋值
new分配内存指针类型(*T任意类型仅零值
make创建并初始化 slice、map、chan引用类型本身slice/map/chan已初始化

6️⃣ 直观示例对比

package mainimport "fmt"func main() {// varvar a int          // 0var b = 42         // 42fmt.Println(a, b)// :=c := "hello"fmt.Println(c)// newp := new(int)      // *intfmt.Println(*p)    // 0*p = 99fmt.Println(*p)    // 99// makem := make(map[string]int)m["go"] = 2025fmt.Println(m)
}

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

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

相关文章

计算机网络---IP(互联网协议)

一、IP协议概述 互联网协议(Internet Protocol,IP)是TCP/IP协议族的核心成员,位于OSI模型的网络层(第三层),负责将数据包从源主机传输到目标主机。它是一种无连接、不可靠的协议,提供…

DataFun联合开源AllData社区和开源Gravitino社区将在8月9日相聚数据治理峰会论坛

🔥🔥 AllData大数据产品是可定义数据中台,以数据平台为底座,以数据中台为桥梁,以机器学习平台为中层框架,以大模型应用为上游产品,提供全链路数字化解决方案。 ✨杭州奥零数据科技官网&#xff…

【工具】通用文档转换器 推荐 Markdown 转为 Word 或者 Pdf格式 可以批量或者通过代码调用

【工具】通用文档转换器 推荐 可以批量或者通过代码调用 通用文档转换器 https://github.com/jgm/pandoc/ Pandoc - index 下载地址 https://github.com/jgm/pandoc/releases 使用方法: 比如 Markdown 转为 Word 或者 Pdf格式 pandoc -s MANUAL.txt -o example29.docx …

【UEFI系列】Super IO

文章目录一、什么是Super IO二、Super IO的作用常见厂商三、逻辑设备控制如何访问SIO逻辑设备的配置寄存器具体配置数值四、硬件监控(hardware monitor)一、什么是Super IO Super Input/Output超级输入输出控制器。 通过LPC(low pin count&a…

飞算 JavaAI 2.0.0 测评:自然语言编程如何颠覆传统开发?

一、前言 在AI技术高速发展的今天,编程方式正在经历一场革命。传统的“手写代码”模式逐渐被AI辅助开发取代,而飞算JavaAI 2.0.0的推出,更是让自然语言编程成为现实。 作为一名长期使用Java开发的程序员,我决定深度体验飞算Java…

Dubbo + zk 微服务

一、安装zk注册中心 win版本:windows环境下安装zookeeper教程详解(单机版)-CSDN博客 linux版本: 二、服务提供方搭建 引入dubbo和zk依赖 提供接口 使用注解方式实现接口级注册到zk,而springcloud是将服务注册到注册…

聆思duomotai_ap sdk适配dooiRobot

一、说明 1、duomotai_ap介绍 duomotai_ap是一个针对多模态开发板(如 CSK6-MIX 开发板)的大模型 AI 开发套件 SDK,主要用于开发语音、视觉等多模态 AI 应用。 2、dooiRobot介绍 基于Doly 机器人的经典外观设计,采用聆思CSK6011A…

Photoshop软件打开WebP文件格的操作教程

Photoshop软件打开WebP文件格的操作教程,好吧,这是英文原版: Photoshop 23.2 原生支持 WebP 格式,无需插件即可打开、编辑和保存 WebP 文件。用户可通过“文件 > 另存为副本”选择 WebP 格式,调整无损/有损压缩及质…

【数据结构】——顺序表链表(超详细解析!!!)

目录一. 前言二. 顺序表1. 顺序表的特点2. 代码实现三. 链表1. 单向链表代码实现2.双向链表代码实现四. 顺序表与链表的区别总结一. 前言 顺序表和链表是最基础的两种线性表实现方式。它们各有特点,适用于不同的应用场景。本文将详细介绍这两种数据结构的实现原理、…

GitHub的简单使用方法----(4)

在安装完git之后,桌面右键会出现两个git的选项第一个gui打开是这样的用户界面分别是新建仓库,克隆仓库,打开已经存在的仓库。tips:Git Gui 默认只能操作本地仓库——它本质上是一个图形化的“本地 Git 客户端”。 它本身不内置“下载远程仓库…

蓝桥杯----大模板

在写大模板之前,先讲一个函System_Init(),用于系统初始化关闭所有LED与外设,关闭所有LED就是传入0xff数据打开锁存器,关闭外设就是传入0x00打开锁存器。现在所有底层已经提供给大家了,先提供最简单版本的大模板&#x…

科技写作改革我见:取消参考文献,以点读率取代引证率!

科技写作改革我见:综述应取消参考文献,学术成就评估以点读下载率取代参考文献引证率!李升伟 张君飞 韩若兰引言在当今信息爆炸的时代,科技写作作为知识传播的核心载体,其形式与评价体系正面临前所未有的挑战。传统…

【Altium designer】快速建立原理图工程的步骤

快速建立原理图工程的步骤产品规格书分析 整理产品需求,明确主控芯片、外围接口类型、总线频率、电源需求及隔离要求、PCB尺寸等关键信息。使用文本清单列出所有需求,确保无遗漏。硬件需求架构图绘制 根据需求说明书和收集的信息,使用VISIO绘…

Origin2025b安装包免费,附Origin 2025安装教程

老规矩先放链接:origin2025b安装包 有位小粉丝问我有没有Origin2025b的安装包,有的兄弟有的,只有你想不到,没有小兔找不到的软件。 这个origin是OriginLab公司开发的一个科学绘图、数据分析的软件,Origin支持各种各样…

【C++语法】输出的设置 iomanip 与 std::ios 中的流操纵符

文章目录【C语法】输出的设置 iomanip 与 std::ios 中的流操纵符1. iomanip 中的流操纵方法1.1 位宽操作类1.1.1 std::setw(x)1.1.2 std::setfill(c)1.1.3 std::left1.1.4 std::right1.1.5 std::internal1.2 小数操作类1.2.1 std::fixed1.2.2 std::setprecision(x)1.2.3 std::s…

go语言学习笔记-Map

map 是一种无序的基于 key-value 的数据结构,Go 语言中的 map 是引用类型,必须初始化 才能使用。 Go 语言中 map 的定义语法如下map[KeyType]ValueType常见两种创建方法1 使用map初始化var scoreMap make(map[string]int, 8) scoreMap["陈翔"…

芯片安全标准驱动库,筑牢芯片功能安全基石

随着整车控制器功能日益复杂,为满足越发严格的功能安全认证要求,项目开发人员需要采取相应的安全措施对系统中电子元器件的单点故障(Singel Point Fault)和潜在故障(Latent Fault)进行检测和管理&#xff0…

rn相关ScrollView

一:ScrollView的style和contentContainerStyle二:flex:1,和flexGrow:1用处内容将纵向空间占满

Spark Core 3.3.2 略讲~

✨博客主页: https://blog.csdn.net/m0_63815035?typeblog 💗《博客内容》:大数据、Java、测试开发、Python、Android、Go、Node、Android前端小程序等相关领域知识 📢博客专栏: https://blog.csdn.net/m0_63815035/…

智能家居Agent:物联网设备的统一控制与管理

智能家居Agent:物联网设备的统一控制与管理 🌟 Hello,我是摘星! 🌈 在彩虹般绚烂的技术栈中,我是那个永不停歇的色彩收集者。 🦋 每一个优化都是我培育的花朵,每一个特性都是我放飞的…