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 mainimport "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...