欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go語言的文件名、標識符、關鍵字和包基礎教程

 更新時間:2024年06月03日 09:00:36   作者:栗箏i  
Go的關鍵字不能被用作標識符,這是一個重要的限制,以避免命名沖突和語法混淆,這篇文章主要給大家介紹了關于Go語言文件名、標識符、關鍵字和包的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下

1、文件名、關鍵字與標識符

1.1、名稱與標識符

Go 語言中的源文件通常以 .go 為擴展名,并存儲在計算機上。這些文件的命名完全由小寫字母構成,例如 scanner.go。對于包含多個詞的文件名,通常使用下劃線 _ 來連接各部分,如 scanner_test.go,并且文件名中不會包含空格或其他特殊字符。

在 Go 語言的環(huán)境中,源文件的大小并沒有限制,一個文件可以包含從幾行到數(shù)千行的代碼。

在 Go 代碼中,幾乎所有的元素都需要用到名稱或標識符,而且這些標識符對大小寫敏感,這一點與 C 系列語言相似。有效的標識符應該以字母(支持任何 UTF-8 編碼的字符)或下劃線 _ 開頭,后接任意數(shù)量的字母、數(shù)字或下劃線,例如:X56、group1、_x23、i??12。

不過,有些標識符是無效的,包括:

  • 1ab:以數(shù)字開頭是不允許的。
  • case:因為它是 Go 語言的關鍵字。
  • a+b:包含運算符,這是不被允許的。

特別地,下劃線 _ 被稱為空白標識符,它在 Go 語言中有特殊用途??梢詫⑷魏晤愋偷闹蒂x給它,但賦值后的結果不會被使用,也不能通過它來進行進一步的變量賦值或計算。

此外,在 Go 代碼中,有時候你會遇到?jīng)]有明確名稱的變量、類型或方法,這些通常被稱為匿名變量。使用匿名變量可以在某些場景下提升代碼的靈活性,盡管它們不是編寫 Go 程序的必需元素。

1.2、關鍵字

Go 語言定義了 25 個關鍵字或保留字,這些關鍵字在編寫 Go 代碼時具有特殊的語義,不能用作標識符。這些關鍵字涵蓋了控制結構、數(shù)據(jù)類型定義、以及包的管理等多個方面。下面是 Go 語言中所有的關鍵字列表:

控制流關鍵字:

  • break: 用于中斷當前循環(huán);
  • case: 在 switch 語句中,用于定義一個分支;
  • continue: 跳過當前循環(huán)的剩余部分,繼續(xù)執(zhí)行下一次循環(huán);
  • default: 在 switch 或 select 語句中,定義默認分支;
  • defer: 延遲執(zhí)行一個函數(shù)直到包含它的函數(shù)執(zhí)行結束;
  • else: 與 if 一起使用,定義一個條件不滿足時執(zhí)行的代碼塊;
  • fallthrough: 在 switch 中強制執(zhí)行下一個 case;
  • for: 定義循環(huán);
  • goto: 跳轉到指定的標簽;
  • if: 條件語句;
  • return: 從函數(shù)中返回值;
  • select: 用于處理多個通道的接收操作;
  • switch: 條件分支語句;

數(shù)據(jù)類型及結構關鍵字:

  • chan: 用于定義通道類型;
  • const: 定義常量;
  • func: 定義函數(shù);
  • interface: 定義接口;
  • map: 定義映射類型;
  • package: 定義包名;
  • range: 用于迭代數(shù)組、切片、字符串、映射或通道;
  • struct: 定義結構體;
  • type: 定義一個新的類型;
  • var: 定義變量。

這些關鍵字是 Go 語言的基礎組成部分,理解它們的用途和語義對于編寫有效和高效的 Go 程序至關重要。

之所以刻意地將 Go 代碼中的關鍵字保持的這么少,是為了簡化在編譯過程第一步中的代碼解析。和其它語言一樣,關鍵字不能夠作標識符使用。

