最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go語(yǔ)言入門(mén)之基礎(chǔ)語(yǔ)法和常用特性解析

 更新時(shí)間:2023年07月26日 11:00:07   作者:好運(yùn)小子moYi  
這篇文章主要給大家講解了Go語(yǔ)言的基礎(chǔ)語(yǔ)法和常用特性解析,比較適合入門(mén)小白,文中通過(guò)代碼示例介紹的非常詳細(xì),對(duì)我們學(xué)習(xí)Go語(yǔ)言有一定的幫助,需要的朋友可以參考下

Go語(yǔ)言的特點(diǎn)

  • 簡(jiǎn)單易學(xué): Go語(yǔ)言的語(yǔ)法簡(jiǎn)潔清晰,與C語(yǔ)言風(fēng)格相似,易于學(xué)習(xí)和掌握。

  • 高性能、并發(fā)編程: Go語(yǔ)言原生支持并發(fā)編程,采用了輕量級(jí)的Goroutine并發(fā)模型和Channel通信機(jī)制,使得編寫(xiě)并發(fā)程序變得更加簡(jiǎn)單和高效。Go語(yǔ)言具備良好的性能,它的編譯器將Go代碼編譯為機(jī)器碼,且在運(yùn)行時(shí)使用垃圾回收機(jī)制來(lái)管理內(nèi)存,有效地提高了程序的執(zhí)行效率。

  • 完善的工具鏈: Go語(yǔ)言?xún)?nèi)置了豐富的工具集,包括格式化工具、測(cè)試工具、性能分析工具等,開(kāi)發(fā)者可以方便地進(jìn)行代碼格式化、單元測(cè)試和性能借助于這些標(biāo)準(zhǔn)庫(kù),開(kāi)發(fā)者可以更快地構(gòu)建出高效、可靠和安全的應(yīng)用程序。此外,Go語(yǔ)言社區(qū)也提供了豐富的第三方包,可供開(kāi)發(fā)者使用和擴(kuò)展。優(yōu)化等操作。

  • 豐富的標(biāo)準(zhǔn)庫(kù): Go語(yǔ)言的標(biāo)準(zhǔn)庫(kù)是它的一個(gè)重要特點(diǎn),它提供了許多功能豐富和易于使用的包,涵蓋了各個(gè)領(lǐng)域。借助于這些標(biāo)準(zhǔn)庫(kù),開(kāi)發(fā)者可以更快地構(gòu)建出高效、可靠和安全的應(yīng)用程序。此外,Go語(yǔ)言社區(qū)也提供了豐富的第三方包,可供開(kāi)發(fā)者使用和擴(kuò)展。

  • 跨平臺(tái)支持:Go語(yǔ)言支持多種主流操作系統(tǒng)和硬件架構(gòu),可以編譯生成可執(zhí)行文件,無(wú)需依賴(lài)其他庫(kù)或運(yùn)行環(huán)境,便于在不同平臺(tái)上部署和運(yùn)行。

  • 垃圾回收:Go語(yǔ)言通過(guò)垃圾回收機(jī)制自動(dòng)管理內(nèi)存,避免了常見(jiàn)的內(nèi)存錯(cuò)誤,如內(nèi)存泄漏和野指針,提高了程序的安全性和穩(wěn)定性。

  • 靜態(tài)鏈接:Go語(yǔ)言是一種靜態(tài)類(lèi)型語(yǔ)言,編譯器會(huì)在編譯階段進(jìn)行類(lèi)型檢查,可以提早發(fā)現(xiàn)潛在的類(lèi)型錯(cuò)誤,減少運(yùn)行時(shí)的錯(cuò)誤。

  • 快速編譯:Go語(yǔ)言具有快速的編譯速度,這是由于Go編譯器的設(shè)計(jì)和優(yōu)化帶來(lái)的。

Go語(yǔ)言的基礎(chǔ)語(yǔ)法

HelloWorld

package main  //表示一個(gè)可獨(dú)立執(zhí)行的程序,每個(gè)Go應(yīng)用程序都包含一個(gè)名為main的包,一定包含一個(gè)main包
import (
    "fmt"
)
func main() {  
    fmt.Println("hello world")  
}

package main表示一個(gè)可獨(dú)立執(zhí)行的程序,每個(gè)Go應(yīng)用程序都包含一個(gè)名為main的包,一定包含一個(gè)main

import關(guān)鍵字用于導(dǎo)入其他包(packages)的代碼。導(dǎo)入語(yǔ)句通常放置在Go源文件的開(kāi)頭。需要導(dǎo)入多個(gè)包,將它們放在圓括號(hào)中并用換行符分隔。

fmt是Go語(yǔ)言標(biāo)準(zhǔn)庫(kù)中的一個(gè)包,提供了格式化輸入輸出的功能。它包含了一系列的函數(shù),可以用來(lái)打印文本、格式化字符串、讀取輸入等。

