2010-05-11 60 views
32

Có một số bản đồ xác định là:Con trỏ trỏ tới một bản đồ

var valueToSomeType = map[uint8]someType{...} 
var nameToSomeType = map[string]someType{...} 

tôi sẽ muốn có một biến trỏ đến địa chỉ của các bản đồ (để không sao chép tất cả các biến). Tôi đã thử nó sử dụng:

valueTo := &valueToSomeType 
nameTo := &nameToSomeType 

nhưng việc sử dụng valueTo[number], nó cho thấy
nội lỗi biên dịch: var không có loại, init: mới

Làm thế nào để có được nó?

Sửa

Các lỗi được thể hiện bởi một vấn đề khác.

Trả lời

73

Bản đồ là các loại tham chiếu, vì vậy chúng là các đường được chuyển bằng tham chiếu. Bạn không cần một con trỏ.

+1

Hãy xem tại đây: https://dave.cheney.net/2017/04/29/there-is-no-pass-by-reference-in-go – Joppe

+0

Có, Dave đã mô tả nó tốt hơn. Đọc bài blog của anh ấy. – Mue

37

Cụ thể hơn, từ Golang Specs:

Slices, maps and channels are reference types that do not require the extra indirection of an allocation with new .
The built-in function make takes a type T , which must be a slice, map or channel type, optionally followed by a type-specific list of expressions.
It returns a value of type T (not *T).
The memory is initialized as described in the section on initial values

Tuy nhiên, liên quan đến function calls, các thông số được truyền theo giá trị (luôn luôn).
Ngoại trừ giá trị của tham số bản đồ là con trỏ.

+0

vậy ai đúng? –

+2

@JuliusF cả hai, nhưng tôi chính xác hơn trong câu trả lời của tôi: con trỏ được truyền theo giá trị. Thông tin thêm về "truyền theo giá trị" tại http://stackoverflow.com/a/23046811/6309. – VonC

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