Go語言的學習之旅 三

2022-06-29 17:51:11 字數 3915 閱讀 6263

const a int = 123 //常量定義const,顯式

//a = 456 //修改常量值,會報錯 cannot assign to a,無法賦值

const b = 23 //隱式

const c,d = 1,"s" //多重賦值

const e,f int = 6,7 //多重賦值,同型別

const (//常量列舉

g = 1

h = "asb"

i = len(h)

) fmt.println(a,b,c,d,e,f,g,h,i)

//iota 特殊常量,在定義是為0,後面每行都會計數+1

const (

j = iota

k = iota //同乙個const中,iota會計數

l //即使不繼續賦值也會計數

m = "abc" //即使定義其他數,iota還是會計數

n //這時候n都值為上乙個m都值,不過iota還是計數

o = iota //此時不受m影響,iota繼續計數

) const p = iota //這時候iota會重新整理計數

fmt.println(j,k,l,m,n,o,p)

const (

q = 1var a = 1+1

b := 2-1

c := 10*9

d := 10/3 //預設int整型型別,答案是3

e := 8%2 //取模(求餘)

a++ //自增

b-- //自減

//++a,--a這樣的寫法不允許

//f := a++ 這樣的組合也不被允許

fmt.println(a,b,c,d,e)

//關係運算子

var g int = 1

var h int = 2

if g == helse

if(g < h)else

if(g <= h)else

//邏輯運算子

var i bool = true

var j bool = false

if(i && j)else

if(i || j)else

if(!(i && j))else

//位運算子

/* k=60, 二進位制 0011 1100

l=13 0000 1101

*/var k,l = 60, 13

m := k & l //且 1=1&1,m二進位制 0000 1100

n := k | l //或 1=1|0, n二進位制 0011 1101

o := k ^ l //異或 1 = 1^0, o二進位制 0011 0001

p := k << 1 //左移 0011 1100 向左移動1位,p二進位制0111 1000

q := k >> 1 //右移 0011 1100 向左移動1位,p二進位制0001 1110

fmt.println(m,n,o,p,q)

//賦值運算子

var r int

r = k //簡單都賦值

fmt.println(r,k,r)

r += k //等於r = r + k

fmt.println(r,k,r)

r -= k //同上

fmt.println(r,k,r)

r *= k //同上

fmt.println(r,k,r)

r /= k //同上

fmt.println(r,k,r)

r %= k //同上

fmt.println(r,k,r)

r <<=k //同上

fmt.println(r,k,r)

r >>=k //同上

fmt.println(r,k,r)

r &= k //同上

fmt.println(r,k,r)

r |= k //同上

fmt.println(r,k,r)

r ^=k //同上

fmt.println(r,k,r)

//其他運算子

var s *int

fmt.println(&r) //表示取到r的記憶體位址

r = 10

s = &r

fmt.println(*s) //這個是乙個指標

fmt.println(s)//指標位址

//運算子優先順序

/*由上至下 (優先順序遞減),同級由左到右(優先順序遞減),

符號 * / % << >> & &^

符號 + - | ^

符號 == != < <= > >=

符號 &&

符號 ||

*/

func main() 

} else

//switch語句

switch a

//select語句

//select 是 go 中的乙個控制結構,類似於用於通訊的 switch 語句。每個 case 必須是乙個通訊操作,要麼是傳送要麼是接收。

//select 隨機執行乙個可執行的 case。如果沒有 case 可執行,它將阻塞,直到有 case 可執行。乙個預設的子句應該總是可執行的。

var i, j, k, ch, stopch chan int //定義通訊int型別

var o, p int

select else

default:

fmt.println(" no communication")

} //構建通道

ch = make(chan int)

stopch = make(chan int)

//併發匿名函式

go func()

stopch <- 1

}()fmt.println("-------------")

// 遍歷接收通道資料

for

}end:

}

//迴圈體

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

if(i == 66)

fmt.println("i:",i)

}for i := 0; i < 100; i++

fmt.println("ii:",i)

}end:

fmt.println("結尾end")

var j int = 100

for

j--if(j == 0)

fmt.println("j:",j)

}fmt.println("退出")

package main

import "fmt"

//全域性變數

var g int = 10

//宣告乙個函式型別

type cb func(int) int

func main() )

fmt.println(r)

t := test(100, callback)

fmt.println(t)

}//函式作為引數傳遞

func test(x int, f cb) int

func callback(x int) int

//交換值,引用傳遞

func swap2(x *int, y *int)

//交換值

func swap(x int, y int) (int, int)

go語言中常量設定是不可修改,運算子型別跟其他語言相差無幾,主要自增、自減沒有++i,--i,a=i++這樣的操作。條件跟迴圈大部分語言一致,條件語句還新增select語句(咋一看還以為是sql語法),其實是專門給訊號判斷的乙個語句。還保留了goto end跳轉語法。函式方法很喜歡,雖然跟c挺像的。整體還是很好接受,有一點其他語言基礎的(特別是c語言),還是很快上手!

我的Go語言學習之旅三 Go語言中的for迴圈

這個可是為難我了,我一直是走在web前的程式設計師,各種迴圈用起來得心應手,突然間發現到了go這裡居然行不通了,查閱後才發現,原來go的for是這樣寫的。for i 0 i 10 i 很有才的一種寫法,我用起來感覺的確沒有 帶有圓括號舒服。接下來,看更多關於 for 的例項吧go 的 for 迴圈有...

go語言之旅 三

指標 go與c語言一樣,擁有指標。指標儲存了值的記憶體位址。型別 t是指向t型別值的指標。其零值為nil。定義如下 var p int 與 c 不同,go 沒有指標運算。結構體 與c語言類似,除了定義方式不同之外,其他都與c相同,如訪問方式 等。陣列 型別 n t 表示擁有 n 個 t 型別的值的陣...

Go語言的學習之旅 五

func main 陣列 printslice s fmt.println s 0 2 使用切片方式 fmt.println s 2 fmt.println s 0 fmt.println s s2 make int,3,5 通過make int,len,cap 來定義切片 printslice s...