Purego – A library for calling C functions from Go without Cgo

This page summarizes the projects mentioned and recommended in the original post on news.ycombinator.com

Our great sponsors
  • InfluxDB - Power Real-Time Data Analytics at Scale
  • WorkOS - The modern identity platform for B2B SaaS
  • SaaSHub - Software Alternatives and Reviews
  • purego

  • I thought I had a piece of dust on my screen, but as I scrolled the dust scrolled: what do these 0xB7 characters do in the identifiers? Are they just "name mangling" to keep them from being exported or something?

    https://github.com/ebitengine/purego/blob/v0.2.0-alpha/sys_d...

    I noticed another 0xB7 character in a comment, and sure enough it seems to be part of the identifiers: https://github.com/ebitengine/purego/search?q=runtime%C2%B7c...

  • mach

    zig game engine & graphics toolkit

  • Very cool! I will definitely give this a try, I've been looking to build Go bindings to Mach[0] soon.

    How does this work around the stack size problem? IIRC the reason CGO overhead exists is at least partly because goroutines only have an ~8k stack to start with, and the C code doesn't know how to expand it-so CGO calls "must" first have the goroutine switched to an OS thread which has an ~8MB stack.

    One reason I think Go <-> Zig could be a fantastic pairing is that Zig plans to add a builtin which tells you the maximum stack size of a given function[1], so you could grow the goroutine stack to that size and then call Zig (or, since Zig an compile C code, you could also call C with a tiny shim to report the stack required?) and then eliminate the goroutine -> OS thread switching overhead.

    [0] https://github.com/hexops/mach

    [1] https://github.com/ziglang/zig/issues/157

  • InfluxDB

    Power Real-Time Data Analytics at Scale. Get real-time insights from all types of time series data with InfluxDB. Ingest, query, and analyze billions of data points in real-time with unbounded cardinality.

    InfluxDB logo
  • bud

    The Full-Stack Web Framework for Go

  • Awesome!

    This would be such a game-changer for server-side rendering Javascript in Go with V8.

    I'd love to integrate this into Bud[1].

    [1] https://github.com/livebud/bud

  • SWIG

    SWIG is a software development tool that connects programs written in C and C++ with a variety of high-level programming languages.

  • How is this any different than a mature tool such as SWIG (https://www.swig.org/)?

    I've used SWIG extensively with Python to call C code and import C headers for testing/tooling purposes.

  • rust-plus-golang

    Rust + Go — Call Rust code from Go using FFI

  • Oh then sure, I don't see why you couldn't use it with something like https://github.com/mediremi/rust-plus-golang

  • WorkOS

    The modern identity platform for B2B SaaS. The APIs are flexible and easy-to-use, supporting authentication, user identity, and complex enterprise features like SSO and SCIM provisioning.

    WorkOS logo
NOTE: The number of mentions on this list indicates mentions on common posts plus user suggested alternatives. Hence, a higher number means a more popular project.

Suggest a related project

Related posts