Với chức năng, có thể lấy tên của nó không? Nói:Làm thế nào để lấy tên của một hàm trong Go?
func foo() {
}
func GetFunctionName(i interface{}) string {
// ...
}
func main() {
// Will print "name: foo"
fmt.Println("name:", GetFunctionName(foo))
}
Tôi được thông báo rằng runtime.FuncForPC sẽ hữu ích, nhưng tôi không hiểu cách sử dụng.
Trong khi điều này dường như hoạt động, một số dịch vụ có thể được yêu cầu ở đây: tài liệu cho .Pointer() nói "Nếu v's Kind là Func, con trỏ trả về là con trỏ mã cơ bản, nhưng không nhất thiết phải xác định một hàm duy nhất. chỉ đảm bảo rằng kết quả bằng 0 nếu và chỉ khi v là một giá trị nil func. " – jochen
@jochen hiện "không phải là một func đơn" có nghĩa là nó có thể trả về các kết quả dương tính giả (tức là con trỏ của một hàm khác)? – themihai
@themihai Tôi không biết, câu tôi trích dẫn là tất cả các tài liệu tại https://golang.org/pkg/reflect/#Value.Pointer nói về điều này. Nhưng báo giá dường như chỉ ra rằng người ta có thể nhận được cùng một con trỏ cho các chức năng khác nhau, phải không? Và nếu trường hợp này xảy ra, 'GetFunctionName' có thể trả về cùng tên cho các hàm khác nhau? – jochen