go控制流和一些特殊語句

2021-07-25 04:53:36 字數 3345 閱讀 3178

send、receive操作是針對channel的

send : ch <- a

receive: a := <- ch

在go中++--是乙個賦值語句,而不是乙個表示式因此不能像c/c++那樣編寫如下**:

a = b++

同時在go中只有後置,沒有前置寫法。

a++

a--

ifif是程式語言中最簡單的條件分支判斷語句,幾乎所有語言都有,所以就不介紹功能,主要介紹下寫法

if語句中的條件表示式不需要加上括號

if a >0  else
if的語句中可以在判斷語句中宣告變數,這個變數只在if語句作用域內部有效

if a := calc(); a <0
switch語句中首先執行switch後面的表示式,然後執行case後面的表示式,並且是從上到下,從左到右執行,一旦有乙個滿足,則不再繼續執行後面的操作。

switch後面不跟表示式則預設為true

case後面可以跟很多個表示式,其中乙個滿足則執行該case下的語句

預設情況下case下的語句執行之後會跳出switch,如果需要繼續執行,使用fallthrough關鍵字,即使是default也可以fallthrough

if一樣可以在switch表示式中宣告變數

switch可以最多有乙個default,當沒有case條件滿足的情況下執行default

switch tag 

switch

switch x := f();

switch出了支援上述普通的表示式判斷以外,還支援型別switch,這種情況下不能使用fallthrough

type有可能是nil(當變數是乙個nil inte***ce的時候)

switch i := x.(type)
for語句有三種形式:

for
for a < b
for i :=0; i <10; i++
對於陣列、slice、string、map、channel可以是用for range的形式,具體情況如下:

for index, value := range a
b := "中文"

for index, unicode := range a

//輸出

//0 中

//3 文

for key, value := range amap
for k := range ch {}
go語句建立乙個goroutine並在該goroutine中執行函式,可以是乙個匿名函式

go log(i)

gofunc(i int) (1)

select語句主要用於對channel的選擇,可以是接收或者傳送,當操作成功的時候的時候選擇對應的case,如果有多個case成功,隨機選擇其中乙個執行。

var a int

var c, c1, c2, c3, c4 chan

intvar i1, i2 int

select else

case a[f()] = <-c4:

// same as:

// case t := <-c4

// a[f()] = t

default:

print("no communication\n")

}for

}select {} // block forever

return結束乙個函式,並且可以返回乙個或者多個返回值

func noresult() 

func tworesult() (int, bool)

func towresultwithvariabl() (a int, b bool)

break用於跳出最內層的for switch select語句,也可以通過使用label來跳出指定的label標記的for switch select

outer_loop:

for i :=0; i <10; i++

}}

continue用於直接開始最內層迴圈的下乙個迭代,也可以通過label來繼續label標記的for loop。

rowloop:

for y, row := range rows

row[x] = data + bias(x, y)

}}

和c/c++中的goto一樣,跳轉到指定的label處,goto不能跳過作用域中的變數宣告,也不能跳轉到不同的作用域中去

goto l

v :=3

l: dosomething() //錯誤,跳過了v的宣告

if n%2 ==1

for n >0

//錯誤,從乙個作用域跳轉到另外乙個作用域

defer是乙個函式的執行推遲到其呼叫defer的函式的return之前執行。

多個defer的執行順序是和編寫順序逆序執行的

func dosomething() int 

func do() int

for i :=0; i <10; i++

這樣將輸出9

到0

panic將直接從呼叫panic的當前函式中返回,並且如果panic沒有被recover,那麼程式將直接crash。

可以通過defer和recover來從panic錯誤中恢復。

func protect(g func()) 

}()log.println("start")

g()}

一些特殊功能的SQL語句(特殊SQL)

如今不管是mysql還是oracle,都有很多客戶端軟體方便我們去操作它,mysql有front,sqlyog,oracle有toad,pl sql,但有一些操作還是使用命令方便些,如下所示 mysql中如何檢視當前資料庫中有多少張表?select count tables,table schema...

POS印表機一些特殊控制

procedure tform1.button1click sender tobject varrprinter textfile i integer begin assignfile rprinter,lpt1 rewrite rprinter for i 0 to memo1.lines.cou...

for語句和if語句的一些應用

1.5位運動員參加了10公尺臺跳水比賽,有人讓他們 比賽結果 a選手說 b第二,我第三 b選手說 我第二,e第四 c選手說 我第一,d第二 d選手說 c最後,我第三 e選手說 我第四,a第一 比賽結束後,每位選手都說對了一半,請程式設計確定比賽的名次。int main system pause re...