README.md add motivation and benefits sections (#97)
- commit
- 804e759207fea586f57fd219ca4dd954bf158816
- author
- TotallyGamerJet · · 2023-02-13 04:27 UTC
- committer
- GitHub · · 2023-02-13 04:27 UTC
- parent
- cb589c5
- signature
- GPG Unverified
4AEE18F83AFDEB23The key is unknown
1 file · +15 -1
M README.md +15 -1
| @@ -3,6 +3,20 @@ | |||
| 3 | 3 | ||
| 4 | 4 | A library for calling C functions from Go without Cgo. | |
| 5 | 5 | ||
| 6 | + | ## Motivation | |
| 7 | + | ||
| 8 | + | The [Ebitengine](https://github.com/hajimehoshi/ebiten) game engine was ported to use only Go on Windows. This enabled | |
| 9 | + | cross-compiling to Windows from any other operating system simply by setting `GOOS=windows`. The purego project was | |
| 10 | + | born to bring that same vision to the other platforms supported by Ebitengine. | |
| 11 | + | ||
| 12 | + | ## Benefits | |
| 13 | + | ||
| 14 | + | - **Simple Cross-Compilation**: No C means you can build for other platforms easily without a C compiler. | |
| 15 | + | - **Faster Compilation**: Efficiently cache your entirely Go builds. | |
| 16 | + | - **Smaller Binaries**: Using Cgo generates a C wrapper function for each C function called. Purego doesn't! | |
| 17 | + | - **Dynamic Linking**: Load symbols at runtime and use it as a plugin system. | |
| 18 | + | - **Foreign Function Interface**: Call into other languages that are compiled into shared objects. | |
| 19 | + | ||
| 6 | 20 | ## Example | |
| 7 | 21 | ||
| 8 | 22 | ```go | |
| @@ -33,7 +47,7 @@ func main() { | |||
| 33 | 47 | } | |
| 34 | 48 | var puts func(string) | |
| 35 | 49 | purego.RegisterLibFunc(&puts, libc, "puts") | |
| 36 | - | puts("Calling C from from Go without Cgo!") | |
| 50 | + | puts("Calling C from Go without Cgo!") | |
| 37 | 51 | } | |
| 38 | 52 | ``` | |
| 39 | 53 | ||
| @@ -3,6 +3,20 @@ | |||||
| 3 | 3 | ||||
| 4 | A library for calling C functions from Go without Cgo. | 4 | A library for calling C functions from Go without Cgo. | ||
| 5 | 5 | ||||
| 6 | + | ## Motivation | |||
| 7 | + | ||||
| 8 | + | The [Ebitengine](https://github.com/hajimehoshi/ebiten) game engine was ported to use only Go on Windows. This enabled | |||
| 9 | + | cross-compiling to Windows from any other operating system simply by setting `GOOS=windows`. The purego project was | |||
| 10 | + | born to bring that same vision to the other platforms supported by Ebitengine. | |||
| 11 | + | ||||
| 12 | + | ## Benefits | |||
| 13 | + | ||||
| 14 | + | - **Simple Cross-Compilation**: No C means you can build for other platforms easily without a C compiler. | |||
| 15 | + | - **Faster Compilation**: Efficiently cache your entirely Go builds. | |||
| 16 | + | - **Smaller Binaries**: Using Cgo generates a C wrapper function for each C function called. Purego doesn't! | |||
| 17 | + | - **Dynamic Linking**: Load symbols at runtime and use it as a plugin system. | |||
| 18 | + | - **Foreign Function Interface**: Call into other languages that are compiled into shared objects. | |||
| 19 | + | ||||
| 6 | ## Example | 20 | ## Example | ||
| 7 | 21 | ||||
| 8 | ```go | 22 | ```go | ||
| @@ -33,7 +47,7 @@ func main() { | |||||
| 33 | } | 47 | } | ||
| 34 | var puts func(string) | 48 | var puts func(string) | ||
| 35 | purego.RegisterLibFunc(&puts, libc, "puts") | 49 | purego.RegisterLibFunc(&puts, libc, "puts") | ||
| 36 | - | puts("Calling C from from Go without Cgo!") | 50 | + | puts("Calling C from Go without Cgo!") |
| 37 | } | 51 | } | ||
| 38 | ``` | 52 | ``` | ||
| 39 | 53 | ||||