Golang 通關初級(1)

2021-07-26 23:04:55 字數 4177 閱讀 3286

錄(?)

[-]

原文hello 世界包匯入

匯出名函式

多值返回

命名返回值

變數變數的初始化

短變數宣告

基本型別

零值型別轉換

型別推導

常量數值常量

forif

switch

defer

package main

import

"fmt"

func main()

輸出:

hello, 世界
每個 go 程式都是由包構成的。

程式從 main 包開始執行。

本程式通過匯入路徑 「fmt」 和 「math/rand」 來使用這兩個包。

按照約定,包名與匯入路徑的最後乙個元素一致。例如,"math/rand"包中的原始碼均以 package rand 語句開始。

package main

import

( "fmt"

"math/rand"

)func

main

()

輸出:is1

此**用圓括號組合了匯入,這是「分組」形式的匯入語句。

當然你也可以編寫多個匯入語句,例如:

import

"fmt"

import

"math"

不過使用分組匯入語句是更好的形式。

package main

import

( "fmt"

"math"

)func

main

()

輸出:

***x 5  

===

在 go 中,如果乙個名字以大寫字母開頭,那麼它就是已匯出的。 例如, pizza 就是個已匯出名, pi 也同樣,它匯出自 math 包。

pizza 和 pi 並未以大寫字母開頭,所以它們是未匯出的。

在匯入乙個包時,你只能引用其中已匯出的名字。任何「未匯出」的名字在該包外均無法訪問。

執行**,觀察錯誤輸出。

然後將 math.pi 改名為 math.pi 再試著執行一次。

package main

import

( "fmt"

"math"

)func

main

()

輸出:

3.141592653589793
函式可以沒有引數或接受多個引數。

在本例中, add 接受兩個 int 型別的引數。

注意型別在變數名 之後 。

package main

import

"fmt"

func add(x int, y int) int

func main()

輸出:

55
當連續兩個或多個函式的已命名形參型別相同時,除最後乙個型別以外,其它都可以省略。

在本例中,

x int, y int
被縮寫為

x, y int
package main

import (

"fmt"

)func main()

func add(a, b int) int

輸出:

20
函式可以返回任意數量的返回值。

swap 函式返回了兩個字串。

package main

import

"fmt"

func swap(x, y string) (string, string)

func main()

輸出:

world hello
go 的返回值可被命名,它們會被視作定義在函式頂部的變數。

返回值的名稱應當具有一定的意義,它可以作為文件使用。

沒有引數的 return 語句返回已命名的返回值。也就是直接返回。

直接返回語句應當僅用在下面這樣的短函式中。在長的函式中它們會影響**的可讀性。

package main

import(

"fmt"

)func main()

func show(a, b int) (x, y int)

輸出:

36 8
var 語句用於宣告乙個變數列表,跟函式的引數列表一樣,型別在最後。

就像在這個例子中看到的一樣, var 語句可以出現在包或函式級別。

package main

import (

"fmt"

)var a, b int

func main()

輸出:

0

0false

變數宣告可以包含初始值,每個變數對應乙個。

如果初始化值已存在,則可以省略型別;變數會從初始值中獲得型別。

package main

import (

"fmt"

)var a int =100

func main()

輸出:

100

1false

true

3.9

在函式中,簡潔賦值語句 := 可在型別明確的地方代替 var 宣告。

函式外的每個語句都必須以關鍵字開始( var 、 func 等等), 因此 := 結構不能在函式外使用。

package main

import (

"fmt"

)func main()

輸出:

10

2212

false

33.22

go 的基本型別有:

bool

string

intint8

int16

int32

int64

uint

uint8

uint16

uint32

uint64

uintptr

byte

// uint8 的別名

rune

// int32 的別名

// 表示乙個 unicode 碼點

float32

float64

complex64

complex128

本例展示了幾種型別的變數。 同匯入語句一樣,變數宣告也可以「分組」成乙個語法塊。

int 、 uint 和 uintptr 在 32 位系統上通常為 32 位寬,在 64 位系統上則為 64 位寬。 當你需要乙個整數值時應使用 int 型別,除非你有特殊的理由使用固定大小或無符號的整數型別。

package main

import (

"fmt"

"math/cmplx"

)var (

tobe bool = false

maxint uint64 =1

<<64 -1

z complex128 = cmplx.sqrt(-5 +12i)

)func main()

輸出:

bool(false)

uint64

(18446744073709551615)

complex128((2

+3i))

沒有明確初始值的變數宣告會被賦予它們的 零值 。

Golang 通關初級(2)

目錄 go 具有指標。指標儲存了變數的記憶體位址。型別 t 是指向 t 型別值的指標。其零值為 nil var p int 操作符會生成乙個指向其運算元的指標。i 42 p ifmt.println p 通過指標 p 讀取 i p 21 通過指標 p 設定 i這也就是通常所說的 間接引用 或 重定向...

Sqli LABS通關筆錄 1

在第乙個關卡當中還是學到些知識。1.注釋語句多試試其他的幾個 2.不報錯可能是前面的語句沒有錯誤,union沒有得到執行。加單引號報錯了。從上面的錯誤提示當中,我們可以看到提交到sql中的1 在經過sql語句構造後形成 1 limit 0,1,多加了乙個 接下來想如何將多餘的 去掉 可以借鑑一下原始...

六級通關筆記 詞彙1

詞彙構成 字首 肯否 方向 數量 情感 狀態等 詞根 詞義 字尾 詞性 字首 1 時間 空間 pre 時間提前,預先 prewar 戰前的 predict 預言 precondition 前提條件 conditional 有條件的 premise 前提條件 promise 承諾 promising ...