Как выделить память для массива на языке программирования go? - PullRequest
10 голосов
/ 25 июня 2011

Я хочу создать массив размера N на ходу, но я не знаю, каким будет N во время компиляции, как бы я выделил для него память?

например.

func MakeArray(size int) {
  return new ([size]int)
}

, который не работает, так как размер не является константой.

Это кажется простым вопросом, но я только начал использовать go, и для меня не очевидно, как это сделать, прочитав учебник (или просмотрев документацию по этому вопросу).

Ответы [ 2 ]

13 голосов
/ 25 июня 2011

Функция make создает срезы, карты и каналы и возвращает инициализированное значение типа T. Вызов make() выделяет новый скрытый массив, к которому относится возвращаемое значение среза.

package main

import "fmt"

func main(){

   ptr := new(int)
   *ptr = 100

   fmt.Println("*ptr = ", *ptr)

   slice := make([]int, 10)    // slice with len(slice) == cap(slice) == 10

   for i:=0; i<len(slice); i++{
      fmt.Println(slice[i])
   }
}
7 голосов
/ 26 июня 2011

Для слайсов встроенная функция Go make имеет два или три аргумента.

make(T, n)       slice of type T with length n and capacity n
make(T, n, m)    slice of type T with length n and capacity m
...