Go 語言除了有25個關鍵字外,還提供了36個預定義的標識符,這些包括了一系列基本數(shù)據(jù)類型的名稱和一些重要的內(nèi)置函數(shù)。這些預定義標識符是 Go 語言標準庫的一部分,它們提供了操作基本數(shù)據(jù)類型和執(zhí)行關鍵操作的能力。

這里是 Go 語言中的 36 個預定義標識符:append、boolbyte、cap、close、complex、complex64、complex128、copy、false、float32、float64、imag、intint8、int16、int32int64、iota、len、make、newnil、panicprint、printlnreal、recoverstring、true、uintuint8、uint16uint32、uint64、uintptr

1.3、符號

程序一般由關鍵字、常量、變量、運算符、類型和函數(shù)組成。

程序中可能會使用到這些分隔符:括號 (),中括號 [] 和大括號 {}

程序中可能會使用到這些標點符號:.、,;、: 和 。

程序的代碼通過語句來實現(xiàn)結構化。每個語句不需要像 C 家族中的其它語言一樣以分號 ; 結尾,因為這些工作都將由 Go 編譯器自動完成。

如果你打算將多個語句寫在同一行,它們則必須使用 ; 人為區(qū)分,但在實際開發(fā)中我們并不鼓勵這種做法。

2、Go 包

2.1、Go 語言包的概念

包在 Go 語言中用于結構化代碼,類似于其他編程語言中的類庫或命名空間。每個 Go 源文件都屬于一個特定的包,并且一個包可以由多個 .go 擴展名的源文件組成。通常情況下,文件名和包名不相同。

在源文件的非注釋第一行,必須明確指出該文件屬于哪個包,例如 package main。package main 定義了一個可獨立執(zhí)行的程序,每個 Go 應用程序必須包含一個名為 main 的包。

盡管一個應用程序可能包含多個不同的包,但即使只使用 main 包,也不必將所有代碼寫在一個龐大的文件中??梢詫⒋a分散到幾個較小的文件中,每個文件的第一行使用 package main 表明它們都屬于 main 包。如果編譯的包名不是 main,如 pack1,則編譯產(chǎn)生的是 pack1.a 對象文件而不是可執(zhí)行程序。值得注意的是,所有包名應使用小寫字母。

2.2、Go 語言的標準庫

Go 語言的安裝包中包括了一個豐富的標準庫,這是一組預先編譯好的包,可以直接在你的程序中使用。標準庫的具體位置取決于操作系統(tǒng)和處理器架構。

例如,在 Windows 系統(tǒng)上,標準庫位于 Go 安裝根目錄下的 pkg\windows_386 子目錄中;在 Linux 系統(tǒng)上,如果是 64 位,則在 pkg\linux_amd64 子目錄中,32 位系統(tǒng)則在 linux_386 目錄中。通常情況下,標準庫存放在 $GOROOT/pkg/$GOOS_$GOARCH/ 目錄下。

標準庫中包含了許多實用的包,如 fmt 和 os。除了使用這些現(xiàn)成的包,你也可以創(chuàng)建自己的包以滿足特定的功能需求。

為了構建程序,所有相關的包和文件必須按照正確的順序編譯,這個順序通常由包的依賴關系決定。在 Go 語言中,屬于同一個包的所有源文件必須一起編譯,因為一個包在編譯時被視為一個單獨的編譯單元。按照慣例,每個目錄中通常只包含一個包,以保持結構的清晰和管理的簡單。

2.3、Go 語言包依賴與編譯策略

在 Go 語言的包模型中,對某個包進行更改或重新編譯后,所有引用該包的客戶端程序必須重新編譯,以確保所有的依賴都是最新的。Go 的編譯器采用了一種顯式依賴關系的機制,這種機制極大地加快了編譯速度。

