banner
Pi3

Pi3

记录学习、生活和成长
github
telegram
x
zhihu
email

Go語言入門2:基礎語法

Go 語言入門基礎學習筆記之 Go 語言的基礎語法數據類型

image.png

基礎語法#

Go 標記#

Go 程序可以由多個標記組成,可以是關鍵字,標識符,常量,字符串,符號

行分隔符#

在 Go 程序中,一行代表一個語句結束。每個語句不需要像 C 家族中的其它語言一樣以分號 ; 結尾,因為這些工作都將由 Go 編譯器自動完成。

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

注釋#

// 單行注釋
/*
    多行注釋 / 塊注釋
*/

與 C 語言一致。

標識符#

標識符用來命名變量、類型等程序實體。一個標識符實際上就是一個或是多個字母 (A~Z 和 a~z) 數字 (0~9)、下劃線_組成的序列,但是第一個字符必須是字母或下劃線而不能是數字。

這與大多數編程語言的規範一樣

比如,maheshkumarabcmove_namea_123myname50_tempja23b9retVal 都是有效標識符。1ab 以數字開頭、case 關鍵字、a+b 其他字符等都是無效字符。

字符串拼接#

Go 語言的字符串連接可以通過 +  實現。

fmt.Println("Google" + "Runoob")

關鍵字#

Go 語言一共有 25 個關鍵字。

breakdefaultfuncinterfaceselect
casedefergomapstruct
chanelsegotopackageswitch
constfallthroughifrangetype
continueforimportreturnvar

除此之外,Go 語言還有 36 個預定義標識符

appendboolbytecapclosecomplex
copyfalsefloat 32float 64imagint
int 32int 64iotalenmakenew
printprintlnrealrecoverstringtrue
complex 64complex 128uint 16int 16uint 32uintptr
panicuint 8uint 64int 8uintnil

Go 語言中的空格#

在 Go 語言中,空格通常用於分隔標識符、關鍵字、運算符和表達式,以提高代碼的可讀性。

變量的聲明必須使用空格隔開

var x int
const Pi float64 = 3.14159265358979323846

變量運算符之間推薦加入空格,程序看起來更加美觀

var z int = x + y

關鍵字表達式之間必須使用空格隔開

if x > 0 {
    // do something
}

在函數調用時,函數名左邊等號之間要使用空格,參數之間也要使用空格

result := add(2, 3)

格式化字符串#

Go 語言中使用 fmt.Sprintf 或 fmt.Printf 格式化字符串並賦值給新串:

  • Sprintf 根據格式化參數生成格式化的字符串並返回該字符串
  • Printf 根據格式化參數生成格式化的字符串並寫入標準輸出
package main

import (
    "fmt"
)

func main() {
   // %d 表示整型數字,%s 表示字符串
    var stockcode=123
    var enddate="2024-10-25"
    var url="Code=%d&endDate=%s"
    var target_url=fmt.Sprintf(url,stockcode,enddate)
    fmt.Println(target_url)
    fmt.Printf(url,stockcode,enddate)
}

// 輸出結果
Code=123&endDate=2024-10-25
Code=123&endDate=2024-10-25

補充:fmt 包中各種輸出方法的區別

  • fmt.Print 原樣輸出
  • fmt.Printf 格式化輸出
  • fmt.Println 各個值之間加空格,末尾加換行

Go 語言中還有一些內建函數,如 println()print(),不屬於任何包,直接可以使用。只能簡單地輸出參數,不支持格式化,通常只用於簡單的調試目的。

println()print() 與 fmt 中的 fmt.Printlnfmt.Print 區別一樣。

fmt.Print("go","python","php","javascript") // gopythonphpjavascript
fmt.Println("go","python","php","javascript") // go python php javascript
fmt.Printf("go %d", 1) // go 1
println("Hello Go!") // Hello Go!

數據類型#

數據類型的出現是為了把數據分成所需內存大小不同的數據,編程的時候需要用大數據的時候才需要申請大內存,就可以充分利用內存。

Go 語言按類別分為以下幾種數據類型:

  1. 布爾類型:值只可以是常量 true 或者 false
  2. 數字類型:Go 語言支持整型和浮點型數字,並支持複數,其中位運算採用補碼
  3. 字符串型:Go 語言字符串是由單個字節連接起來的,字符串的字節使用 UTF-8 或 Unicode 編碼
  4. 派生類型
    1. 指針 Pointer
    2. 陣列
    3. 結構化
    4. 通道 Channel
    5. 函數 Function
    6. 切片 Slice
    7. 接口
    8. 集合 Map

引用類型: 切片 Slice指針集合 Map通道 Channel函數

數字類型

整型:Go 也有基於架構的類型,例如:int、uint 和 uintptr

類型描述
uint 8無符號 8 位整型 (0 到 255)
uint 16無符號 16 位整型 (0 到 $2^{16}-1$)
uint 32無符號 32 位整型 (0 到 $2^{32}-1$)
uint 64無符號 64 位整型 (0 到 $2^{64}-1$)
int 8有符號 8 位整型 (-128 到 127)
int 16有符號 16 位整型 ($-2^{15}$ 到 $-2^{15}-1$)
int 32有符號 32 位整型 ($-2^{31}$ 到 $2^{31}-1$)
int 64有符號 64 位整型 ($-2^{63}$ 到 $2^{63}-1$)

在 Go 中 int 是一個不定長的類型,取決於當前計算機的機器字長。如果當前計算機為 64 位,則 int 類型也是 64 位,雖然你這與 int64 的長度是一樣的,但是他們依舊是不同的兩種數據類型。

浮點型

類型描述
float 32IEEE-754 32 位浮點數
float 64IEEE-754 64 位浮點數
complex 6432 位實數和虛數
complex 12864 位實數和虛數

其他數字類型

類型描述
byte類似 uint 8
rune類似 int 32
uint32 或 64 位
int與 uint 一樣大小
uintptr無符號整型,用於存放一個指針

Go 語言可以通過格式化字符串 %T 打印出數據類型

fmt.Printf("type: %T\n", a)

浮點精度問題

浮點數計算輸出有一定的偏差,你也可以轉整型來設置精度。

package main
import (
    "fmt"
)
func main() {
    a := 1.69
    b := 1.7
    c := a * b      // 結果應該是2.873
    fmt.Println(c)  // 輸出的是2.8729999999999998
}

設置精度

package main
import (
    "fmt"
)
func main() {
    a := 1690           // 表示1.69
    b := 1700           // 表示1.70
    c := a * b          // 結果應該是2873000表示 2.873
    fmt.Println(c)      // 內部編碼
    fmt.Println(float64(c) / 1000000) // 顯示
}
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。