初级会员
  • 第 18021 位会员
  • jan-bar
  • janbar
  • 2018-04-21 11:54:32
  • Offline
  • 23 21

最近发布的主题

    暂无

最近发布的文章

最近分享的资源

    暂无

最近发布的项目

    暂无

最近的评论

  • ``` func ParseInt(s string, base int, bitSize int) (i int64, err error) 由于go语言是强类型的特性,所以第一个返回值必须是int64类型,因此你的num也必须是int64类型, 不管你要转换成什么都必须把num声明成int64 但是如果你需要得到其他类型的返回值可以这样干,强制将int64转换成你需要的类型 var tmp int64 tmp, _ = strconv.ParseInt("123", 10, 0) numInt := int(tmp) numUint := uint(tmp) numInt32 := int32(tmp) fmt.Println(numInt, numUint, numInt32) 第3个参数bitSize实际上做了校验的功能,比如下面的代码会报错 tmp, err := strconv.ParseInt("123456", 10, 8) fmt.Println(tmp) // 此时tmp = 127 if err != nil { log.Fatal(err) // strconv.ParseInt: parsing "123456": value out of range } 那是因为int8范围为[-128~127] 综上所述,当你知道要转换字符串是在某个范围内,那就把bitSize填成对应位即可, 这样转换时也会检查是否越界。 多说一点关于:strconv.ParseUint 这个转换结果必须是uint64,因此只能转换正整数,如果传入字符串为负数那也会报错的。 ```
  • #4 @yuwei 这个和填0没什么关系。。该方法返回值就是int64啊。所以要用int64的变量接收。可以看看源码,里面有说明额。
  • strconv.ParseInt本来返回第一个参数就是int64类型啊 ``` var n int64 n, _ = strconv.ParseInt("2942394", 10, 0) fmt.Println(n) n, _ := strconv.ParseInt("2942394", 10, 0) fmt.Println(n) ``` 上面2中用法没毛病
  • 我也是第一次看到这种写法,猜和切片的len和cap有关,果然,经过我一会儿的实验得出如下结论。 ``` a := []int{1, 2, 3, 4, 5, 6, 7, 8, 9} fmt.Println(a, len(a), cap(a)) b := a[2:4] fmt.Println(b, len(b), cap(b)) b = a[2:4:5] fmt.Println(b, len(b), cap(b)) b = a[2:4:4] fmt.Println(b, len(b), cap(b)) 结果: [1 2 3 4 5 6 7 8 9] 9 9 [3 4] 2 7 [3 4] 2 3 [3 4] 2 2 ``` 根据上述结果可以得出 a[n:m] 这种方式实际上会把n下标及以后的切片截取出来,包括后面还未使用的容量部分也截取 a[n:m:o] 这时o<m 或 o > len(a)会触发panic,因为o是可以限定切片容量 至于问题 return b[n-num : n : n] ,显然是将第n-num位到n位截取, 并且新的切片cap=len避免返回结果容量大于长度造成内存占用吧。 上述做法在新切片不会涉及append操作(及可能重新申请内存)时可保证结果占用内存最小, 看来以后这个要加入我的技巧中了。 不然 a := make([]byte, 1024) b := a[:n] 这种写法b的容量cap仍然是1024,明显浪费内存。 以上就是我得到的结论,有可能关于浪费内存的说法有误,但是这种写法应该看来是比较推荐的吧。
  • 评论了博文 [转]golang压缩加压
    在for循环里面加这个 defer fr.Close(),有点不对啊。。