doc: add C? Go? Cgo! article
Originally published on The Go Programming Language Blog, March 17, 2011.
http://blog.golang.org/2011/03/c-go-cgo.html
Update #2547.
R=golang-dev, adg
CC=golang-dev
https://golang.org/cl/5777054
diff --git a/doc/progs/cgo1.go b/doc/progs/cgo1.go
new file mode 100644
index 0000000..3125cda
--- /dev/null
+++ b/doc/progs/cgo1.go
@@ -0,0 +1,23 @@
+// Copyright 2012 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+package rand
+
+// INCLUDE OMIT
+
+/*
+#include <stdlib.h>
+*/
+import "C"
+
+// STOP OMIT
+func Random() int {
+ return int(C.random())
+}
+
+// STOP OMIT
+func Seed(i int) {
+ C.srandom(C.uint(i))
+}
+
+// END OMIT
diff --git a/doc/progs/cgo2.go b/doc/progs/cgo2.go
new file mode 100644
index 0000000..f38473b
--- /dev/null
+++ b/doc/progs/cgo2.go
@@ -0,0 +1,21 @@
+// Copyright 2012 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+package rand2
+
+/*
+#include <stdlib.h>
+*/
+import "C"
+
+func Random() int {
+ var r C.long = C.random()
+ return int(r)
+}
+
+// STOP OMIT
+func Seed(i int) {
+ C.srandom(C.uint(i))
+}
+
+// END OMIT
diff --git a/doc/progs/cgo3.go b/doc/progs/cgo3.go
new file mode 100644
index 0000000..435fd04
--- /dev/null
+++ b/doc/progs/cgo3.go
@@ -0,0 +1,17 @@
+// Copyright 2012 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+package print
+
+// #include <stdio.h>
+// #include <stdlib.h>
+import "C"
+import "unsafe"
+
+func Print(s string) {
+ cs := C.CString(s)
+ C.fputs(cs, (*C.FILE)(C.stdout))
+ C.free(unsafe.Pointer(cs))
+}
+
+// END OMIT
diff --git a/doc/progs/cgo4.go b/doc/progs/cgo4.go
new file mode 100644
index 0000000..3808d62
--- /dev/null
+++ b/doc/progs/cgo4.go
@@ -0,0 +1,17 @@
+// Copyright 2012 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+package print
+
+// #include <stdio.h>
+// #include <stdlib.h>
+import "C"
+import "unsafe"
+
+func Print(s string) {
+ cs := C.CString(s)
+ defer C.free(unsafe.Pointer(cs))
+ C.fputs(cs, (*C.FILE)(C.stdout))
+}
+
+// END OMIT
diff --git a/doc/progs/run b/doc/progs/run
index 9d4669b..8b383e59 100755
--- a/doc/progs/run
+++ b/doc/progs/run
@@ -28,7 +28,14 @@
interface2
"
-all=$(echo $defer_panic_recover $effective_go $error_handling $law_of_reflection slices go1)
+c_go_cgo="
+ cgo1
+ cgo2
+ cgo3
+ cgo4
+"
+
+all=$(echo $defer_panic_recover $effective_go $error_handling $law_of_reflection $c_go_cgo slices go1)
for i in $all; do
go build $i.go