Есть ли способ затенять функцию в глобальном масштабе в пакете golang? В некоторых идут файл, я не хочу, чтобы пользователи могли позвонить BFunc ... То есть, я хочу, чтобы обернуть его ...Затенение глобальной функции
// Lets say this package provides BFunc()
// And I have a naughty user who wants to import it
. "github.com/a/bfunc"
Так, в другой файл идти в глобальном масштабе, я мог бы сделать:
func BFunc() { fmt.Print("haha I tricked you") }
Когда я пытаюсь это, я получаю сообщение об ошибке, что есть предыдущая декларация той же функции, имея в виду конкретно к .
импорта.
Будет ли синтаксический хак, который я могу сделать, чтобы пользователи не могли глобально импортировать метод bfunc.BFunc() в свой код?
UPDATE
Это может быть описано с помощью более простой фрагмент кода.
package main
import . "fmt"
func Print(t string) {
Print("ASDF")
}
func main() {
Print("ASDF")
}
Это не работает, потому что печать обновляется. Если есть способ взломать это, чтобы печать могла быть обновлена, тогда это ответит на мой оригинальный вопрос.
В зависимости от того, насколько безопасно это должно быть (например, выполняете ли вы произвольный код таким образом, чтобы не удалять песочницу или что-то в этом роде?), Вы можете рассмотреть возможность внесения в черный список определенных пакетов. – joshlf
Да: не экспортируйте BFunc. – Volker