go 语言第二节课

2018-09-24  本文已影响0人  我叫你猜猜

变量知识点

     // 1.定义一个变量

     var num int
     num = 666
     // 注意点: 在Go语言中, 输出整型只能使用%d, 不能使用%i
     fmt.Printf("%d\n", num)


     // 2.先定义再初始化
    var num int
    num = 888
    fmt.Printf("%d\n", num)
    var num int
    num = 10
    fmt.Printf("%d\n",num)

    // 3.定义的同时初始化
    var num int = 999
    fmt.Printf("%d", num)
    var num int = 10
    fmt.Printf("%d\n",num)

    // 4.定义的同时初始化, 并省略数据类型
    var num  = 999
    fmt.Printf("%d\n", num)
    // 在Go语言中, 可以利用%T输出变量的数据类型
    fmt.Printf("%T\n", num)
    var num = 10
    fmt.Printf("%d\n",num)

    // 5.定义的同时初始化, 并省略数据类型和var
    :=做了两件事情 , 1.会先定义一个变量 2.给定义的变量赋值
    在Go语言开发中非常非常非常常用
    num := 666
    fmt.Printf("%d\n", num)
    num := 10
    fmt.Printf("%d\n",num)

    // 6.:=注意点
    var num := 666 // 语法错误
    num int := 666 // 语法错误
    fmt.Printf("%d\n", num)

    var num int = 666
    // var num int
    // num = 888
    num := 888 // 重复定义
    fmt.Printf("%d\n", num)
     // 1.通过逗号定义多个变量

     var a, b, c int
     a = 123
     b = 456
     c = 789
     fmt.Printf("%d,%d,%d\n", a, b, c)


     // 2.通过变量组定义多个变量

     var(
        a int
        b int
        c int
     )
    a = 123
    b = 456
    c = 789
    fmt.Printf("%d,%d,%d\n", a, b, c)


     // 3.同时定义多个变量, 并且同时初始化
     var a, b, c int = 10, 20, 30
     var a, b, c = 10, 20, 30
    a, b, c := 10, 20, 30
    fmt.Printf("%d,%d,%d\n", a, b, c)


    // 4.同时定义多个变量, 并且同时初始化
    var(
        a int = 10
        b int = 20
        c int = 30
    )

    var(
        a  = 10
        b  = 20
        c  = 30
    )
    fmt.Printf("%d,%d,%d\n", a, b, c)
//退化赋值
num := 123
// 如果通过:=定义多个变量, 但是多个变量中有的变量已经在前面定义过了, 那么只会对没有定义过的变量执行:=
// 而定义过的变量只执行=操作
num, value := 456, 789
fmt.Printf("%d, %d", num, value)

数据类型转换

    // 1.没有隐式转换, 会报错
    var num int = 3.14

    // 2.不能对一个常量进行强制转换
    var num int = int(3.14)

    // 3.正确的做法
    var num float64 = 3.14
    var value int = int(num)
    fmt.Printf("%d\n", value)

    // 4.注意点:
    // 4.1在Go语言中数据类型必须一模一样, 才能直接赋值
   var num int32 = 666
   var value int64 = int64(num)
   //var value int32 = num
   fmt.Printf("%d\n", value)

   // 4.2特殊情况
   byte --> uint8
   var ch byte = 'a'
   var num uint8 = ch
   fmt.Printf("%c\n", num)

   // rune --> int32
   var ch rune = '李'
   var num int32 = ch
   fmt.Printf("%c\n", num)

   // 4.3bool类型不能强制转换为整型
   var flag bool = false
   var num int = int(flag)
   fmt.Printf("%d\n", num)

   // 5.整型也可以通过T(v)转换为字符串类型, 但是在企业开发中不要这么干
   var num int = 97
   var str string = string(num)
   fmt.Printf("%s\n", str)
      var num int = 9
     //第一个参数: 需要转换的整数, 必须是int64类型的
     //第二个参数: 转换为多少进制的字符串
     var str string = strconv.FormatInt(int64(num), 10) //  "9"
     var str string = strconv.FormatInt(int64(num), 2)  // "1001"
     fmt.Printf("%s\n", str)
     var num float32 = 3.1234567890123456789
     // 第一个参数: 需要转换的小数, 必须是float64类型的
     // 第二个参数: 按照什么格式转换 'f'小数格式 'e' 指数的格式
     // 第三个参数: 保留多少位小数, 传入-1按照原始类型的精度保留
     // 第四个参数: 原始类型的标志  float32 --> 32  float64 --> 64
     var str string = strconv.FormatFloat(float64(num), 'f', -1, 32) // "3.1234567"
     var str string = strconv.FormatFloat(float64(num), 'f', -1, 64) // "3.123456789012345"
    var str string = strconv.FormatFloat(float64(num), 'f', 2, 32)  // "3.12"
    fmt.Printf("%s\n", str)
    var flag bool = false
    var str string = strconv.FormatBool(flag) // "false"
    fmt.Printf("%s\n", str)