編譯過程中,Go 編譯器從后綴名為 .o 的對象文件中提取傳遞依賴類型的信息。這意味著,編譯器在編譯一個文件時,只需引用直接依賴的 .o 文件,而不是所有相關的源文件。例如:

  • 假設有三個文件:A.go、B.go 和 C.go,其中 A.go 依賴于 B.go,而 B.go 依賴于 C.go。
  • 編譯順序應為先編譯 C.go,再編譯 B.go,最后編譯 A.go。
  • 在編譯 A.go 時,編譯器只需讀取 B.o 文件。盡管 B.go 依賴 C.go,編譯 A.go 并不直接需要 C.o,因為所有必要的信息都已經(jīng)在 B.o 中。

這種編譯機制不僅簡化了依賴管理,也使得編譯大型項目更加高效。通過這種方式,Go 語言能夠提供快速的編譯速度,同時保持代碼的模塊化和高度組織化。

2.4、每一段代碼只會被編譯一次

一個 Go 程序是通過 import 關鍵字將一組包鏈接在一起。

import "fmt" 告訴 Go 編譯器這個程序需要使用 fmt 包(的函數(shù),或其他元素),fmt 包實現(xiàn)了格式化 IO(輸入/輸出)的函數(shù)。包名被封閉在半角雙引號 "" 中。如果你打算從已編譯的包中導入并加載公開聲明的方法,不需要插入已編譯包的源代碼。

如果需要多個包,它們可以被分別導入:

import "fmt"
import "os"

或:

import "fmt"; import "os"

但是還有更短且更優(yōu)雅的方法(被稱為因式分解關鍵字,該方法同樣適用于 const、var 和 type 的聲明或定義):

import (
   "fmt"
   "os"
)

它甚至還可以更短的形式,但使用 gofmt 后將會被強制換行:

import ("fmt"; "os")

當你導入多個包時,最好按照字母順序排列包名,這樣做更加清晰易讀。

如果包名不是以 . 或 / 開頭,如 "fmt" 或者 "container/list",則 Go 會在全局文件進行查找;如果包名以 ./ 開頭,則 Go 會在相對目錄中查找;如果包名以 / 開頭(在 Windows 下也可以這樣使用),則會在系統(tǒng)的絕對路徑中查找。

導入包即等同于包含了這個包的所有的代碼對象。

除了符號 _,包中所有代碼對象的標識符必須是唯一的,以避免名稱沖突。但是相同的標識符可以在不同的包中使用,因為可以使用包名來區(qū)分它們。

包通過下面這個被編譯器強制執(zhí)行的規(guī)則來決定是否將自身的代碼對象暴露給外部文件:

2.5、Go 語言的標識符可見性與包管理

在 Go 語言中,標識符(包括常量、變量、類型、函數(shù)名、結構字段等)的首字母大小寫決定了其可見性和可訪問性。如果標識符以大寫字母開頭(如 Group1),則該標識符的對象可以被外部包訪問,這相當于其他面向對象語言中的 public。這種機制被稱為導出。值得注意的是,大寫字母可以是任何 Unicode 編碼的字符,不限于 ASCII 碼。

相反,如果標識符以小寫字母開頭,則它對包外是不可見的,類似于面向對象語言中的 private。這種標識符僅在其所屬的包內(nèi)部可見并可用。

例如,假設在包 pack1 中有一個變量或函數(shù)名為 Thing(以大寫 T 開頭,因此可被導出),在其他包中通過導入 pack1 可以訪問 Thing,使用方式如下:pack1.Thing。在這里,pack1 作為命名空間,是不可以省略的。

包的這種命名空間功能有助于避免名稱沖突。例如,pack1.Thing 和 pack2.Thing 可以清晰地區(qū)分屬于不同包的同名變量或函數(shù)。

2.6、使用包的別名

在 Go 中,你可以通過為包指定別名來解決包名沖突或簡化代碼。例如,你可以這樣導入 fmt 包并為其設置別名:

