「Go 語言教程」 Go語言結構

2021-01-09 萬能的華哥Dean
Go 語言教程

學習一門程式語言,除了學習語法,詞法,以及寫法等和編譯器有關的特性(就是什麼是語法錯誤)之外,需要對這個語言的結構有個清晰的認識,其中包括代碼目錄結構,源碼文件,以及代碼結構組織等。

那麼Go語言結構在目錄結構,源碼文件,以及代碼結構組織方面都是什麼樣子的呢。

1 目錄和源碼

首先我門看目錄和源碼,從之前的Go 語言教程我們知道,Go語言有工程目錄,和GOPATH環境變量對應,工程目錄結構有

bin 存放編譯後的可執行文件src 存放實現源碼,go get工具獲取的web上的模塊包都會放到這個目錄下,並有對應的目錄結構pkg 存放編譯後的庫文件(分不同平臺)Go語言的源碼文件格式為.go格式。如hello.go, main.go 。

2 包管理

區別於C/C++,Go語言有包的概念,關鍵字package。Go語言的包管理主要有兩種類型的包:main包和正常的模塊化的包,模塊包。

main包,即是包含主函數入口main方法的包模塊包,即是業務模塊的劃分為不同的業務後定義的包包的定義聲明:

都是統一的,在Go源碼文件(.go文件)使用package進行聲明,以下聲明一個名字為package_name的包

模塊包聲明

package package_name

main包聲明

package main

包的引入和使用

import "package_name"

或者下面寫法

import ( "package_name")

3 包的代碼結構

Go語言的結構,即main包和模塊包的源文件代碼結構,如下例子

模塊包代碼結構

hello 包源碼

main包代碼結構

main包源碼

Go 語言的代碼結構主要包括以下方面:

包的聲明和定義包的引入和使用模塊和方法的定義和使用程序的入口main方法的定義變量定義聲明和使用語句表達式注釋每個模塊包的目錄結構為:

$GOPATH/src/helloworld/hello.go

$GOPATH/src/helloworld/world.go

$GOPATH/src/helloworld/helloworld.go

......

每個包在目錄結構中以目錄樹的方式進行劃分,在包的引入時候需要帶上從src往下的目錄名字連成的目錄結構串,如/github.com/log/xxxx。

import "github.com/log/xxx"

包目錄下可以有多個源碼文件(.go),但是要求所有文件的頭部都是一致的包聲明(package xxxx)。

整個項目要求只能有一個main包和main入口方法。

4 補充說明

文中講到「程序入口方法main」,對於各種流行的語言,都會有main方法作為入口方法之說。入口方法其實代表的是一個程序執行的開始。當然在Go 語言中還有init方法的特性,init方法是Go編譯器特殊處理的,自動調用的方法。不需要代碼顯式調用。至於說語法和詞法,可以參考大學計算機學科學習的《編譯器原理》對其加深學習。

