2015-05-17 2 views
7

Я хочу, чтобы преобразовать массив фиксированного размера с долькой:Go-lang: Как преобразовать срез в массив фиксированного размера?

func gen(bricks []Brick) { 
    if len(bricks) == 16 { 
     if check(Sculpture{bricks}) { 
      var b [16]Brick = bricks[0:16]; 
     } 
    } 
} 

Но это приводит:

cannot use bricks[0:16] (type []Brick) as type [16]Brick in assignment 

Как преобразовать фрагмент в массив фиксированного размера?

+1

Возможный дубликат [В golang, как вы преобразовываете срез в массив] (http://stackoverflow.com/questions/19073769/in-golang-how-do-you-convert-a-slice-into- a-array) – twinj

ответ

19

Вы должны использовать copy:

slice := []byte("abcdefgh") 

var arr [4]byte 

copy(arr[:], slice[:4]) 

fmt.Println(arr) 

Как отмечает Aedolon вы также можете просто использовать

copy(arr[:], slice) 

, как копия будет всегда только копия минимум len(src) и len(dst) байт.

+2

Это правильно, но небольшое дополнение: вам не нужно 'copy (arr [:], slice [: 4])', 'copy (arr [:], slice)' достаточно. 'copy' автоматически ограничивает себя меньшим из данных фрагментов. – Aedolon

+0

@Aedolon Спасибо за подсказку, добавили ее в ответ. – inf

Смежные вопросы