学习笔记 | 青训营

53 阅读3分钟

string类型与其他类型转换

   func main() {
   	var s1 string = "true"
   	var b bool
   
   	//strconv.ParseBool(str) 函数会有两个返回值(value bool, err error)
   	//使用 " _ " ,忽略 err 类型的返回值
   	b, _ = strconv.ParseBool(s1)
   	fmt.Printf("b type %T\tb = %v\n", b, b)
   
   	var s2 string = "1234567890"
   	var i1 int64
   
   	//ParseInt(str,__进制,int_位数),返回值(i int64, err error)
   	i1, _ = strconv.ParseInt(s2, 10, 64)
   	fmt.Printf("i type %T\ti = %v\n", i1, i1)
   
   	var s3 string = "123.456"
   	var f1 float64
   
   	//ParseFloat(str,_位数),返回值(f float64, err error)
   	f1, _ = strconv.ParseFloat(s3, 64)
   	fmt.Printf("f type %T\tf = %v\n", f1, f1)
   }
  1. 对于不能转换的内容转换时,golang将其直接转换为默认值(数值型转为0,bool型转为false)

  2. func main() {
    
    	var num int = 50
    	fmt.Printf("num地址:%v\n", &num)
    
    	var ptr *int = &num
    	*ptr = 100
    	fmt.Printf("num = %v,ptr = %v\n", num, ptr)
    	fmt.Printf("ptr的地址%v\n", &ptr)
    }
    
  3. breakdefaultfuncinterfaceselect
    casedefergomapstruct
    chanelsegotopackageswitch
    constfallthroughifrangetype
    continueforimportreturnvar
  4. 首字母大写为公开,小写为私有

  5. ++、-- 只能独立使用,不能放在语句中

  6. 分类描述关联性
    后缀() [] -> . ++ --从左到右
    单目+ - ! ~ (type) * & sizeof从右到左
    乘法* / %从左到右
    加法+ -从左到右
    移位<< >>从左到右
    关系< <= > >=从左到右
    相等(关系)== !=从左到右
    按位and&从左到右
    按位xor从左到右
    按位or|从左到右
    逻辑and&&从左到右
    逻辑or||从左到右
    赋值运算符= += -= *= /= %= >>= <<= &= ^= |=从右到左
    逗号,从左到右
  7. 输入格式**fmt.Scanln(&地址)**,括号内填入接受变量的地址

  8. 支持在if中定义变量,**} else {**不允许换行

    if age := 20; age > 18 {	//条件不需要加括号
    	fmt.Println("成年了")
    }
    
  9. if条件内不允许出现**if b = false**这种赋值语句

  10. switch语句case后不需要**break**语句,默认case最后为break;

  11. case后的表达式可以为多个用**' , '**隔开,可以是常量、变量、一个有返回值的函数;

  12. case后的数据类型与switch后表达式的数据类型相同

    var num1 int32 = 10
    var num2 int32 = 20
    switch num1 {
    	case num2, 5, 10:		//数据类型相同即可
    		fmt.Println("Yes")
    	default:				//允许没有default
    		fmt.Println("NO")
    }
    
  13. case后的值如果是常量则不允许重复

  14. var num int = 10			//当作if...else分支使用
    switch {
        case num == 10:
        	fmt.Println("Yes")
        default:
        	fmt.Println("NO")
    }
    
    var score int = 90
    switch {
        case score > 90:
        	fmt.Println("优秀")
        case score > 75 && score <= 90:
        	fmt.Println("良好")
        case score >= 60 && score < 75:
        	fmt.Println("及格")
        default:
        	fmt.Println("不及格")
    }
    
  15. switch穿透;默认穿透一层

  16. Type Switch:switch语句还可以被用于type-switch来判断某个interface变量中实际指向的变量类型

  17. 循环结构标准写法与特有写法

    // 1
    	str1 := "hello~world!"
    	for i := 0; i < len(str1); i++ {		//无法识别中文
    		fmt.Printf("val = %c\n", str1[i])
    	}
    // 1改
    	str1 := "hello~world!"
    	t := []rune(str1)				//[]rune方法接收,可以识别中文
    	for i := 0; i < len(t); i++ {
    		fmt.Printf("val = %c\n", t[i])
    	}
    // 2
    	str2 := "hello~world"
    	for index, val := range str2 {			//识别全部类型
    		fmt.Printf("index = %d val = %c\n", index, val)
    	}
    
  18. for-range是按照字符的方式遍历,可以接收输出中文

  19. go没有while和do...while语法

  20. 生成随机数

        rand.Seed(time.Now().Unix())
        num := rand.Intn(100) + 1		//rand.Intn(n)的范围[0,n)
        fmt.Println(num)			//rand.Intn(100) + 1的范围[1,100)
    
    
  21. break跳出最近for循环;break lablen跳出标记n之后的循环

  22. continue跳出最近for循环的本次循环;continue lablen跳过标记n之后的这本次for循环

  23. goto lablen跳转到指定**lablen:**的位置,尽量不使用

  24. func 函数名(形参列表)(返回值列表){
    执行语句
    return 返回值列表
    }

  25. 引用时,被引用函数首字母大写,包名.函数名

  26. 包名过长支持使用别名,使用别名后原名不可用

    import{
        BB "GoDemo/chapter01/demo01/model"
    }
    
  27. renturn可以接受的多个返回值,不需要的位置可以使用**_**占位

  28. go不支持函数重载