package main

import fm "fmt"

func main() {
    fm.Println("hello, world")
}

2.7、包的聲明和初始化

在 Go 中,你可以在導入包之后,在包級別定義或聲明常量(const)、變量(var)和類型(type)。這些定義的作用域是全局的,可在整個包中被訪問。之后,可以聲明一個或多個函數(shù)(func)來進行具體的邏輯操作。這樣的結構使得代碼既清晰又易于管理。

Ps:如果你導入了一個包卻沒有在代碼中使用它,Go 編譯器會拋出錯誤,例如 imported and not used: os。這反映了 Go 的設計哲學:“沒有不必要的代碼!”

總結

到此這篇關于Go語言的文件名、標識符、關鍵字和包的文章就介紹到這了,更多相關Go語言文件名、標識符、關鍵字和包內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Go語言每天必學之switch語句

    Go語言每天必學之switch語句

    這篇文章主要為大家詳細介紹了Go語言每天必學之switch語句的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • go-python 庫使用應用案例

    go-python 庫使用應用案例

    本文深入探討了如何使用Go-Python庫進行跨語言編程,以及在實際應用中的各種技巧和應用案例,在結語中,我們將對Go-Python庫的使用方法與技巧進行總結,并展望Go與Python混合編程的未來發(fā)展
    2024-03-03
  • Golang?實現(xiàn)Redis?協(xié)議解析器的解決方案

    Golang?實現(xiàn)Redis?協(xié)議解析器的解決方案

    這篇文章主要介紹了Golang???實現(xiàn)?Redis?協(xié)議解析器,本文將分別介紹Redis 通信協(xié)議 以及 協(xié)議解析器 的實現(xiàn),若您對協(xié)議有所了解可以直接閱讀協(xié)議解析器部分,需要的朋友可以參考下
    2022-10-10
  • 關于go語言載入json可能遇到的一個坑

    關于go語言載入json可能遇到的一個坑

    Go 語言從新手到大神,每個人多少都會踩一些坑,那么下面這篇文章主要給大家介紹了關于go語言載入json可能遇到的一個坑,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。
    2017-07-07
  • Go項目怎么使用枚舉

    Go項目怎么使用枚舉

    枚舉是一種很重要的數(shù)據(jù)類型,本文主要介紹了Go項目怎么使用枚舉,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • Go語言panic和recover的用法實例

    Go語言panic和recover的用法實例

    panic()和recover()是Go語言中用于處理錯誤的兩個重要函數(shù),本文主要介紹了Go語言panic和recover的用法實例,panic()用于中止程序并引發(fā)panic,而recover()用于捕獲panic并恢復程序的執(zhí)行,感興趣的可以了解一下
    2024-01-01
  • golang實現(xiàn)ping命令的完整代碼

    golang實現(xiàn)ping命令的完整代碼

    這篇文章給大家介紹了如何使用golang實現(xiàn)ping命令,文中給大家介紹了完整的實現(xiàn)代碼,并有詳細的圖文講解,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-02-02
  • 詳解Golang中Context的原理和使用技巧

    詳解Golang中Context的原理和使用技巧

    Golang?的?Context?包,中文可以稱之為“上下文”,是用來在?goroutine?協(xié)程之間進行上下文信息傳遞的,這些上下文信息包括?kv?數(shù)據(jù)、取消信號、超時時間、截止時間等。本文主要介紹了Context的原理和使用技巧,希望對大家有所幫助
    2022-11-11
  • 解決Golang小數(shù)float64在實際工程中加減乘除的精度問題

    解決Golang小數(shù)float64在實際工程中加減乘除的精度問題

    這篇文章主要介紹了解決Golang小數(shù)float64在實際工程中加減乘除的精度問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Go來合并兩個csv的實現(xiàn)示例

    Go來合并兩個csv的實現(xiàn)示例

    本文主要介紹了Go來合并兩個csv的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10

最新評論