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
英文地址,請注明出處:http://en.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,我是摘星! 🌈 在彩虹般絢爛的技術棧中,我是那個永不停歇的色彩收集者。 🦋 每一個優化都是我培育的花朵,每一個特性都是我放飛的…