2015-01-29 22 views
5

Các chức năng len()make() hoạt động như thế nào? Vì ngôn ngữ thiếu hỗ trợ cho cả generics và chức năng quá tải nên tôi không thấy cách func len(v Type) int là có thể. Tương tự cho func make(Type, size IntegerType) Type.Golang: Các hàm len() và make() của go go hoạt động như thế nào?

tôi dường như không thể tìm thấy chức năng trong nguồn đi, gần nhất tôi đã quản lý để tìm thấy là this

Trả lời

9

Các lenmake chức năng là một phần của đặc tả ngôn ngữ và built-in cho trình biên dịch . Hỗ trợ thời gian chạy cho các hàm dựng sẵn nằm trong số runtime package.

Tệp builtin.go chỉ được sử dụng cho tài liệu. Nó không được biên dịch.

+1

Hơn là một phần của trình biên dịch: nó được mã hóa cứng như một phần của đặc tả ngôn ngữ. https://golang.org/ref/spec#Length_and_capacity https://golang.org/ref/spec#Making_slices_maps_and_channels – dyoo

+2

len cũng là "hàm" duy nhất có khả năng trả về một const (khi được sử dụng trên các mảng). Thông số kỹ thuật cung cấp các quyền hạn đặc biệt được xây dựng sẵn mà chúng tôi chỉ là những người lập trình sinh tử không thể đối sánh. –

+0

Có liên kết đến địa điểm chính xác nơi 'len' thực sự được triển khai không? –

1

Vì các loại nghiêm ngặt của Go, trình biên dịch luôn biết loại bạn đang chuyển đến hàm len và do đó nó chuyển sang chức năng khác cho các loại khác nhau, có thể được xác định tại thời gian biên dịch. Trong hầu hết các trường hợp, bạn đang cố gắng lấy độ dài của một lát, trong trường hợp hàm len chỉ cần trả lại trường len cho cấu trúc của slice đó (vì một lát thực sự là một cấu trúc); tương tự cho một chuỗi.

Trình biên dịch có tất cả các loại thủ thuật, mã lắp ráp do trình biên dịch tạo ra hiếm khi tuân theo cùng một logic mà bạn đã nhập.

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