91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Golang中的基礎語法有哪些

發布時間:2023-03-07 10:10:47 來源:億速云 閱讀:98 作者:iii 欄目:開發技術

這篇“Golang中的基礎語法有哪些”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Golang中的基礎語法有哪些”文章吧。

導包

示例:工程結構如下

Golang中的基礎語法有哪些

GOPATH 設置為工程根目錄(E:\GO_PROJECT)

test1.go

package package_test

import "fmt"

/*
定義函數
*/
func Func1() {
    fmt.Println("test1 func1")
}

test2.go

package package_test

import "fmt"

func Func2() {
    fmt.Println("test2 func2")
}

testmain.go

package main

import "dir1/dir2"  // 導入的是【目錄名】

func main() {
    package_test.Func1()  // 調用的是【包名】
}

運行:

// 方式一
go bulid testmain.go  // 編譯(生成可執行文件)
./ testmain  // 運行(可執行文件)

//方式二
go run testmain.go  // 編譯+運行

導包結論:

一個 GO 程序中一定要有 main 包和 main 函數,這是 GO 程序執行的入口。

編譯器會根據指定的相對路徑去搜索包然后導入,這個相對路徑是從 GOROOT 或 GOPATH(workspace)下的 src 下開始搜索:

  • GOROOT

  • 項目 GOPATH

  • 全局 GOPATH

GOlang 和 Java 的區別是,在 GO 中 import 的是目錄,而不是包名;并且 GO 沒有強制要求包名和目錄名需要一致,即包和目錄是兩個不同的概念。

import 導入的是源文件所在的目錄名,而不是定義的包名。

在代碼中引用包內的成員時,使用定義的包名而不是目錄名。

在習慣上將包名和目錄名保證一致,但這并不是強制規定。

在同一級目錄中,所有源文件只能使用相同的包名。

同一包名下的變量名、函數名等不能重復。

多個目錄下的相同包名,彼此無關。

