2016-07-13 16 views
9

Tôi đang cố gắng tính toán độ dài cần thiết cho một mảng trong triển khai sắp xếp hợp nhất mà tôi đang viết trong go. Nó trông giống như thế này:Lỗi phát: mảng không liên tục bị ràng buộc

func merge(array []int, start, middle, end int) { 
    leftLength := middle - start + 1 
    rightLength := end - middle 
    var left [leftLength]int 
    var right [rightLength]int 
    //... 
} 

sau đó tôi nhận được đơn khiếu nại này khi chạy go test:

./mergesort.go:6: non-constant array bound leftLength 
./mergesort.go:7: non-constant array bound rightLength 

tôi giả go không được hưởng người dùng instantiating chiều dài của một Array với một giá trị tính toán. Nó chỉ chấp nhận các hằng số . Tôi có nên bỏ cuộc và sử dụng một lát không? Tôi mong đợi một slice là một mảng động nghĩa là danh sách được liên kết hoặc các bản sao thành một mảng lớn hơn khi nó đầy.

+0

Bạn muốn "mong đợi" một lát là mảng động? [Đọc những gì một lát thực sự là] (https://blog.golang.org/go-slices-usage-and-internals). –

+1

Đó là những gì Slices được tạo cho Go. Dưới mui xe họ chỉ là con trỏ đến mảng. – user937284

+0

@TimCooper thú vị. Thay vì đưa cho Array một giao diện phức tạp, bản thân chúng là một lớp khác khiến cho thao tác mảng trở nên đơn giản hơn? – Breedly

Trả lời

20

Bạn không thể khởi tạo một mảng như vậy với giá trị được tính khi chạy. Thay vào đó, hãy sử dụng lệnh make để khởi tạo một slice với độ dài mong muốn. Nó sẽ trông như thế này;

left := make([]int, leftLength) 
+2

* Điều đó hoặc bạn có thể sử dụng lát. * Lát * đang * được sử dụng trong ví dụ của bạn; đó là những gì được trả lại. –

+0

@TimCooper điểm tốt. – evanmcdonnal

Các vấn đề liên quan