package main import ( "fmt" ) func main() { c() } // 1,变量 func test1() { //-----------------------------1.1变量声明 var v1 int var v2 string var v3 [10]int //数组 var v4 []int //数组切片 var v5 struct { f int } var v6 *int //指针 var v7 map[string]int //key为string value为int的map var v8 func(a int) int //-----------------------------1.2变量初始化 var v9 int = 10 var v10 = 10 v11 := 10 //-----------------------------1.3匿名变量 //当调用某函数返回多个值,而你只需要用到某几个的时候,则其他的变量用“_”来代替 _, _, nickName := GetName() } //1.3 匿名变量补充 func GetName() (firstName, lastName, nickName string) { return "michael", "ma", "liang" } //二:常量 func test2() { //-----------------------------2.1 常量 const Pi float64 = 3.14159265358979323846 const zero = 0.0 // const ( size int64 = 1024 eof = -1 // ) const u, v float32 = 0, 3 const a, b, c = 3, 4, "foo" //-----------------------------2.2 预订义常量 //true false iota;iota比较特殊,是编译器可以修改的常量,在每个const出现的时候被重置为0,在下一个const出现之前,每出现一次iota会自增1 const ( // iota被重置为0 c0 = iota // c0 == 0 c1 = iota // c1 == 1 c2 = iota // c2 == 2 ) const ( a1 = 1 << iota // a == 1 (iota在每个const开头每重置为0) b1 = 1 << iota // b == 2 c3 = 1 << iota // c == 4 ) const ( u1 = iota * 42 // u == 0 v12 float64 = iota * 42 // v == 42.0 w = iota * 42 // w == 84 ) const x = iota // x == 0 (因为iota又被重置为0了) const y = iota //y==0 同上 //-----------------------------2.3枚举 //制定一系列相关的常量,如下 const ( Sunday = iota Monday Tuesday Wednesday Thursday Friday Saturday numberOfDays ) } //三:类型 func test3() { //-----------------------------3.1:基础类型 //布尔类型:bool //整型:int8 byte int16 int uint uintptr //浮点类型:float32 float64 //复数类型:complex64 complex128 //字符串:string //字符类型:rune //错误类型:error //-----------------------------3.2:复合类型 //指针 //数组 //切片 //字典 //通道 //结构体 //接口 } //四:流程控制 func test4() { //-----------------------------4.1选择 switch i { case 0: fmt.Printf("0") case 1: fmt.Printf("1") case 2: fallthrough case 3: fmt.Printf("3") case 4, 5, 6: fmt.Printf("4, 5, 6") default: fmt.Printf("Default") } switch { case 0 <= Num && Num <= 3: fmt.Printf("0-3") case 4 <= Num && Num <= 6: fmt.Printf("4-6") case 7 <= Num && Num <= 9: fmt.Printf("7-9") } //-----------------------------4.2循环 sum := 0 for i := 0; i < 10; i++ { sum += i } sum2 := 0 for { sum2++ if sum2 > 100 { break } } //-----------------------------4.3跳转 //滚你妹跳转 it := 0 HERE: fmt.Println(i) it++ if i < 10 { goto HERE } //-----------------------------4.4条件 if a < 5 { return 0 } else { return 1 } } //五:函数 //-----------------------------5.1函数定义 //func 函数名 (参数列表)返回值{函数体 返回语句} //大小写问题不在赘述 func ImAfunc(a int, b int) (ret int, err error) { if a < 0 || b < 0 { err = errors.New("Should be non-negative numbers!") return } return a + b, nil } //-----------------------------5.2函数调用 func a() { //就是这么调用的 imafc, err := ImAfunc(1, 2) fmt.Println(imafc, err) } //-----------------------------5.3不定参数类型 func myfunc(args ...int) { for _, arg := range args { fmt.Println(arg) } } //调用 func b() { myfunc(1, 2, 3, 4, 5, 6, 7) } //-----------------------------5.4多返回值 //详见ImAfunc函数 //-----------------------------5.5匿名函数 //实例1 package main import ( "fmt" ) func main() { func(a, b int) (sum int) { sum = a + b fmt.Println(sum) return }(1, 2)//括号后直接跟参数代表直接调用 } //实例2 package main import ( "fmt" ) func main() { nm := func(a, b int) (sum int) { sum = a + b fmt.Println(sum) return } nm(1, 2) } //六:错误处理 func Foo(param int)(n int, err error) { // ... } //调用方式如下 n, err := Foo(0) if err != nil { // 错误处理 } else { // 使用返回值 } //七:defer //-----------------------------7.1 func CopyFile(dst, src string) (w int64, err error) { srcFile, err := os.Open(src) if err != nil { return } defer srcFile.Close() dstFile, err := os.Create(dstName) if err != nil { return } defer dstFile.Close() return io.Copy(dstFile, srcFile) } //-----------------------------7.2 //panic()和recover() //我还没写完
有疑问加站长微信联系(非本文作者)