常用的fmt函數(shù)和方法如下:

  • fmt.Print:打印輸出內(nèi)容,不會(huì)在文本末尾添加換行符。
  • fmt.Println:打印輸出內(nèi)容,并在文本末尾添加換行符。
  • fmt.Printf:格式化打印輸出內(nèi)容,可以使用占位符來(lái)指定輸出格式。
  • fmt.Sprint:將給定的參數(shù)格式化為字符串并返回該字符串,不會(huì)進(jìn)行打印輸出。
  • fmt.Sprintf:將給定的參數(shù)格式化為字符串并返回該字符串,可以使用占位符來(lái)指定輸出格式。
  • fmt.Scan:從標(biāo)準(zhǔn)輸入中讀取一個(gè)值并使用指定的格式將其存儲(chǔ)到傳入的變量中。
  • fmt.Scanln:從標(biāo)準(zhǔn)輸入中讀取一行文本,并嘗試將其解析為參數(shù)列表中變量的值。

變量

var + 變量名 + 變量類(lèi)型 (在Go語(yǔ)言中變量類(lèi)型在變量名后面)

使用步驟 :

1. 變量的聲明

2. 變量的賦值

3. 變量的使用

package main  
import (  
"fmt"  
)  
func main() {  
// 變量的聲明  
var A int  
// 變量的賦值  
A = 18  
// 變量的使用  
fmt.Println("A = ", A)  
}
// var 可以自己判斷變量類(lèi)型
var B = 18
// 省略var 用:=
C := "Hello World"

每個(gè)類(lèi)型有默認(rèn)值,如果不對(duì)變量進(jìn)行賦值,變量的值為默認(rèn)值

數(shù)據(jù)類(lèi)型

在Go語(yǔ)言中,有幾種基本的數(shù)據(jù)類(lèi)型可以用來(lái)存儲(chǔ)不同種類(lèi)的數(shù)據(jù)。下面是常見(jiàn)的基本數(shù)據(jù)類(lèi)型:

  • 整數(shù)類(lèi)型(int):用于表示整數(shù)值,包括有符號(hào)和無(wú)符號(hào)的整數(shù)類(lèi)型。例如:intint8、int16int32、int64、uintuint8、uint16uint32、uint64等。
  • 浮點(diǎn)數(shù)類(lèi)型(float):用于表示小數(shù)值,有兩種精度的浮點(diǎn)數(shù)類(lèi)型:float32float64。
  • 布爾類(lèi)型(bool):用于表示邏輯值,只有兩個(gè)取值:truefalse。
  • 字符串類(lèi)型(string):用于表示文本,使用雙引號(hào)或反引號(hào)將文本括起來(lái)。例如:“Hello, Go!”。
  • 字符類(lèi)型:用于表示單個(gè)字符,使用單引號(hào)將字符括起來(lái)。例如:‘A’。
  • 指針類(lèi)型:用于存儲(chǔ)變量的內(nèi)存地址,指向變量所在的內(nèi)存空間。
  • 數(shù)組類(lèi)型:用于存儲(chǔ)固定長(zhǎng)度的相同類(lèi)型元素的集合。
  • 切片類(lèi)型:用于存儲(chǔ)可變長(zhǎng)度的相同類(lèi)型元素的序列。
  • 映射類(lèi)型:用于存儲(chǔ)鍵值對(duì)集合,類(lèi)似于字典。
  • 結(jié)構(gòu)體類(lèi)型:用于定義自定義的復(fù)合數(shù)據(jù)類(lèi)型,可以包含不同類(lèi)型的字段。

指針類(lèi)型

//聲明
var 指針變量名 *數(shù)據(jù)類(lèi)型
//賦值
指針變量名 = & 變量名
//通過(guò)指針改變變量值 
*指針變量名 = 新值

指針變量名是你給指針變量起的名字

數(shù)據(jù)類(lèi)型是指針?biāo)赶蜃兞康臄?shù)據(jù)類(lèi)型。指針變量名前面的*表示該變量是一個(gè)指針變量。

指針在Go語(yǔ)言中常用于以下情況:

  • 傳遞大的數(shù)據(jù)結(jié)構(gòu),避免復(fù)制整個(gè)數(shù)據(jù)結(jié)構(gòu)造成性能損失;
  • 通過(guò)指針修改實(shí)際參數(shù)的值;
  • 動(dòng)態(tài)分配內(nèi)存。

需要注意的是,在使用指針之前,需要先確保指針不為 nil(空指針),否則會(huì)引發(fā)運(yùn)行時(shí)錯(cuò)誤。

分支結(jié)構(gòu) (if語(yǔ)句 、switch語(yǔ)句)

  • 單分支 if
if 條件表達(dá)式 {
    邏輯代碼
}
  • 雙分支 if-else
