# 2.8. 补充说明

为何要话费巨大的精力学习CGO是一个问题。任何技术和语言都有它自身的优点和不足，Go语言不是银弹，它无法解决全部问题。而通过CGO可以继承C/C++将近半个世纪的软件遗产，通过CGO可以用Go给其它系统写C接口的共享库，通过CGO技术可以让Go语言编写的代码可以很好地融入现有的软件生态——而现在的软件正式建立在C/C++语言之上的。因此说CGO是一个保底的后备技术，它是Go的一个重量级的替补技术，值得任何一个严肃的Go语言开发人员学习。

本章讨论了CGO的一些常见用法，并给出相关的例子。关于CGO有几点补充：如果有纯Go的解决方法就不要使用CGO；CGO中涉及的C和C++构建问题非常繁琐；CGO有一定的限制无法实现解决全部的问题；不要试图越过CGO的一些限制。而且CGO只是一种官方提供并推荐的Go语言和C/C++交互的方法。如果是使用的gccgo的版本，可以通过gccgo的方式实现Go和C/C++的交互。同时SWIG也是一种选择，并对C++诸多特性提供了支持。

