package main
import (
"fmt"
)
func main() {
var a int = 4
var b int32
var c float32
var ptr *int
// 運算符執行個體執行個體
fmt.Printf("a=%T\n", a)//%T是顯示類型
fmt.Printf("b=%T\n", b)
fmt.Printf("c=%T\n", c)
// &和*運算符
ptr = &a
fmt.Printf("a=%d\n", a)//顯示變量值
fmt.Printf("ptr=%d\n", *ptr)
a=100
// if語句
if a<20{
fmt.Println("a小于20")
}
// if···else語句
if a<20{
fmt.Println("a小于20")
}else{
fmt.println("a不小于20")}
b=200
//if語句嵌套
if a==100{
if b==200 {
fmt.Println("a==100,b==200")
}
}
//switch case 語句,注意沒有break
var grade string="B"
var marks int=90
switch marks{
case 90:grade="A"
case 80:grade="B"
case 50,60,70:grade="C"
default:grade="D"
}
switch{
case grade=="A":
fmt.Println("優秀\n")
case grade=="B",grade=="C":
fmt.Println("良好\n")
case grade=="D":
fmt.Println("及格\n")
case grade=="F":
fmt.Println("不及格\n")
default:
fmt.Println("差\n")
}
// switch 語句還可以被用于 type-switch 來判斷某個 interface 變量中實際存儲的變量類型。
var x interface{}//面向對象的,相當于類
switch i:=x.(type){
case nil: //無值
fmt.Printf(" x 的類型 :%T",i)
case int:
fmt.Printf("x 是 int 型")
case float64:
fmt.Printf("x 是 float64 型")
case func(int) float64:
fmt.Printf("x 是 func(int) 型")
case bool, string:
fmt.Printf("x 是 bool 或 string 型" )
default:
fmt.Printf("未知型")
}
// select是Go中的一個控制結構,類似于用于通信的switch語句。每個case必須是一個通信操作,要麼是發送要麼是接收。
// select随機執行一個可運作的case。如果沒有case可運作,它将阻塞,直到有case可運作。一個預設的子句應該總是可運作
// 以下描述了 select 語句的文法:
// 每個case都必須是一個通信
// 所有channel表達式都會被求值
// 所有被發送的表達式都會被求值
// 如果任意某個通信可以進行,它就執行;其他被忽略。
// 如果有多個case都可以運作,Select會随機公平地選出一個執行。其他不會執行。
// 否則:
// 如果有default子句,則執行該語句。
// 如果沒有default字句,select将阻塞,直到某個通信可以運作;Go不會重新對channel或值進行求值。
var c1,c2,c3 chan int
var i1,i2 int
select{
case i1 = <-c1://把指派當成接收
fmt.Printf("received ", i1, " from c1\n")
case c2 <- i2:
fmt.Printf("sent ", i2, " to c2\n")
case i3, ok := (<-c3): // same as: i3, ok := <-c3
if ok {
fmt.Printf("received ", i3, " from c3\n")
} else {
fmt.Printf("c3 is closed\n")
}
default:
fmt.Printf("no communication\n")
}
}