if 條件表達(dá)式 {
    邏輯代碼
}
else{
    邏輯代碼
}
  • 多分支_if
if 條件表達(dá)式 {
    邏輯代碼
}
else if 條件表達(dá)式 {
    邏輯代碼
}
......
else{
    邏輯代碼
}
  • switch語(yǔ)句
switch 表達(dá)式 {
    case 值1,值2, ...:
        語(yǔ)句塊1 
    case 值1,值2, ...:
        語(yǔ)句塊2 
       ....
    default:
}

循環(huán)結(jié)構(gòu) for循環(huán)

  • 基本的for循環(huán):在循環(huán)開(kāi)始之前初始化一個(gè)計(jì)數(shù)器,然后在每次循環(huán)迭代之后更新計(jì)數(shù)器,直到計(jì)數(shù)器達(dá)到預(yù)定的值。
for 初始化; 條件; 更新 { 
    // 循環(huán)執(zhí)行的代碼塊
}

例如,下面的代碼會(huì)打印從0到4的整數(shù):

for i := 0; i < 5; i++ {
    fmt.Println(i)
}
  • 省略初始化和更新:如果不需要初始化和更新步驟,可以省略它們。
for 條件 {
    // 循環(huán)執(zhí)行的代碼塊
}

例如,下面的代碼會(huì)不斷地打印當(dāng)前的秒數(shù),直到到達(dá)10秒:

for time.Now().Second() < 10 {
    fmt.Println(time.Now().Second())
}
  • 無(wú)限循環(huán):如果條件部分被省略,則會(huì)無(wú)限循環(huán)執(zhí)行代碼塊,除非使用 break 或 return 語(yǔ)句終止循環(huán)。
for {
    // 循環(huán)執(zhí)行的代碼塊
}

for range

在Go語(yǔ)言中,for range 是一種特殊的 for 循環(huán)形式,用于遍歷數(shù)組、切片、字符串、映射和通道等數(shù)據(jù)結(jié)構(gòu)。

for range 的語(yǔ)法如下:

for 索引, 值 := range 表達(dá)式 {
    // 循環(huán)執(zhí)行的代碼塊
}

其中,

  • 索引 是當(dāng)前元素的索引或鍵,
  •  是當(dāng)前元素的值,
  • 表達(dá)式 是要迭代的數(shù)據(jù)結(jié)構(gòu)。

使用 for range 循環(huán)可以方便地獲取每個(gè)元素的索引和值,適用于遍歷整個(gè)數(shù)據(jù)結(jié)構(gòu)。在每次迭代中,索引 和  會(huì)被重新賦值為下一個(gè)元素的索引和值,直到遍歷完整個(gè)數(shù)據(jù)結(jié)構(gòu)。

以下是一些示例:

  • 遍歷數(shù)組或切片:

numbers := []int{1, 2, 3, 4, 5}
for index, value := range numbers {
    fmt.Println(index, value)
}
  • 這個(gè)示例會(huì)輸出數(shù)組/切片中每個(gè)元素的索引和值。

  • 遍歷字符串:

text := "Hello, Go!"
for index, value := range text {
    fmt.Println(index, value)
}
  • 這個(gè)示例會(huì)輸出字符串中每個(gè)字符的索引和對(duì)應(yīng)的Unicode碼點(diǎn)值。

  • 遍歷映射:

person := map[string]interface{}{
    "name":   "Alice",
    "age":    25,
    "gender": "female",
}
for key, value := range person {
    fmt.Println(key, value)
}
  • 這個(gè)示例會(huì)輸出映射中每個(gè)鍵值對(duì)的鍵和值。

  • 遍歷通道:

data := make(chan int)
go func() {
    data <- 1
    data <- 2
    close(data)
}()
for value := range data {
    fmt.Println(value)
}
  • 這個(gè)示例會(huì)從通道中依次接收值,并打印出來(lái)。

需要注意的是,對(duì)于字符串和映射,索引 實(shí)際上是每個(gè)元素的鍵或鍵的字節(jié)索引。

for range 循環(huán)使用得非常廣泛,特別是在需要迭代遍歷數(shù)據(jù)結(jié)構(gòu)的情況下。

函數(shù)

提高代碼的復(fù)用性和維護(hù)性,減少代碼冗余

//函數(shù)的聲明
 func 函數(shù)名 (形參列表)(返回值類(lèi)型列表){
    執(zhí)行語(yǔ)句
    return + 返回值列表 
}
//函數(shù)的調(diào)用
函數(shù)名 + (形參1,形參2,...)

注意

函數(shù)名 首字母大寫(xiě),可以在本包文件和其它包文件訪(fǎng)問(wèn)(類(lèi)似public)

函數(shù)名 首字母小寫(xiě),只能被本包文件訪(fǎng)問(wèn)(類(lèi)似private)