包中的成員(如函數)以名稱?字母??寫,決定其訪問權限:

  • ?字母?寫,可被包外訪問(即public

  • ?字母?寫,僅包內成員可以訪問(即private

工程管理

為了更好的管理項目中的文件,GO 要求將文件都要放在相應的目錄中,具體規定了以下目錄:

  • src 目錄:以代碼包的形式組織并保存 GO 源碼文件(比如 .go 文件、.c 文件、.h 文件、.s 文件等)

  • pkg 目錄:用于存放經由 go install 命令構建安裝后的代碼包(包含 GO 庫源碼文件)的 ".a" 歸檔文件。

  • bin 目錄:與 pkg 目錄類似,在通過 go install 命令完成安裝后,保存由 GO 命令源碼文件生成的可執行文件。

以上目錄稱為工作區(Workspace),工作區其實就是一個對應于特定工程的目錄。

src 目錄用于包含所有的源代碼,是 GO 命令行工具一個強制的規則;而 pkg 和 bin 則無需手動創建,GO 命令行工具在構建過程中會自動創建這些目錄。

變量

變量聲明

  • 變量名必須以字母或下劃線開頭,后面可以跟任意數量的字母、數字或下劃線。

  • 變量的三種聲明&初始化方式如下:

// 方式一:先聲明(有默認值),后賦值
var a int
a = 10
var b, c string
b = "b"
c = "c"

// 方式二:聲明+賦值
var a int = 10

// 方式三:自動推導類型(注意:這種方式只能在函數內使用)
a := 10
b, c := 11, 12
b, c = c, b  // 值交換

// 匿名變量
_, i, _, j = 1, 2, 3, 4

格式化輸出

格式含義
%%一個 % 字面量
%b一個二進制整數值(基數為 2),或者是一個(高級的)用科學計數法表示的指數為 2 的浮點數
%c字符型。可以把輸入的數字按照 ASCII 碼相應轉換為對應的字符
%d一個十進制數值(基數為 10)
%f以標準記數法表示的浮點數或者復數值
%o一個以八進制表示的數字(基數為8)
%p以十六進制(基數為 16)表示的一個值的地址,前綴為 0x,字母使用小寫的 a-f 表示
%q使用 GO 語法以及必須時使用轉義,以雙引號括起來的字符串或者字節切片 []byte,或者是以單引號括起來的數字
%s字符串。輸出字符串中的字符直至字符串中的空字符(字符串以 '\0' 結尾,這個 '\0' 即空字符)
%t以 true 或者 false 輸出的布爾值
%T使用 GO 語法輸出的值的類型
%x以十六進制表示的整型值(基數為十六),數字 a-f 使用小寫表示
%X以十六進制表示的整型值(基數為十六),數字 A-F 使用小寫表示

基本數據類型

類型名稱長度零值(默認值)說明
bool布爾類型1false其值不為真即為假,不可以用數字代表 true 或 false
byte字節型10uint8 的別名
int, uint整型-0有符號 32 位或無符號 64 位
int8整型10-128 ~ 127
uint8整型100 ~ 255
int16整型20-32768 ~ 32767
uint16整型200 ~ 65535
int32整型40-2147483648 到 2147483647
rune整型40int32 的別名
uint32整型400 到 4294967295(42 億)
int64整型80-9223372036854775808到 92233720368547758070
uint64整型80到 18446744073709551615(1844 京)
float32浮點型40.0小數位精確到 7 位
float64浮點型80.0小數位精確到 15 位
string字符串-""utf-8 字符串

值的字面量(literal)是指代碼中值的文字表示。一個值可能存在多種字面量表示。

表示基本類型值的文本稱為基本字面量。基本字面量也被稱為字面量常量或未命名常量。

示例:

func main() {
    var ch byte = 97  // 聲明字符類型
    fmt.Printf("ch=%c", ch)  //  輸出 a
}

這里定義了 ch 是一個字符類型,賦值卻是一個整數 97,打印的結果是小寫字符 'a'。

原因是:計算機不能直接存儲字符類型,只能轉成數字存儲,那為什么小寫字符 'a' 對應的整數是 97 呢?因為計算機是根據 ASCII 碼來存儲的。

Golang中的基礎語法有哪些

強制類型轉換

package main

import "fmt"

func main() {

    chinese := 97
    math := 99
    english := 96

    fmt.Printf("總分是 %d,平均分(整數)是 %d, 平均分(浮點數)是 %f", chinese+math+english, (chinese+math+english)/3, float32(chinese+math+english)/3)
    // 總分是 292,平均分(整數)是 97, 平均分(浮點數)是 97.333336
}

注意:

GO 語言中不允許隱式轉換,所有類型轉換必須顯式聲明(強制轉換),而且轉換只能發生在兩種相互兼容的類型之間

    var ch byte = 'c'
    // var a int = ch  // cannot use ch (type byte) as type int in assignment
    var b int = int(ch)  // 數據類型名(待轉換的值)
  • int 轉 float 強制轉換:多小數

  • float 轉 int 強制轉換:丟精度

接收鍵盤輸入

package main

import fmt

func main() {
    var age int
    fmt.Println("請輸入年齡:")
    fmt.Scanf("%d", &age)  // 將接收的值賦給age變量
    fmt.Printf("age=%d", age)
}

常量

常量聲明

func main() {
    // 變量:程序運行期間,值可以改變,聲明使用var
    // 常量:程序運行期間,值不可以改變,聲明使用const
    const a int = 11
    // a = 12  // error:常量不可以修改
    
    const b = 12 // 自動推導類型(常量不可以使用:=)
}

iota 枚舉

iota 常量生成器:用于生成一組遞增的整型常量,減去了每行都要寫一遍初始化表達式的繁瑣。

func main() {

    // 在一個 const 聲明語句中,在第一個聲明的常量所在的行,iota 將會被置為 0,然后在每一個有常量聲明的行遞增 1
    const (
        a = iota  // 0
        b = iota  // 1
        c = iota  // 2
    )

    const d = iota // iota 遇到const,會被置為 0

    // 可以只寫一個iota
    const (
        e = iota  // 0
        f // 1
        g
    )

    // 同一行值一樣
    const (
        h = iota  // 0
        i, j, k = iota, iota, iota  // 1
        l = iota  // 2
    )

}

運算符

算術運算符

運算符術語
+加(既可以完成兩個數字相加,又可以連接兩個字符串)
-
*
/
%取模(取余)
++后自增(GO 語言中沒有前自增)
--后自減(GO 語言中沒有前自減)

賦值運算符

運算符說明示例
=普通賦值c = a + b 將 a + b 表達式結果賦值給 c
+=相加后再賦值c += a 等價于 c = c + a
-=相減后再賦值c -= a 等價于 c = c - a
*=相乘后再賦值c *= a 等價于 c = c * a
/=相除后再賦值c /= a 等價于 c = c / a
%=求余后再賦值c %= a 等價于 c = c % a

關系運算符

運算符術語示例結果
==相等于4 == 3false
!=不等于4 != 3true
<小于4 < 3false
>大于4 > 3true
<=小于等于4 <= 3false
>=大于等于4 >= 1true

邏輯運算符

運算符術語示例結果
!!a如果 a 為假,則 !a 為真
如果 a 為真,則 !a 為假
&&a && b如果 a 和 b 都為真,則結果為真,否則為假
||a || b如果 a 和 b 有一個為真,則結果為真,二者都為假時,結果為假

條件語句

if 語句

package main

import "fmt"

func main() {

    var score int
    fmt.Println("請輸入成績:")
    fmt.Scanf("%d", &score)

    // if 語句支持一個初始化語句+判斷條件
    if good_score := 90; score >= good_score {
        fmt.Println("優秀")
    } else if soso_score := 60; score >= soso_score {
        fmt.Println("及格")
    } else {
        fmt.Println("需要努力")
    }
}

switch 語句

注意:case 后面默認自帶 break,如果想執行完成某個 case 后繼續執行后面的 case,可以使用 fallthrough 關鍵字。

func main() {

    bonus := 5000
    var score string
    finish := true
    fmt.Println("請輸入年終評級:")
    switch fmt.Scanf("%s", &score); score {
    case "A":
        bonus += 1000
    case "B":
        bonus += 5000
    case "C":
    case "D":
        bonus -= 1000
    default:
        finish = false
        fmt.Println("輸入有誤,請輸入正確的評級")
    }
    if finish {
        fmt.Printf("您的年終獎為:%d", bonus)
    }

}

循環語句

GO 中的 3 種循環方式:

package main

import "fmt"

func main() {

    // 第1種方式
    for i := 0; i < 5; i++ {
        fmt.Printf("i=%d\n", i)
    }

    // 第2種方式:類似while循環
    num := 1
    for num < 5 {
        fmt.Printf("num=%d\n", num)
        num++
    }

    // 第3種方式
    for {
        fmt.Println("死循環")
    }
}

函數

函數定義

函數就是將一堆代碼進行封裝,以便重用的一種機制。

func 函數名(){
    函數體
}

參數列表

import "fmt"

func MyFunc(a int, b int, args ...int) {  // 注意:不定長參數必須放在參數列表最后
    fmt.Println("定長參數為:", a, b)
    for i, data := range args {  // 若不需要編號,則可使用 for _, data := range args
        fmt.Println("編號為:", i)
        fmt.Println("數據為:", data)
    }
}

func main() {
    MyFunc(1, 2, 3, 4, 5)
}

打印結果:

定長參數為: 1 2
編號為: 0
數據為: 3
編號為: 1
數據為: 4
編號為: 2
數據為: 5

函數返回值

// 定義返回值類型
func Add(a int, b int) int {
    return a + b
}

// 給返回值命名
func Sub(a int, b int) (sub int) {
    sub = a - b
    return sub  // 也可以只寫 return
}

// 返回多個值
func Sub(a, b, c int) {
    a, b, c = 1, 2, 3
    return a, b, c  // 也可以只寫 return
}

函數類型

在 GO 語言中還有另外一種定義使用函數的方式,就是函數類型。

所謂的函數類型,就是將函數作為一種類型可以用來定義變量,基本使用如下:

func Test(a, b int) int {
    return a + b
}

// 定義函數類型:即需要傳遞兩個整型參數,有一個整型返回值的函數類型
type FuncType func(a int, b int) int  // type關鍵字后面跟著類型的名字(FunType)

func main() {
    var result FuncType  // 類型是FuncType類型,即函數類型
    result = Test
    s := result(1, 2)
    fmt.Printf("s=%d", s)
}

匿名函數

所謂匿名函數就是沒有名字的函數。匿名函數最主要的功能就是實現了閉包。

package main

import "fmt"

func main() {
    num := 9

    // 使用方式一:定義匿名函數并賦值給變量
    f1 := func() {
        // 在匿名函數中可以直接訪問main()中定義的局部變量
        // 并且在匿名函數中對變量的值進行了修改,最終會影響到整個main()函數中定義的變量值
        num++
        fmt.Println("匿名函數:", num)
    }
    f1()                        // 10
    fmt.Println("main函數:", num) // 10

    // 使用方式二:通過函數類型
    type FuncType func() // 沒有參數,沒有返回值
    var f2 FuncType = f1
    f2()

    // 使用方式三:直接調用
    func(a, b int) {
        fmt.Println("a + b =", a+b)
    }(3, 6)

    // 有參有返回值的匿名函數
    min, max := func(a, b int) (min, max int) {
        if a > b {
            return b, a
        } else {
            return a, b
        }
    }(12, 13)
    fmt.Printf("min=%d, max=%d\n", min, max)
}

遞歸函數

示例:階乘

func Test(num int) int {
    if num == 1 {
        return 1
    }
    return num * Test(num-1)
}

func main() {
    var num int
    fmt.Println("請輸入需要階乘的數:")
    fmt.Scanf("%d", &num)
    fmt.Printf("%d的階乘結果為:%d", num, Test(num))
}

以上就是關于“Golang中的基礎語法有哪些”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

桃江县| 肇东市| 关岭| 习水县| 岢岚县| 通渭县| 丰宁| 贵州省| 湖南省| 绍兴县| 汤原县| 札达县| 玛沁县| 曲阜市| 绥化市| 香格里拉县| 阳高县| 胶南市| 吉木萨尔县| 岑溪市| 洛川县| 襄汾县| 高密市| 咸丰县| 宝山区| 萝北县| 黄陵县| 千阳县| 陆良县| 新蔡县| 莱西市| 桦川县| 普兰县| 宜宾县| 泸溪县| 洞头县| 南郑县| 西华县| 陕西省| 额济纳旗| 博客|