2.strconv.Itoa

    var num int = 1001
    var str string = strconv.Itoa(int(num))
    fmt.Printf("%s\n", str)
     var str string = "1001"
     // 第一个参数: 需要转换的字符串
     // 第二个参数: 被转换的字符串保存的整数是多少进制的
     // 第三个参数: 期望转换为多少位的整数(不一定准确), 换句话说就是要转换为多少位整数
     // 注意点: 如果被转换的字符串超出了指定的长度会报错
     // 返回值:
     // 返回值的第一个: 转换之后的数值, 是int64类型
     // 返回值的第二个: 如果转换成功返回nil, 如果转换失败就不是nil
     // int8   -128~127
     //num, err := strconv.ParseInt(str, 10, 8)
     num, err := strconv.ParseInt(str, 2, 8)
     if err != nil{
        fmt.Printf("转换失败\n")
     }else{
        fmt.Printf("%d\n", num)
        fmt.Printf("%T\n", num)
     }
    var str string = "3.1234567890123456789"
    // 第一个参数: 需要转换的字符串
    // 第二个参数: 要将字符串中的小数转换为单精度还是双精度, 单精度传入32, 双精度传入64
    // 返回值:
    // 第一个返回值: 转换之后的小数, float64类型
    // 第二个返回值: 转换成功返回nil, 转换失败不为nil
    //num, err := strconv.ParseFloat(str, 32)
    num, err := strconv.ParseFloat(str, 64)
    if err != nil{
        fmt.Printf("转换失败\n")
    }else{
        //fmt.Printf("%f\n", num)
        fmt.Println(num)
        fmt.Printf("%T\n", num)
    }
     var str string = "false"
     flag, err := strconv.ParseBool(str)
    if err != nil{
        fmt.Printf("转换失败\n")
    }else{
        // 注意点: 在Go语言中%t输出布尔类型
        fmt.Printf("%t\n", flag)
        fmt.Printf("%T\n", flag)
    }

2.strconv.Atoi()

    var str string = "1001"
    num, err := strconv.Atoi(str)
    if err != nil{
        fmt.Printf("转换失败\n")
    }else {
        fmt.Printf("%d\n", num)
    }

常量知识点

格式:
    const 变量名称1, 变量名称2 数据类型 = 值1, 值2;
    const(
      变量名称1 数据类型 = 值1
      变量名称2 数据类型 = 值2
    )
    const num1,num2,num3 = 1,2,3
    const(
        num5 = 4
        num4 = 5
        num6 = 6
    )
    fmt.Println(num5,num4,num6)
     // 1.定义单个常量
    const num int  =  666
    const num  =  666
    const num  =  666
    //num = 789
    fmt.Printf("%d\n", num)

    // 2.定义多个常量
    const a, b, c int  = 10, 20, 30
    const a, b, c  = 10, 20, 30
    a = 666
    b = 777
    c = 888
    
    //3.常量组的注意点
    //在常量组中, 如果常量没有赋值, 那么默认值就是上一行的取值
    const(
        a  = 666
        b  = 789
        c
    )
    fmt.Printf("%d, %d, %d", a, b, c)
    // 1.iota迭代器, 默认会从0开始递增

    const(
        male = iota
        female = iota
        yao = iota
    )
    // 2.只要常量组中出现了iota, 该常量组中后续的常量都会一次递增1
    const(
        male = iota
        female
        yao
    )
    // 3.如果常量组中的iota被打断了, 那么就不会继续递增了, 会按照常量组的默认方式处理(上一行的值)
    const(
        male = iota
        female = 666
        yao
    )

    // 4.如果常量组中的iota被打断了, 但是后续又被回复了, 那么前面有多少行就会递增多少
    const(
        male = iota
        female = 666
        yao = iota
    )

输入输出函数

上一篇下一篇

猜你喜欢

热点阅读