Go語言-->變量

Go語言–>變量

在 Go 語言中,定義變量有幾種常見的方式。下面是一些常見的語法和用法:

1. 使用 var 關鍵字定義變量

最常見的方式是使用 var 關鍵字,后面跟上變量名和類型。你也可以為變量賦初值。

基本格式:

var variableName type

示例:

在go語言中定義了一個變量,指定變量類型,如果沒有初始化,則變量默認為零值。零值就是變量沒有做初始化時系統默認設置的值。

類型零值
整型 (int, int32, int64 等)0
浮點型 (float32, float64)0.0
布爾型 (bool)false
字符串 (string)空字符串 ""
指針nil
var age int // 定義一個整數類型的變量 age
var name string // 定義一個字符串類型的變量 name

也可以在定義時給變量賦初值:

var age int = 30 // 定義變量并賦初值
var name string = "Alice" // 定義變量并賦初值

使用類型推斷:

如果你給變量賦了初值,Go 可以自動推斷出變量的類型(類型推斷)。這種情況下,你可以省略類型。

var age = 30 // Go 自動推斷 age 為 int 類型
var name = "Alice" // Go 自動推斷 name 為 string 類型

2. 短變量聲明 :=

Go 還提供了一個簡潔的方式來聲明和初始化變量,叫做短變量聲明。它通常在函數內部使用,省略了 var 關鍵字,自動根據初始值推斷變量的類型。

基本格式:

variableName := value

當我們定義一個變量后又使用該符號初始化變量,就會產生編譯錯誤,因為該符號其實是一個聲明語句
也就是說intVal := 1相等于:

var intVal int 
intVal =1 

示例:

age := 30 // 自動推斷 age 為 int 類型
name := "Alice" // 自動推斷 name 為 string 類型

注意:短變量聲明只能在函數內部使用,不能在函數外部使用。

3. 聲明常量 const

常量的值在編譯時就已經確定,不會改變。常量通過 const 關鍵字聲明。

基本格式:

const constantName type = value

示例:

const pi float64 = 3.14159 // 定義一個浮動常量 pi
const message = "Hello, World!" // 定義一個字符串常量 message,Go 會自動推斷類型為 string

4. 多個變量聲明

Go 允許你在一行中聲明多個變量,可以使用 var 關鍵字或者短變量聲明。

使用 var 聲明多個變量:

var a, b, c int // 聲明多個 int 類型的變量

使用短變量聲明:

a, b, c := 1, 2, 3 // 聲明多個變量并初始化

5. 全局變量和局部變量

  • 全局變量:在函數外部聲明的變量是全局變量,在整個包內都能訪問。

函數外定義的變量為全局變量,全局變量只需要在一個源文件中定義,就可以在所有源文件中使用,甚至可以使用import引入外部包來使用。全局變量聲明必須以 var 關鍵字開頭,如果想要在外部包中使用全局變量的首字母必須大寫。

  • 局部變量:在函數內部聲明的變量是局部變量,只能在該函數內使用。

示例:

package mainimport "fmt"var globalVar = 100 // 全局變量func main() {var localVar = 50 // 局部變量fmt.Println(globalVar)fmt.Println(localVar)
}

6 匿名變量

匿名變量使用 下劃線 _ 來表示,它不能用作變量的名稱,不能直接訪問或修改其值。Go 語言在使用匿名變量時,會自動丟棄對應的值。

示例:
package mainimport "fmt"func main() {a, _ := 10, 20  // 忽略第二個返回值fmt.Println(a)   // 只打印 10
}

匿名變量在以下幾種常見場景中很有用:

1) 忽略函數的返回值

當調用一個函數時,返回值中可能有些我們并不關心,只需要其中一部分的值。在這種情況下,使用匿名變量來忽略不需要的值。

示例:
package mainimport "fmt"func getCoordinates() (int, int, int) {return 1, 2, 3
}func main() {x, _, z := getCoordinates()  // 忽略第二個返回值fmt.Println(x, z) // 輸出:1 3
}

在這個例子中,函數 getCoordinates 返回了三個值,但我們只關心第一個和第三個值,于是使用 _ 來忽略第二個返回值。

2) 在循環中忽略索引

在某些情況下,當我們不需要使用迭代器的索引值時,可以使用匿名變量來忽略它。

示例:
package mainimport "fmt"func main() {numbers := []int{10, 20, 30}for _, value := range numbers {  // 忽略索引fmt.Println(value)  // 輸出 10 20 30}
}

這里,for _, value := range numbers 中的 _ 用來忽略數組的索引,只關注值。

3) 只關注某些字段

有時結構體或接口中包含多個字段,但你只需要其中的一些字段。通過使用匿名變量,你可以只選擇需要的字段。

示例:
package mainimport "fmt"type Person struct {Name    stringAge     intAddress string
}func main() {p := Person{"Alice", 30, "New York"}name, _ := p.Name, p.Age  // 只關注 Name,忽略 Agefmt.Println(name)  // 輸出:Alice
}

