• Go 使用小记


    1、不能使用在运行时计算的值实例化这样的数组。
    而是使用make初始化具有所需长度的切片。

    db := ConnMysql()
    rows, err := db.Query("select rules from u_check_list where status= ? and web_uri=? and server_ip=? order by rank ", 1, web, server)
    helper.CheckErr(err)
    columns, err := rows.Columns()
    helper.CheckErr(err)
    var rules = [len(columns)]string
    
    Error Message: non-constant array bound len(columns)
    
    这样写:
     columns, err := rows.Columns()
     helper.CheckErr(err)
     var ruleLength = len(columns)
     var rules = make([]string, ruleLength)
    
    

    2、切片slice,一个可以动态改变大小的数组。
    最大特点:长度可变;长度不同,两个切片就会不同

    3、channel,初始化的时候如果设置了缓存容量,就要注意容量是否达到最大值,如果达到最大值又未被读取,此时再向channel里写数据是会失败的

    4、变量名一定要注意不要跟关键字冲突;不要跟包名冲突,不然会导致包无法导入

    5、并发与并行的区别:
    并发: 单核cpu,可以做一系列的事,但是在某个时间点,做的只有一个任务,当任务阻塞时,cpu能立即唤醒其他任务顶上,让任务永远都在进行中。比如一个人手在玩手机,玩游戏玩烦躁了 改成看视频
    并行:多核cpu,可以同时做一系列的事。再每一个时间点,如果存在多个任务,那么这些任务是同时在做着的。比如一个人下班后回到家,听着音乐的同时在看书

    6、panic: assignment to entry in nil map错误
    data 是一个map[string]interface{}
    原因: 初始化时使用: data := map[string]interface{} //未分配内存,直接赋值导致
    使用: data := make(map[string]interface{}) //使用make定义,自动分配内存,不会出错

    7、日期初始化,一定得使用“2006-01-02 03:04:05” 或者 “2006-01-02 15:04:05” 一个数字都不能替换,不然会导致得到的数据不对。
    类似php “Y-m-d H:i:s”;这里的Y对应2006。03时对应的是12小时制,15对应的显示24小时制的。
    美国人喜欢写日期按照 月 日 时 分 秒 年 时区,对应就是1月2号下午3点4分5秒06年7时区

    8、defer的使用。会有一个defer栈,遵循栈的先进后出的规则。

    fmt.Println(1)
    defer fmt.Println(2)
    defer fmt.Println(3)
    fmt.Println(4)
    
    //输出
    //1
    //4
    //3
    //2
    

    9、数据类型转换

       // 1)、int转string
        num := 10
        str,_ :=strconv.Itoa(num)
    
       // 2)、string转int
        str :="123"
        num,_ := strconv.Atoi(str)
    
       // 3)、string转int64
        num64,_ := strconv.ParseInt(str)
    
       // 4)、int转uint
        int_num := unit(int_num)
    
      // 5)、int64转int
        //a. 使用int64()
        int64_num :=int64(int_num)
    
        //b.先转string,再转int
        int64_time :=time.Now().Unix()
        str_time :=strconv.FormatInt(int64_time,10)
        int_time :=strconv.Atoi(str_time)
    
       // 6)、string转time.Time
        str_time := "1577761285" 
        int64_time ,_ := strconv.ParseInt(str_time )  //先转int64  
        tm := time.Unix(int64_time,10,64)  //转time.Time
        // tm.Format("2006-01-02 15:04")  //格式化时间
        
      
        
    
  • 相关阅读:
    读《大道至简》第六章感想
    课后作业之数组
    读《大道至简》第五章感想
    课后作业四
    读《大道至简》第四章之感想
    java上课作业(第三次)
    读《大道至简》第三章感想
    作业
    小组项目冲刺第三天的个人总结
    小组项目冲刺第二天的个人总结
  • 原文地址:https://www.cnblogs.com/xinxinmifan/p/go-learning-notes.html
Copyright © 2020-2023  润新知