相關焦點

  • 「Go 語言教程」Go語言函數說明
    go語言教程「工欲上其事,必先利器!」一個好的設計往往是效率的體現,所以設計乃高效之本。那麼go語言的函數都是怎麼樣子的,都有些什麼原則和要求呢,那麼怎麼做好函數方法設計呢,就讓我們一起來學習學習。1 入口函數作為編譯型的程式語言,go語言和其他流行的語言(C/C++, JAVA等)都有程序入口,就是所謂的入口函數main。go語言程序作為一個可執行程序需要至少有一個且僅為一個main方法。
  • [Go 語言教程] Go 語言簡介
    Go 語言教程1 Go 語言介紹Go 即Golang,是Google公司2009年11月正式對外公開的一門程式語言。Go是靜態強類型語言,是區別於解析型語言的編譯型語言。解析型語言——原始碼是先翻譯為中間代碼,然後由解析器對代碼進行解釋執行。編譯型語言——原始碼編譯生成機器語言,然後由機器直接執行機器碼即可執行。
  • 「Go 語言教程」 Go 語言基礎語法
    Go 語言教程最原始的語言,從人類使用的手語,到語音表達;從英語到漢語,以及到計算機能識別的各種程式語言,每個語言都有自己的語法。那麼Go語言也是類似的。Go語言的基礎語法主要由這幾個方面構成,Go語言的關鍵字,Go語言的標識符,行分隔符回車,變量聲明分割的空格,注釋,以及標記。
  • 最近火熱github上的6個的Go語言項目
    對代碼、編程感興趣的可以關注「老K玩代碼」公眾號和我交流!Go 語言語法與 C 相近,但功能上有:內存安全,GC(垃圾回收),結構形態及 CSP-style 並發計算。Go語言被碼友們戲稱「寫起來像python,跑起來像C」。 那麼Go有什麼好的項目可以給我們上手嗎?
  • IT新人學透go語言,最新github值得關注的8個go項目
    對代碼、編程感興趣的可以關注「老K玩代碼」公眾號和我交流!Go 語言語法與 C 相近,但功能上有:內存安全,GC(垃圾回收),結構形態及 CSP-style 並發計算。 Go被稱為兼顧了C語言的運算速度和python的易讀性,已經成為業內廣泛使用的語言之一。
  • 未來後端語言的趨勢——go語言免費學習網站大推薦!
    導語: Go語言是谷歌2009發布的第二款開源程式語言,以其可以媲美C或C++代碼的速度,而且更加安全、支持並行進程得到人們的喜愛。而它高並發的特性我相信它將在以後的後端語言中越來越流行!一.易百教程易百教程網的go語言教程是我首先要推薦的,為什麼呢?它相比於其它go語言教程網站的內容,除了一樣詳實的教程外,還增加了go編程代碼實例,最適合初次學習go語言的人邊看教程,變根據實例敲代碼。
  • 老王學習go語言——3.Go語言基礎 -第一個go程序
    一段生平介紹完,不能免俗還得先安裝個環境,輸出個helloWorld,因為本文不是教人安環境的教程。而且這個未免太基礎,不適合在這麼「...」的文章裡講。請各位自行學習吧。修改完成以後,新建go Project,順利創建,創建成功後的試圖和目錄結構如下:
  • go語言底層數據結構之map解析
    go語言中map類型首先我們來看一段代碼:大家想下程序會輸出什麼?如果go語言是傳遞引用的話,那輸出應該是false,但是實際輸出是true,fn內部申請的map[int][int]不影響外部m,那此時我們就要問:如果map不是引用類型,那map是什麼?上面代碼列印出了m的地址,m的內容,m的大小,輸出為:所有m是一個指針,那具體m的結構是什麼呢?可以通過gdb調試,關於如何調試可以看我前面一篇文章。
  • Go語言的魅力
    給周末無事,想充電的朋友分享一下我最近迷戀上了Go語言的理由[偷笑],起初讓我了解它,是它那幾位殿堂級的創始人,後來去年B站原始碼洩露,幾乎整站全是go語言架構,讓我映像深刻,而近年國內很多巨頭阿里,頭條,小米,360,美團,螞蟻,騰訊等的開源項目可見,go就是一門未來具有絕對魅力的語言,我很多朋友公司裡,無歷史包袱的新項目都在優先考慮golang架構。
  • Go語言11歲了,網友:他喵的,終於確定出「泛型」了
    和pkg.go.dev。與此同時,還進行了許多性能上的改進,包括「更快的defer」和真正「搶佔式的goroutine調度」,目的就是為了減少調度和垃圾收集延遲。(Go generics)的最新設計草案,以及原型工具和「泛型」實驗語法的playground。
  • 數組棧、鍊表棧誰的性能更優「Go語言測試」
    剛入門Go語言,發現Go本身並沒有像Java那樣提供比如Stack,或是LinkedList的實現,於是基於切片的特點,封裝了棧、隊列、雙向隊列。棧也可以基於鍊表來實現,那到底誰的性能會更優呢,於是便有了這篇性能對比。
  • Go語言入門參考寶典
    :語言結構先看一段go語言最簡單的helloWorld程序。變量當標識符(包括常量、變量、類型、函數名、結構欄位等等)以一個大寫字母開頭,如:Println,那麼使用這種形式的標識符的對象就可以被外部包的代碼所使用(客戶端程序需要先導入這個包),這被稱為導出(像面向對象語言中的 public);標識符如果以小寫字母開頭,則對包外是不可見的,但是他們在整個包的內部是可見並且可用的(像面向對象語言中的 protected )。
  • 基於Go語言大型企業級電商秒殺系統實戰教程 張長志技術全才、擅長...
    掃碼下載「CSDN程式設計師學院APP」,1000+技術好課免費看 APP訂閱課程,領取優惠,最少立減5元 ↓↓↓   視頻教程-基於Go語言大型企業級電商秒殺系統實戰教程-Go語言 學習有效期:永久觀看
  • 快速轉型golang(go語言)web開發 03-Go語言的特點
    穩定的二進位接口go自發布1.0時,就承諾向後兼容,所以即使用高版本的go去運行之前用低版本go寫的代碼,一樣可以運行。這也是go可以作為工業級語言的前提。穩定的語言特性自1.0版發布以來,go很少像其它語言那樣在語言層面添加新的語法(再也不用擔心學不動了有木有)實實在在的性能go的每次版本升級,都會帶來或多或少的性能提升以及bug修復(所以對於程式設計師而言,我們就很省心了,不需要像學java那樣還得學很多額外的性能調優知識)Go語言 vs 其它技術棧Go的開發速度跟python
  • 解讀Go語言的2020:變革前夜
    按照慣例,本文作者估計這個環境變量還會再在 Go 語言中留存 1 或 2 個版本。 與之相應的,Go 語言自帶的各種標準工具會徹底地站在 go modules 一方。 命令 go install 將會支持安裝指定版本號的代碼包。
  • 手把手教你學Go語言:Go語言基礎系列 -8分鐘學基礎語法
    文章每周持續更新,你的「點讚」「關注」是對我最大的肯定,可以微信搜公眾號「 後端技術學堂 」第一時間閱讀(一般比博客早更新一到兩篇)對於一般的語言使用者來說 ,20% 的語言特性就能夠滿足 80% 的使用需求,剩下在使用中掌握。
  • Go語言環境安裝
    選擇一個print.go文件,通過window命令行工具運行go run命令,看看輸出效果。以上print.go測試了go語言中各類數據類型的列印結果輸出。命令行運行test.go,結果輸出如下。https://www.jetbrains.com/go/LiteIDE 是一款開源、跨平臺的輕量級 Go 語言集成開發環境(IDE)。https://sourceforge.net/projects/liteide/files/Eclipse 也是非常常用的開發利器,以下介紹如何使用 Eclipse 來編寫 Go 程序。
  • 跟光磊學Go語言-Go語言概述與開發環境搭建
    簡單:C語言37個關鍵字,C++11多達84個關鍵字,Go只有25個關鍵字,對於複雜任務,例如並發和內存管理,go語言提供了並發支持以及垃圾回收機制。,hyperledger這些都是使用Go語言開發的,因此Go語言是區塊鏈的首選開發語言傳統的企業應用,物聯網應用都有Go的身影。
  • 「GCTT 出品」Go 語言中的 Monkey 補丁
    如果你對 monkey 補丁是怎麼工作的不感興趣,你只是想使用它的話,你可以在這裡找到對應的庫文件讓我們看看一下代碼產生的彙編碼:packagemainfunca() int { return1 }funcmain() {print(a())}example1.go 由 GitHub 託管 查看源文件上述代碼應該用 go build -gcflags
  • 快速轉型golang(go語言)web開發 03-Go語言的特點
    穩定的二進位接口go自發布1.0時,就承諾向後兼容,所以即使用高版本的go去運行之前用低版本go寫的代碼,一樣可以運行。這也是go可以作為工業級語言的前提。穩定的語言特性自1.0版發布以來,go很少像其它語言那樣在語言層面添加新的語法(再也不用擔心學不動了有木有)實實在在的性能go的每次版本升級,都會帶來或多或少的性能提升以及