在這個例子中,結構體 Person 有多個字段,但我們只關心 Name,所以通過匿名變量忽略了 Age 字段。

4) 避免編譯器警告

在某些情況下,你可能需要聲明一個變量,但你并不打算使用它。為了避免編譯器的警告,可以使用匿名變量。

示例:
package mainfunc main() {var _ int  // 這樣聲明的變量不會被使用
}

這樣可以確保變量不會被使用,避免編譯器發出警告。

匿名變量的限制

  • 無法訪問:匿名變量一旦被賦值,就無法訪問其值。例如,你不能像普通變量那樣用 fmt.Println() 打印匿名變量的值。
  • 只能丟棄值:匿名變量的作用就是丟棄不需要的值,因此,它只能在接受函數返回值時被使用。
示例:
package mainfunc main() {// 無法訪問匿名變量的值_, _ := 1, 2// fmt.Println(_)  // 編譯錯誤:cannot use _ as value
}

匿名變量的優勢與適用場景

  • 代碼簡潔:當你不關心某些返回值時,匿名變量使代碼更加簡潔,避免了為不使用的變量命名。
  • 避免浪費資源:如果一個函數返回多個值,但你只關心其中的某些值,使用匿名變量可以避免不必要的內存占用和浪費。
  • 保持語義清晰:匿名變量讓你顯式地表明某些返回值是有意忽略的,這在代碼閱讀時能提供清晰的語義。

總結

匿名變量(_)在 Go 語言中是一個非常實用的特性,主要用于忽略函數返回值、循環索引值或者結構體字段等。當我們不關心某些數據時,通過使用匿名變量來丟棄它們,能夠提高代碼的簡潔性和可讀性。

  • 局限性:匿名變量不能被訪問,不能修改其值。

  • 常見用途

    • 忽略不需要的函數返回值
    • 忽略循環中的索引
    • 避免編譯器警告
    • 僅關心部分字段

在實際開發中,合理使用匿名變量能夠使代碼更簡潔并提升可讀性。如果有不需要的值,使用匿名變量是一個非常優雅的解決方案。

7. 指針變量的定義

Go 語言可以通過 & 來獲取變量的地址,從而得到指針。指針變量可以存儲其他變量的地址。

基本格式:
var ptr *Type // 定義一個指針變量
示例:
var ptr *int // 定義一個指向 int 類型的指針變量

總結:

  • 使用 var 關鍵字可以聲明變量,并指定類型或初始化值。
  • 使用 := 可以簡潔地聲明并初始化變量(僅限函數內部)。
  • 使用 const 定義常量,值不可修改。
  • Go 自動推斷變量的類型,簡化代碼書寫。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/93814.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/93814.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/93814.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

分布式鏈路追蹤的實現原理

分布式鏈路追蹤系統的實現涉及多個核心技術環節,下面我將從數據采集、上下文傳播、存儲分析等維度深入解析其工作原理。 一、核心架構組件 1. 系統組成模塊 #mermaid-svg-pDlZY54w2Z0Bp1H1 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-si…

Python爬蟲實戰:研究micawber庫相關技術構建網頁采集系統

1. 引言 1.1 研究背景與意義 在當今信息爆炸的時代,互聯網上的數據量呈現出爆炸式增長。如何從海量的網頁數據中提取有價值的信息,成為了一個重要的研究課題。網絡爬蟲作為一種自動獲取網頁內容的技術,為解決這一問題提供了有效的手段。通過網絡爬蟲,可以快速、高效地采集…

前端框架Vue3(三)——路由和pinia

路由的理解 路由就是一組key-value的對應關系,多個路由,需要經過路由器的管理。 路由-基本切換效果 導航區、展示區請來路由器制定路由的具體規則(什么路徑,對應著什么組件)形成一個一個的路由 【兩個注意點】 路由組件…

【go】實現BMI計算小程序與GUI/WEB端實現