Go語(yǔ)言函數(shù)可以有多個(gè)返回值

Go語(yǔ)言函數(shù)是一種數(shù)據(jù)類(lèi)型賦值給變量,也可以當(dāng)成其它函數(shù)是形參和返回

Go語(yǔ)言中函數(shù)不支持重載,但支持可變參數(shù)

package main
// 定義一個(gè)函數(shù),函數(shù)參數(shù)為: 可變參數(shù)名 + ... + 參數(shù)類(lèi)型 
func test (num...int){
    //函數(shù)內(nèi)部將可變參數(shù)當(dāng)作切片處理
}
func main(){
    test()
    test(1)
    test(2,28,30)
    test(2,...,100)
}

以上就是Go語(yǔ)言入門(mén)之基礎(chǔ)語(yǔ)法和常用特性解析的詳細(xì)內(nèi)容,更多關(guān)于Go語(yǔ)法和特性的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Go利用反射reflect實(shí)現(xiàn)獲取接口變量信息

    Go利用反射reflect實(shí)現(xiàn)獲取接口變量信息

    反射是通過(guò)實(shí)體對(duì)象獲取反射對(duì)象(Value、Type),然后可以操作相應(yīng)的方法。本文將利用Go語(yǔ)言中的反射reflect實(shí)現(xiàn)獲取接口變量信息,需要的可以參考一下
    2022-05-05
  • 淺析Golang中float64的精度問(wèn)題

    淺析Golang中float64的精度問(wèn)題

    這篇文章主要來(lái)和大家一起探討一下Golang中關(guān)于float64的精度問(wèn)題,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以了解下
    2023-08-08
  • Go語(yǔ)言的反射機(jī)制詳解

    Go語(yǔ)言的反射機(jī)制詳解

    本文詳細(xì)講解了Go語(yǔ)言的反射機(jī)制,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • Golang巧用defer進(jìn)行錯(cuò)誤處理的方法

    Golang巧用defer進(jìn)行錯(cuò)誤處理的方法

    錯(cuò)誤處理是程序的重要組成部分,有效且優(yōu)雅的處理錯(cuò)誤是大多數(shù)程序員的追求,下面這篇文章主要給大家介紹了關(guān)于Golang中巧用defer進(jìn)行錯(cuò)誤處理的方法,文中通過(guò)示例介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-05-05
  • golang操作Redis的實(shí)現(xiàn)示例

    golang操作Redis的實(shí)現(xiàn)示例

    本文主要介紹了golang操作Redis的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-04-04
  • go mutex互斥鎖使用Lock和Unlock方法占有釋放資源

    go mutex互斥鎖使用Lock和Unlock方法占有釋放資源

    Go號(hào)稱(chēng)是為了高并發(fā)而生的,在高并發(fā)場(chǎng)景下,勢(shì)必會(huì)涉及到對(duì)公共資源的競(jìng)爭(zhēng),當(dāng)對(duì)應(yīng)場(chǎng)景發(fā)生時(shí),我們經(jīng)常會(huì)使用 mutex 的 Lock() 和 Unlock() 方法來(lái)占有或釋放資源,雖然調(diào)用簡(jiǎn)單,但 mutex 的內(nèi)部卻涉及挺多的,本文來(lái)好好研究一下
    2023-09-09
  • golang如何通過(guò)type定義函數(shù)類(lèi)型

    golang如何通過(guò)type定義函數(shù)類(lèi)型

    這篇文章主要介紹了golang如何通過(guò)type定義函數(shù)類(lèi)型問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • 使用Go module和GoLand初始化一個(gè)Go項(xiàng)目的方法

    使用Go module和GoLand初始化一個(gè)Go項(xiàng)目的方法

    這篇文章主要介紹了使用Go module和GoLand初始化一個(gè)Go項(xiàng)目,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-12-12
  • golang grpc 負(fù)載均衡的方法

    golang grpc 負(fù)載均衡的方法

    這篇文章主要介紹了golang grpc 負(fù)載均衡的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • Go gRPC環(huán)境安裝教程示例詳解

    Go gRPC環(huán)境安裝教程示例詳解

    這篇文章主要為大家介紹了Go gRPC環(huán)境安裝的教程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06

最新評(píng)論

满城县| 宝兴县| 长葛市| 雷州市| 社会| 壶关县| 晋宁县| 常山县| 奉新县| 龙里县| 云林县| 米易县| 梁河县| 册亨县| 崇州市| 西乌珠穆沁旗| 津市市| 平远县| 宁明县| 浙江省| 贡嘎县| 龙岩市| 读书| 怀来县| 贵州省| 遂昌县| 钦州市| 瑞安市| 耿马| 延边| 东安县| 共和县| 塔城市| 洪江市| 汝州市| 安图县| 如皋市| 衢州市| 安平县| 巴塘县| 陆良县|