本文共 2037 字,大约阅读时间需要 6 分钟。
eg. for init; condition; post { ... }
2, 定义一个变量,默认赋值为其类型null值。引入“:=”符号在一步内完成声明与赋值(只用于函数内,此情况下,变量类型由赋值内容自动推演) 3, 特殊变量_(下划线),任何赋给它的值将被丢弃。 4,GO编译器对声明却未使用的变量会报错。 5, int/uint视硬件架构定义为32位或64位,另外有一套完整的类型:int8, int16, int32, int64 / byte(uint8别名), uint8, uint16, uint32, uint64 / float32, float64。各类型完全独立,不能混合赋值,除非强转。 6,常量是无类型的。iota关键字表示0,重复使用时,每次使用加1。Go使用其演绎枚举类型。 eg. const ( Monday = iota Tuesday Wednesday ... Sunday numberOfDays // 该值为包内私有,不可为其他包访问 )
7,字符串变量在Go一旦被赋值,字符串就不能被修改,除非进行转换。 eg. // 报错 var s string = "hello" s[0] = 'c' // 正确 s := "hello" c := []rune(s) c[0] = 'c' s2 := string(c)
8,rune是int32的别名,用UTF-8编码。该类型在需要遍历字符串中的字符时,可以遍历每个字节(PS:使用US ASCII编码字符串时,字节与字符等价,但Go中不存在ASCII编码),为了获取实际的字符,使用该类型。 9,在有返回值的函数中,不允许将”最终的“retrun语句包含在if...else...中 eg. func example(x int) int { // 报错: function ends without a return statement if x == 0 { return 1 } else { return x } }
10,break除了跳出当前循环外,后面还可以接指定标签,用标签决定退出哪个循环。 eg. J: for j := 9; j < 5; j++ { for i := 9; i < 10; i++ { if i > 5 { break J } } }
11,range相当于迭代器,用于循环,从循环的内容中返回一个键值对。 eg. list := []string{"a", "b", "c", "d", "d"} for k, v := range list { ... // k为数组下标,v为元素内容 }
12,switch后面表达式不必为常量或整数,也可以无表达式。无表达式时,相当于if-else if-else判断。case匹配失败不会自动向下尝试,需要使用fallthrough关键字。 eg. switch i { case 0: // i为0时,执行func2() case 1: func1() default: func2() } switch i { case 0: fallthrough // i为0时,执行func1() case 1: func1() default: func2() }
for i := 1; i <= 100; i++ { if (i % 3 == 0) && (i % 5 == 0) { fmt.Println("FizzBuzz") } else if i % 3 == 0 { fmt.Println("Fizz") } else if i % 5 == 0 { fmt.Println("Buzz") } else { fmt.Println(i) } }
str := "A" for i := 0; i < 10; i++ { fmt.Printf("%s\n", str) str = str + "A" }
转载地址:http://drpad.baihongyu.com/