好的,下面是用 Go 語言實現的一個簡單的 BMI(Body Mass Index,身體質量指數)計算器,包含中文注釋與完整代碼,可以直接運行。 一、BMI 計算公式 BMI體重(kg)身高2(m2&…

Windows系統優化命令-記錄

閑著無聊,近來電腦有些卡頓,記錄一下相關命令。最好的命令還是格式化╮(╯▽╰)╭ 1. 磁盤清理相關命令 cleanmgr - 磁盤清理工具 cleanmgr啟動磁盤清理工具,可清理臨時文件、回收站等內容 diskpart - 磁盤分區工具 diskpart用于磁盤管理&…

BFCP協議學習

BFCP是為了SIP呼叫中實現presentation的二進制協議。開源庫libbfcp 如何協商角色 SIP 消息的SDP中有BFCP 的部分,其中s-only 代表要當服務器角色,c-only 代表要當client角色。confid, userid 都是需要在后續消息中對齊的。 通過port信息可以為后續bfcp…

常用設計模式系列(十七)—命令模式

常用設計模式系列(十七)—命令模式 第一節、前言 各位老鐵好! 今天我來跟大家分享對象行為型模式第二章節——《命令模式》,“命令”一詞,通俗易懂,我們在生活中經常會發出各種各樣的命令,就像你…

【AI繪畫】Stable Diffusion 全面指南:安裝、版本對比、功能解析與高級應用

引言:Stable Diffusion 概述 在人工智能圖像生成領域,商業工具如Midjourney憑借其集成化服務與高質量輸出占據市場,而Stable Diffusion(簡稱SD)則以開源特性構建了差異化優勢。與商業工具依賴云端資源、受限于訂閱費用…

kafka使用kraft

window 使用kafka-storage生成生成一個uuid .\kafka-storage.bat random-uuid格式化存儲 在這里插入代碼片.\kafka-storage.bat format -t 對應的uuid D:\configure\fisher\kafka\config\kraft\server.properties 啟動命令 .\kafka-server-start.bat D:\configure\fisher\kafka…

HCIA-Datacom認證筆記:IP路由基礎——核心概念與路由分類

網絡技術學習中,IP路由是繞不開的核心知識點,對于備考HCIA-Datacom認證的朋友來說,掌握路由基礎能為后續學習打下良好基礎。今天帶朋友們梳理一下IP路由的核心概念、路由表結構及路由分類一、路由核心概念什么是路由? 簡單來說&am…

FFmpeg 安裝與使用

文章目錄1. 環境部署(Windows)1.1. 安裝包下載1.2. 配置環境變量1.3. 驗證安裝2. FFmpeg 基礎使用教程2.1. 常用命令格式2.2. 基礎功能示例2.2.1. 視頻轉碼(MP4 → MKV)2.2.2. 調整分辨率(1080p → 480p)2.…

Python 數據分析(四):Pandas 進階

目錄 1. 概述2. 缺失項3. 分組聚合4. 數據合并5. 數據可視化 5.1 折線圖5.2 條形圖5.3 直方圖5.4 散點圖5.5 餅圖 1. 概述 我們在上一篇文章初識 Pandas中已經對 Pandas 作了一些基本介紹,本文我們進一步來學習 Pandas 的一些使用。 2. 缺失項 在現實中我們獲…

結構化文本文檔的內容抽取與版本重構策略

結構化文本文檔的內容抽取與版本重構策略 摘要 本文深入探討了結構化文本文檔處理領域中的兩大核心技術——內容抽取與版本重構。文章首先分析了結構化文檔的特點及其在現代信息管理中的重要性,隨后系統性地介紹了文檔內容抽取的技術路線與方法論,包括…

【BUUCTF系列】[HCTF 2018]WarmUp1

本文僅用于技術研究,禁止用于非法用途。 Author:枷鎖 點開題目顯示一個圖片,沒有任何交互功能,我們直接查看網頁源代碼我們可以看到有一個歆慕的注釋source.php,我們進行拼接,訪問一下這個文件在url后加上/source.php進…

Flutter Chen Generator - IconFont Generator

Flutter Chen Generator 🚀 一個強大的Flutter代碼生成工具包,包含多個實用的代碼生成器。 ? 功能特性 📁 資源生成器 (Assets Generator) 🔄 自動掃描assets目錄并生成Dart常量🧠 智能駝峰命名轉換,保…

【MATLAB】(二)基礎知識

一.MATLAB命令1.指令行“頭首”的 “>>” 是 “指令輸入提示符” ,它是自動輸入的。“>>” 為運算提示符,表示MATLAB處于準備就緒狀態。如在提示符后輸入一條命令或一段程序后按Enter鍵,MATLAB將給出對應的結果,并將結…

Day36| 1049. 最后一塊石頭的重量 II、494.目標和、474.一和零

文章鏈接 1049. 最后一塊石頭的重量 II 解題關鍵:找到重量和盡量相等的兩堆 確定dp數組以及下標的含義 dp[j]表示容量(這里說容量更形象,其實就是重量)為j的背包,最多可以背最大重量為dp[j]。 確定遞推公式 01背包…

【A*/BFS】P5507 機關

# P5507 機關 題目描述 這扇門上有一個機關,上面一共有12個旋鈕,每個旋鈕有4個狀態,將旋鈕的狀態用數字111到444表示 每個旋鈕只能向一個方向旋轉(狀態:1->2->3->4->1),在旋轉時&am…

終結集成亂局:模型上下文協議(MCP)如何重構AI工具生態?

AI 助手正處于能力發展的初級階段。它們擅長處理獨立任務——例如解析 PDF、編寫 SQL 語句、等等——但當你要求它們在 Slack、Gmail 和 Jira 等平臺間協同操作時,整個流程就變得異常復雜且脆弱,如同調試一套由眾多 API 密鑰串聯的精密機械(魯…

談談畢業工作一年后的變化

文章目錄談談畢業工作一年后的變化工作篇生活篇談談畢業工作一年后的變化 工作篇 2025.7.30 21:49 呼~再次打開這個網站發布文章,是多么陌生。仿佛有說不完的話,但如今時間卻不允許我無限制的長篇大論的寫下去了。 先說下工作吧。 畢業后工作好快啊&…