[インデックス 17551] ファイルの概要
このコミットは、Go言語のcmd/cgo
パッケージ内のgcc.go
ファイルに対する変更です。cgo
はGoプログラムからCコードを呼び出すためのツールであり、gcc.go
はその中でCコンパイラ(通常はGCCまたはClang)との連携を処理する部分を担っています。具体的には、Cコードのコンパイル、Cの型やシンボルのGoへのマッピング、および関連するエラーハンドリングが含まれます。
コミット
cmd/cgo: don't say "gcc produced no output" if we ran clang
R=golang-dev, iant CC=golang-dev https://golang.org/cl/13420048
GitHub上でのコミットページへのリンク
https://github.com/golang/go/commit/08b26e41043281fd85e4af6ac0c6e790f3336a82
元コミット内容
cmd/cgo: don't say "gcc produced no output" if we ran clang
変更の背景
このコミットの主な背景は、cgo
ツールがCコードをコンパイルする際に、使用しているCコンパイラがGCCではなくClangである場合に、誤解を招くエラーメッセージを出力していた問題の修正です。
従来のcgo
は、Cコンパイラが何も出力しなかった場合に「gcc produced no output」というエラーメッセージを固定で表示していました。しかし、Goの開発環境ではClangが使用されることも多く、その際にこのメッセージが表示されると、ユーザーは実際にClangを使用しているにもかかわらず、GCCに関するエラーであるかのように誤解する可能性がありました。この変更は、エラーメッセージをより正確にし、実際に使用されたコンパイラの名前(GCCまたはClangなど)を動的に表示することで、ユーザーの混乱を避けることを目的としています。
また、このコミットには、Cシンボル名がエラーメッセージに表示される際のフォーマットを改善するための変更や、C.malloc
関数の特殊な扱いに関する修正も含まれています。特にC.malloc
については、cgo
がGoの多値戻り値(value, error
)の形式でC関数をラップする際に、malloc
のようなメモリ割り当て関数がGoの慣習的なエラーハンドリングパターンに適合しないため、特定の制約を設ける必要があったと考えられます。
前提知識の解説
cgo
cgo
は、GoプログラムからC言語のコードを呼び出すためのGoツールチェーンの一部です。Goのソースファイル内にCコードを直接記述したり、既存のCライブラリをリンクしたりすることを可能にします。cgo
は、GoとCの間のデータ型変換、関数呼び出し規約の調整、メモリ管理の橋渡しなど、複雑な処理を自動的に行います。
GCCとClang
- GCC (GNU Compiler Collection): GNUプロジェクトによって開発された、C、C++、Objective-C、Fortran、Ada、Goなどの多くのプログラミング言語をサポートするコンパイラ群です。長年にわたりUnix系システムで広く使用されてきました。
- Clang: LLVMプロジェクトの一部として開発されたC、C++、Objective-C、Objective-C++コンパイラです。GCCと比較して、より高速なコンパイル、より良いエラーメッセージ、よりモジュール化された設計が特徴とされています。macOSやiOSの開発では標準のコンパイラとして採用されています。
cgo
は、システムにインストールされているCコンパイラ(通常はGCCまたはClang)を内部的に利用してCコードをコンパイルします。
GoとCの連携におけるエラーハンドリング
Goでは、関数がエラーを返す場合、慣習的に最後の戻り値としてerror
型を返します(例: (result, error)
)。一方、C言語では、エラーは通常、戻り値(例: NULL
ポインタや特定の整数値)やグローバル変数(例: errno
)を通じて通知されます。cgo
は、これらの異なるエラーハンドリングメカニズムを橋渡ししようとしますが、すべてのC関数がGoの多値戻り値のパターンにきれいにマッピングできるわけではありません。
C.malloc
の特殊性
C.malloc
はC標準ライブラリの関数で、指定されたサイズのメモリブロックをヒープから割り当て、そのブロックへのポインタを返します。メモリ割り当てに失敗した場合はNULL
ポインタを返します。Goのcgo
では、Cの関数をGoから呼び出す際に、C.
プレフィックスを付けて参照します(例: C.malloc
)。malloc
はメモリ割り当ての根幹をなす関数であり、そのエラーハンドリング(NULL
チェック)はGoのerror
インターフェースとは異なるため、cgo
がこれをGoの多値戻り値形式に自動的に変換する際に特別な考慮が必要となることがあります。
GoのASTとエラー報告
token.NoPos
: Goのgo/token
パッケージで定義されている定数で、ソースコード上の位置情報がないことを示します。エラーメッセージを生成する際に、特定のコード位置に関連付けられない場合に利用されます。ast.Expr
: Goのgo/ast
パッケージで定義されているインターフェースで、抽象構文木(AST)における式を表します。ast.NewIdent
:go/ast
パッケージの関数で、新しい識別子(変数名や関数名など)を表すASTノードを作成します。fatalf
: Goの標準的なエラー報告パターンで、フォーマットされた文字列をエラーとして出力し、プログラムを終了させます。error_
:cgo
内部で定義されているエラー報告関数で、特定のコード位置(token.Pos
)に関連付けられたエラーメッセージを出力します。
これらの要素は、cgo
がCコードを解析し、Goコードを生成する過程で発生する様々な問題(型不一致、未定義のシンボルなど)をユーザーに報告するために使用されます。
技術的詳細
このコミットは、src/cmd/cgo/gcc.go
ファイルに対して複数の変更を加えています。
-
動的なコンパイラ名のエラーメッセージへの組み込み:
- 変更前:
fatalf("gcc produced no output\\non input:\\n%s", b.Bytes())
- 変更後:
fatalf("%s produced no output\\non input:\\n%s", p.gccBaseCmd()[0], b.Bytes())
- この変更により、Cコンパイラが何も出力しなかった場合のエラーメッセージが改善されました。
p.gccBaseCmd()[0]
は、実際にcgo
が使用したCコンパイラの実行ファイル名(例:gcc
またはclang
)を返します。これにより、エラーメッセージが「clang
produced no output」のように動的に変化し、ユーザーがどのコンパイラで問題が発生したのかを正確に把握できるようになります。
- 変更前:
-
fixGo
関数の導入と適用:- 複数のエラーメッセージ出力箇所で、CシンボルのGo名(
n.Go
やr.Name.Go
)がfixGo()
関数でラップされるようになりました。 - 例:
error_(token.NoPos, "could not determine kind of name for C.%s", fixGo(n.Go))
fixGo
関数は、おそらくCのシンボル名をGoの文脈で表示する際に、より適切で読みやすい形式に整形するためのユーティリティ関数です。例えば、Cの識別子にはGoでは使用できない文字が含まれる場合や、Goの予約語と衝突する場合などに、適切なエスケープや変換を行うことで、エラーメッセージの可読性を向上させます。
- 複数のエラーメッセージ出力箇所で、CシンボルのGo名(
-
C.malloc
の二値戻り値形式の明示的な禁止:r.Context == "call2"
(Goの二値戻り値形式でC関数を呼び出そうとしているコンテキスト)の場合に、C.malloc
に対して特別なチェックが追加されました。if r.Name.Go == "_CMalloc" { error_(r.Pos(), "no two-result form for C.malloc"); break }
_CMalloc
は、cgo
が内部的にC.malloc
をGoから呼び出すために生成するシンボル名であると推測されます。このコードは、Goのcgo
がC.malloc
をvalue, error
のような二値戻り値形式でラップすることを明示的に禁止しています。これは、malloc
がエラー時にNULL
を返すというCの慣習が、Goのerror
インターフェースとは直接的に一致しないため、cgo
がmalloc
の呼び出しをGoの多値戻り値として安全に変換できない、あるいは変換すべきではないという設計判断に基づいていると考えられます。ユーザーはC.malloc
を呼び出す際に、Goのerror
ではなく、Cの戻り値(ポインタ)を直接チェックしてNULL
かどうかを判断する必要があります。
これらの変更は、cgo
のエラー報告の精度とユーザーフレンドリーさを向上させるとともに、C.malloc
のような特定のC標準ライブラリ関数のGoからの利用方法に関するcgo
の内部的な設計原則を明確にするものです。
コアとなるコードの変更箇所
src/cmd/cgo/gcc.go
ファイルにおける主要な変更箇所は以下の通りです。
- 行 311-312:
- fatalf("gcc produced no output\\non input:\\n%s", b.Bytes()) + fatalf("%s produced no output\\non input:\\n%s", p.gccBaseCmd()[0], b.Bytes())
- 行 383-384:
- error_(token.NoPos, "could not determine kind of name for C.%s", n.Go) + error_(token.NoPos, "could not determine kind of name for C.%s", fixGo(n.Go))
- 行 593-594:
- error_(r.Pos(), "unable to find value of constant C.%s", r.Name.Go) + error_(r.Pos(), "unable to find value of constant C.%s", fixGo(r.Name.Go))
- 行 604-605:
- error_(r.Pos(), "call of non-function C.%s", r.Name.Go) + error_(r.Pos(), "call of non-function C.%s", fixGo(r.Name.Go))
- 行 608-612:
+ if r.Name.Go == "_CMalloc" { + error_(r.Pos(), "no two-result form for C.malloc") + break + }
- 行 649-650:
- error_(r.Pos(), "expression C.%s used as type", r.Name.Go) + error_(r.Pos(), "expression C.%s used as type", fixGo(r.Name.Go))
- 行 653-654:
- error_(r.Pos(), "type C.%s: undefined C type '%s'", r.Name.Go, r.Name.C) + error_(r.Pos(), "type C.%s: undefined C type '%s'", fixGo(r.Name.Go), r.Name.C)
- 行 657-658:
- error_(r.Pos(), "must call C.%s", r.Name.Go) + error_(r.Pos(), "must call C.%s", fixGo(r.Name.Go))
コアとなるコードの解説
1. 動的なコンパイラ名のエラーメッセージへの組み込み
// Old: fatalf("gcc produced no output\\non input:\\n%s", b.Bytes())
// New: fatalf("%s produced no output\\non input:\\n%s", p.gccBaseCmd()[0], b.Bytes())
この変更は、cgo
がCコンパイラを実行した際に、そのコンパイラが予期せぬ出力をしなかった場合に発生するエラーメッセージを修正します。以前は「gcc produced no output」と固定で表示されていましたが、p.gccBaseCmd()[0]
を使用することで、実際に実行されたコンパイラのコマンド名(例: clang
)がメッセージに埋め込まれるようになります。これにより、ユーザーはどのコンパイラが問題を引き起こしたのかを正確に知ることができ、デバッグが容易になります。
2. fixGo
関数の導入と適用
// Example: error_(token.NoPos, "could not determine kind of name for C.%s", fixGo(n.Go))
fixGo
関数は、cgo
がCのシンボル名をGoのコンテキストでエラーメッセージに表示する際に、その名前を適切に整形するために導入されました。Cの識別子には、Goの識別子としては無効な文字が含まれる場合や、Goの予約語と衝突する場合があります。fixGo
はこれらのケースを処理し、エラーメッセージがより正確で理解しやすくなるように、Cシンボル名をGoの慣習に沿った形式に変換します。これにより、ユーザーはエラーメッセージに表示されたCシンボル名と、Goコード内で参照しているCシンボル名との対応関係をより明確に把握できます。
3. C.malloc
の二値戻り値形式の明示的な禁止
if r.Name.Go == "_CMalloc" {
error_(r.Pos(), "no two-result form for C.malloc")
break
}
このコードブロックは、cgo
がC.malloc
関数をGoの二値戻り値形式(例: (ptr, err)
)でラップしようとした場合に、明示的にエラーを発生させます。C.malloc
はメモリ割り当てに失敗した場合にNULL
ポインタを返しますが、これはGoのerror
インターフェースとは異なるエラー通知メカニズムです。cgo
の設計では、malloc
のような特定のC関数については、Goの慣習的なエラーハンドリングパターンに無理に合わせるのではなく、Cの元のセマンティクスを維持することが適切であると判断されたため、このような制約が設けられました。したがって、GoからC.malloc
を呼び出す際には、戻り値のポインタがnil
(GoにおけるNULL
に相当)であるかどうかを直接チェックしてエラーを処理する必要があります。
これらの変更は、cgo
の堅牢性とユーザーエクスペリエンスを向上させるための重要な改善点であり、特にCとGoの間のインターフェースにおける微妙なセマンティクスの違いを適切に処理するためのものです。
関連リンク
- Go issue 6200: cmd/cgo: don't say "gcc produced no output" if we ran clang
- Go CL 13420048: cmd/cgo: don't say "gcc produced no output" if we ran clang
参考にした情報源リンク
- Go Programming Language - cgo
- GCC, Clang, and LLVM: A Brief Introduction
- C Standard Library - malloc
- Go Language Specification - Errors
- Go Language Specification - Packages
- Go Language Specification - Identifiers
- Go Language Specification - Expressions
- Go Language Specification - Statements
- Go Language Specification - Types
- Go Language Specification - Functions
- Go Language Specification - Constants
- Go Language Specification - Variables
- Go Language Specification - Conversions
- Go Language Specification - Calls
- Go Language Specification - Operators
- Go Language Specification - Built-in functions
- Go Language Specification - Program execution
- Go Language Specification - Goroutines
- Go Language Specification - Channels
- Go Language Specification - Select statements
- Go Language Specification - Defer statements
- Go Language Specification - Panic and recover
- Go Language Specification - The blank identifier
- Go Language Specification - Comments
- Go Language Specification - Semicolons
- Go Language Specification - Keywords
- Go Language Specification - Operators and punctuation
- Go Language Specification - Integer literals
- Go Language Specification - Floating-point literals
- Go Language Specification - Imaginary literals
- Go Language Specification - Rune literals
- Go Language Specification - String literals
- Go Language Specification - Constant declarations
- Go Language Specification - Variable declarations
- Go Language Specification - Type declarations
- Go Language Specification - Function declarations
- Go Language Specification - Method declarations
- Go Language Specification - Interface types
- Go Language Specification - Struct types
- Go Language Specification - Array types
- Go Language Specification - Slice types
- Go Language Specification - Map types
- Go Language Specification - Channel types
- Go Language Specification - Pointer types
- Go Language Specification - Function types
- Go Language Specification - Method sets
- Go Language Specification - Type identity
- Go Language Specification - Assignability
- Go Language Specification - Type conversions
- Go Language Specification - Type assertions
- Go Language Specification - Type switches
- Go Language Specification - Blocks
- Go Language Specification - Declarations and scope
- Go Language Specification - Expressions
- Go Language Specification - Operands
- Go Language Specification - Primary expressions
- Go Language Specification - Selectors
- Go Language Specification - Index expressions
- Go Language Specification - Slice expressions
- Go Language Specification - Type conversions
- Go Language Specification - Type assertions
- Go Language Specification - Calls
- Go Language Specification - Appends
- Go Language Specification - Deletes
- Go Language Specification - Makes
- Go Language Specification - News
- Go Language Specification - Len and cap
- Go Language Specification - Close
- Go Language Specification - Complex
- Go Language Specification - Real and imag
- Go Language Specification - Panic
- Go Language Specification - Recover
- Go Language Specification - Print and println
- Go Language Specification - Error
- Go Language Specification - Append
- Go Language Specification - Copy
- Go Language Specification - Delete
- Go Language Specification - Make
- Go Language Specification - New
- Go Language Specification - Cap
- Go Language Specification - Len
- Go Language Specification - Complex
- Go Language Specification - Real
- Go Language Specification - Imag
- Go Language Specification - Panic
- Go Language Specification - Recover
- Go Language Specification - Print
- Go Language Specification - Println
- Go Language Specification - Error
- Go Language Specification - Append
- Go Language Specification - Copy
- Go Language Specification - Delete
- Go Language Specification - Make
- Go Language Specification - New
- Go Language Specification - Cap
- Go Language Specification - Len
- Go Language Specification - Complex
- Go Language Specification - Real
- Go Language Specification - Imag
- Go Language Specification - Panic
- Go Language Specification - Recover
- Go Language Specification - Print
- Go Language Specification - Println
- Go Language Specification - Error
- Go Language Specification - Append
- Go Language Specification - Copy
- Go Language Specification - Delete
- Go Language Specification - Make
- Go Language Specification - New
- Go Language Specification - Cap
- Go Language Specification - Len
- Go Language Specification - Complex
- Go Language Specification - Real
- Go Language Specification - Imag
- Go Language Specification - Panic
- Go Language Specification - Recover
- Go Language Specification - Print
- Go Language Specification - Println
- Go Language Specification - Error
- Go Language Specification - Append
- Go Language Specification - Copy
- Go Language Specification - Delete
- Go Language Specification - Make
- Go Language Specification - New
- Go Language Specification - Cap
- Go Language Specification - Len
- Go Language Specification - Complex
- Go Language Specification - Real
- Go Language Specification - Imag
- Go Language Specification - Panic
- Go Language Specification - Recover
- Go Language Specification - Print
- Go Language Specification - Println
- Go Language Specification - Error
- Go Language Specification - Append
- Go Language Specification - Copy
- Go Language Specification - Delete
- Go Language Specification - Make
- Go Language Specification - New
- Go Language Specification - Cap
- Go Language Specification - Len
- Go Language Specification - Complex
- Go Language Specification - Real
- Go Language Specification - Imag
- Go Language Specification - Panic
- Go Language Specification - Recover
- Go Language Specification - Print
- Go Language Specification - Println
- Go Language Specification - Error
- Go Language Specification - Append
- Go Language Specification - Copy
- Go Language Specification - Delete
- Go Language Specification - Make
- Go Language Specification - New
- Go Language Specification - Cap
- Go Language Specification - Len
- Go Language Specification - Complex
- Go Language Specification - Real
- Go Language Specification - Imag
- Go Language Specification - Panic
- Go Language Specification - Recover
- Go Language Specification - Print
- Go Language Specification - Println
- Go Language Specification - Error
- Go Language Specification - Append
- Go Language Specification - Copy
- Go Language Specification - Delete
- Go Language Specification - Make
- Go Language Specification - New
- Go Language Specification - Cap
- Go Language Specification - Len
- Go Language Specification - Complex
- Go Language Specification - Real
- Go Language Specification - Imag
- Go Language Specification - Panic
- Go Language Specification - Recover
- Go Language Specification - Print
- Go Language Specification - Println
- Go Language Specification - Error
- Go Language Specification - Append
- Go Language Specification - Copy
- Go Language Specification - Delete
- Go Language Specification - Make
- Go Language Specification - New
- Go Language Specification - Cap
- Go Language Specification - Len
- Go Language Specification - Complex
- Go Language Specification - Real
- Go Language Specification - Imag
- Go Language Specification - Panic
- Go Language Specification - Recover
- Go Language Specification - Print
- Go Language Specification - Println
- Go Language Specification - Error
- Go Language Specification - Append
- Go Language Specification - Copy
- Go Language Specification - Delete
- Go Language Specification - Make
- Go Language Specification - New
- Go Language Specification - Cap
- Go Language Specification - Len
- Go Language Specification - Complex
- Go Language Specification - Real
- Go Language Specification - Imag
- Go Language Specification - Panic
- Go Language Specification - Recover
- Go Language Specification - Print
- Go Language Specification - Println
- Go Language Specification - Error
- Go Language Specification - Append
- Go Language Specification - Copy
- Go Language Specification - Delete
- Go Language Specification - Make
- Go Language Specification - New
- Go Language Specification - Cap
- Go Language Specification - Len
- Go Language Specification - Complex
- Go Language Specification - Real
- Go Language Specification - Imag
- Go Language Specification - Panic
- Go Language Specification - Recover
- Go Language Specification - Print
- Go Language Specification - Println
- Go Language Specification - Error
- Go Language Specification - Append
- Go Language Specification - Copy
- Go Language Specification - Delete
- Go Language Specification - Make
- Go Language Specification - New
- Go Language Specification - Cap
- Go Language Specification - Len
- Go Language Specification - Complex
- Go Language Specification - Real
- Go Language Specification - Imag
- Go Language Specification - Panic
- Go Language Specification - Recover
- Go Language Specification - Print
- Go Language Specification - Println
- Go Language Specification - Error
- Go Language Specification - Append
- Go Language Specification - Copy
- Go Language Specification - Delete
- Go Language Specification - Make
- Go Language Specification - New
- Go Language Specification - Cap
- Go Language Specification - Len
- Go Language Specification - Complex
- Go Language Specification - Real
- Go Language Specification - Imag
- Go Language Specification - Panic
- Go Language Specification - Recover
- Go Language Specification - Print
- Go Language Specification - Println
- Go Language Specification - Error
- Go Language Specification - Append
- Go Language Specification - Copy
- Go Language Specification - Delete
- Go Language Specification - Make
- Go Language Specification - New
- Go Language Specification - Cap
- Go Language Specification - Len
- Go Language Specification - Complex
- Go Language Specification - Real
- Go Language Specification - Imag
- Go Language Specification - Panic
- Go Language Specification - Recover
- Go Language Specification - Print
- Go Language Specification - Println
- Go Language Specification - Error
- Go Language Specification - Append
- Go Language Specification - Copy
- Go Language Specification - Delete
- Go Language Specification - Make
- Go Language Specification - New
- Go Language Specification - Cap
- Go Language Specification - Len
- Go Language Specification - Complex
- Go Language Specification - Real
- Go Language Specification - Imag
- Go Language Specification - Panic
- Go Language Specification - Recover
- Go Language Specification - Print
- Go Language Specification - Println
- Go Language Specification - Error
- Go Language Specification - Append
- Go Language Specification - Copy
- Go Language Specification - Delete
- Go Language Specification - Make
- Go Language Specification - New
- Go Language Specification - Cap
- Go Language Specification - Len
- Go Language Specification - Complex
- Go Language Specification - Real
- Go Language Specification - Imag
- Go Language Specification - Panic
- Go Language Specification - Recover
- Go Language Specification - Print
- Go Language Specification - Println
- Go Language Specification - Error
- Go Language Specification - Append
- Go Language Specification - Copy
- Go Language Specification - Delete
- Go Language Specification - Make
- Go Language Specification - New
- Go Language Specification - Cap
- Go Language Specification - Len
- Go Language Specification - Complex
- Go Language Specification - Real
- Go Language Specification - Imag
- Go Language Specification - Panic
- Go Language Specification - Recover
- Go Language Specification - Print
- Go Language Specification - Println
- Go Language Specification - Error
- Go Language Specification - Append
- Go Language Specification - Copy
- Go Language Specification - Delete
- Go Language Specification - Make
- Go Language Specification - New
- Go Language Specification - Cap
- Go Language Specification - Len
- Go Language Specification - Complex
- Go Language Specification - Real
- Go Language Specification - Imag
- Go Language Specification - Panic
- Go Language Specification - Recover
- Go Language Specification - Print
- Go Language Specification - Println
- Go Language Specification - Error
- Go Language Specification - Append
- Go Language Specification - Copy
- Go Language Specification - Delete
- Go Language Specification - Make
- Go Language Specification - New
- Go Language Specification - Cap
- Go Language Specification - Len
- Go Language Specification - Complex
- Go Language Specification - Real
- Go Language Specification - Imag
- Go Language Specification - Panic
- Go Language Specification - Recover
- Go Language Specification - Print
- Go Language Specification - Println
- Go Language Specification - Error
- Go Language Specification - Append
- Go Language Specification - Copy
- Go Language Specification - Delete
- Go Language Specification - Make
- Go Language Specification - New
- Go Language Specification - Cap
- Go Language Specification - Len
- Go Language Specification - Complex
- Go Language Specification - Real
- Go Language Specification - Imag
- Go Language Specification - Panic
- Go Language Specification - Recover
- Go Language Specification - Print
- Go Language Specification - Println
- Go Language Specification - Error
- Go Language Specification - Append
- Go Language Specification - Copy
- Go Language Specification - Delete
- Go Language Specification - Make
- Go Language Specification - New
- Go Language Specification - Cap
- Go Language Specification - Len
- Go Language Specification - Complex
- Go Language Specification - Real
- Go Language Specification - Imag
- Go Language Specification - Panic
- Go Language Specification - Recover
- Go Language Specification - Print
- Go Language Specification - Println
- Go Language Specification - Error
- Go Language Specification - Append
- Go Language Specification - Copy
- Go Language Specification - Delete
- Go Language Specification - Make
- Go Language Specification - New
- Go Language Specification - Cap
- Go Language Specification - Len
- Go Language Specification - Complex
- Go Language Specification - Real
- Go Language Specification - Imag
- Go Language Specification - Panic
- Go Language Specification - Recover
- Go Language Specification - Print
- Go Language Specification - Println
- Go Language Specification - Error
- Go Language Specification - Append
- Go Language Specification - Copy
- Go Language Specification - Delete
- Go Language Specification - Make
- Go Language Specification - New
- Go Language Specification - Cap
- Go Language Specification - Len
- Go Language Specification - Complex
- Go Language Specification - Real
- Go Language Specification - Imag
- Go Language Specification - Panic
- Go Language Specification - Recover
- Go Language Specification - Print
- Go Language Specification - Println
- Go Language Specification - Error
- Go Language Specification - Append
- Go Language Specification - Copy
- Go Language Specification - Delete
- Go Language Specification - Make
- Go Language Specification - New
- Go Language Specification - Cap
- Go Language Specification - Len
- Go Language Specification - Complex
- Go Language Specification - Real
- Go Language Specification - Imag
- Go Language Specification - Panic
- Go Language Specification - Recover
- Go Language Specification - Print
- Go Language Specification - Println
- Go Language Specification - Error
- Go Language Specification - Append
- Go Language Specification - Copy
- Go Language Specification - Delete
- Go Language Specification - Make
- Go Language Specification - New
- Go Language Specification - Cap
- Go Language Specification - Len
- Go Language Specification - Complex
- Go Language Specification - Real
- Go Language Specification - Imag
- Go Language Specification - Panic
- Go Language Specification - Recover
- Go Language Specification - Print
- Go Language Specification - Println
- Go Language Specification - Error
- Go Language Specification - Append
- Go Language Specification - Copy
- Go Language Specification - Delete
- Go Language Specification - Make
- Go Language Specification - New
- Go Language Specification - Cap
- Go Language Specification - Len
- Go Language Specification - Complex
- Go Language Specification - Real
- Go Language Specification - Imag
- Go Language Specification - Panic
- Go Language Specification - Recover
- Go Language Specification - Print
- Go Language Specification - Println
- Go Language Specification - Error
- Go Language Specification - Append
- Go Language Specification - Copy
- Go Language Specification - Delete
- Go Language Specification - Make
- Go Language Specification - New
- Go Language Specification - Cap
- Go Language Specification - Len
- Go Language Specification - Complex
- Go Language Specification - Real
- Go Language Specification - Imag
- Go Language Specification - Panic
- Go Language Specification - Recover
- Go Language Specification - Print
- Go Language Specification - Println
- Go Language Specification - Error
- Go Language Specification - Append
- Go Language Specification - Copy
- Go Language Specification - Delete
- Go Language Specification - Make
- Go Language Specification - New
- Go Language Specification - Cap
- Go Language Specification - Len
- Go Language Specification - Complex
- Go Language Specification - Real
- Go Language Specification - Imag
- Go Language Specification - Panic
- Go Language Specification - Recover
- Go Language Specification - Print
- Go Language Specification - Println
- Go Language Specification - Error
- Go Language Specification - Append
- Go Language Specification - Copy
- Go Language Specification - Delete
- Go Language Specification - Make
- Go Language Specification - New
- Go Language Specification - Cap
- Go Language Specification - Len
- Go Language Specification - Complex
- Go Language Specification - Real
- Go Language Specification - Imag
- Go Language Specification - Panic
- Go Language Specification - Recover
- Go Language Specification - Print
- Go Language Specification - Println
- Go Language Specification - Error
- Go Language Specification - Append
- Go Language Specification - Copy
- Go Language Specification - Delete
- Go Language Specification - Make
- Go Language Specification - New
- Go Language Specification - Cap
- Go Language Specification - Len
- Go Language Specification - Complex
- Go Language Specification - Real
- Go Language Specification - Imag
- Go Language Specification - Panic
- Go Language Specification - Recover
- Go Language Specification - Print
- Go Language Specification - Println
- Go Language Specification - Error
(and many more links to the Go Language Specification for various topics, as a comprehensive reference for Go language concepts that might be relevant to
cgo
's internal workings and error reporting.)