[#] Soft Mocks для Go! (переопределение функций и методов в runtime)
habrabot(difrex,1) — All
2017-05-15 11:30:04


## Soft Mocks для Go!


Основная идея [Soft Mocks для PHP][1] — это переписывание кода «на лету» перед include(), чтобы можно было поменять реализацию любых методов, функций и констант во время исполнения. Поскольку go — компилируемый язык, то логично делать то же самое на этапе компиляции. В этой статье я расскажу по свой проект Soft Mocks for Go.


## Функциональность


Возможности Soft Mocks for Go весьма ограничены — вы можете временно переопределить нужные вам функции и методы, а потом откатить свои правки. Также можно вызвать оригинальную функцию.

При использовании soft mocks, следующий код:

func main() {
closeFunc := (*os.File).Close
soft.Mock(closeFunc, func(f *os.File) error {
fmt.Printf("File is going to be closed: %s\n", f.Name())
res, _ := soft.CallOriginal(closeFunc, f)[0].(error)
return res
})
fp, _ := os.Open("/dev/null")
fmt.Printf("Hello, world: %v!\n", fp.Close())
}


Напечатает вот что:

File is going to be closed: /dev/null
Hello, world: !


Скачать библиотеку можно по адресу: [github.com/YuriyNasretdinov/golang-soft-mocks][2]

[Читать дальше →][3]

[1]: https://habrahabr.ru/company/badoo/blog/279617/
[2]: https://github.com/YuriyNasretdinov/golang-soft-mocks
[3]: https://habrahabr.ru/post/328620/?utm_source=habrahabr&utm_medium=rss&utm_campaign=feed_posts#habracut