小编y0s*_*1an的帖子

在Go中生成一个范围内的随机数

math/rand生成非负数的所有整数函数.

rand.Int() int              // [0, MaxInt]
rand.Int31() int32          // [0, MaxInt32]
rand.Int31n(n int32) int32  // [0, n)
rand.Int63() int64          // [0, MaxInt64]
rand.Int63n(n int64) int64  // [0, n)
rand.Intn(n int) int        // [0, n)
Run Code Online (Sandbox Code Playgroud)

我想生成[-m,n]范围内的随机数.换句话说,我想生成正数和负数的混合.

random go

20
推荐指数
3
解决办法
1万
查看次数

该数组是静态的,但直到运行时才知道数组大小.这怎么可能?

这让我困扰了一段时间.它是我(缺乏)理解静态和动态内存分配之间差异的核心.以下数组是一个普通的静态数组,它应该意味着内存是在编译期间分配的,对吗?然而,我已经设置好了,以便用户在运行时输入数组大小.

#include <iostream>
using namespace std;

int main() {
  cout << "how many elements should the array hold? ";
  int arraySize;
  cin >> arraySize;

  int arr[arraySize];

  for (int i = 0; i < arraySize; ++i)
    arr[i] = i * 2;

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

请注意,此程序中没有newdelete运算符.它在Xcode 4.2(默认的Clang编译器)以及我学校的UNIX服务器(GCC 4.4.5)中工作正常.arr在编译时创建数组时,编译器如何知道要分配多少内存?这只是我的编译器的侥幸,危险的代码,可能会破坏其他内存,或者这是合法的吗?

c++ arrays dynamic-memory-allocation dynamic-arrays

9
推荐指数
2
解决办法
2579
查看次数

我应该如何为gzip writer添加缓冲?

我注意到使用gzip包使用bufio内部读取gzip压缩的文件,但不写他们.我知道缓冲对于I/O性能很重要,那么缓冲gzip writer的正确方法是什么?

// ignoring error handling for this example
outFile, _ := os.Create("output.gz")

// Alternative 1 - bufio.Writer wraps gzip.Writer
gzipWriter, _ := gzip.NewWriter(outFile)
writer, _ := bufio.NewWriter(gzipWriter)

// Alternative 2 - gzip.Writer wraps bufio.Writer
writer, _ :=  bufio.NewWriter(outFile)
gzipWriter, _ := gzip.NewWriter(writer)

// Alternative 3 - replace bufio with bytes.Buffer
buf := bytes.NewBuffer()
gzipWriter, _ := gzip.NewWriter(&buf)
Run Code Online (Sandbox Code Playgroud)

另外,在关闭它之前,我是否需要Flush()gzip writer或bufio writer(或两者),或者关闭它会自动刷新writer?

UPDATE:我现在明白了,这两个读取和写入使用gzip缓冲.所以缓冲a gzip.Writer真的是双缓冲.@peterSO认为这是多余的.@Steven Weinberg认为双缓冲可能减少系统调用的数量,但建议基准确定.

gzip go

7
推荐指数
1
解决办法
1278
查看次数

用Go中的函数或方法排序?

sort包提供了这些函数,用于对内置切片类型进行排序:

  • sort.Ints(a []int)
  • sort.Float64s(a []float64)
  • sort.Strings(a []string)

它还提供这些类型与转换内置片类型来命名类型Len(),Less(),Search(),Sort(),和Swap()方法:

  • sort.IntSlice
  • sort.Float64Slice
  • sort.StringSlice

这意味着我可以像这样排序一些int ...

// Function
slice := []int{5, 4, 3, 2, 1}
sort.Ints(slice) // sort in place
Run Code Online (Sandbox Code Playgroud)

或者像这样......

// Method
slice := sort.IntSlice{5, 4, 3, 2, 1}
slice.Sort() // also sort in place
Run Code Online (Sandbox Code Playgroud)

是否最好使用函数或方法排序?是否有时候一种形式优先于另一种形式?

sorting go

5
推荐指数
1
解决办法
230
查看次数

Go地图在内部使用什么数据结构?

我对以下内容感兴趣:

  • 如何在内部实施Go地图?(哈希表,树......)
  • 如果Go贴图是散列表,使用哪个散列函数?
  • 如果Go地图是树木,它们是AVL,红黑还是其他类型?
  • 如果Go贴图是基于阵列的,它们如何避免/处理碰撞?

map go

1
推荐指数
1
解决办法
173
查看次数