import "runtime"

runtimeパッケージには、ゴルーチンの制御関数など、Go言語のランタイムシステムと対話する操作を扱っています。またreflectパッケージを利用した低レベルの型情報も扱っています。ランタイム型システムへのプログラミングインタフェースについてはreflectのドキュメントを参照ください。

パッケージファイル

chan_defs.go debug.go error.go extern.go hashmap_defs.go iface_defs.go malloc_defs.go mheapmap32_defs.go mheapmap64_defs.go runtime_defs.go sig.go softfloat64.go type.go

定数

GOARCHは、Goツリーがターゲットとするアーキテクチャです。: 386, amd64, arm

const GOARCH string = theGoarch

GOOSは、Goツリーがターゲットとするオペレーティングシステムです。:  darwin, freebsd, linuxなど

const GOOS string = theGoos

変数

MemProfileRateは、メモリプロファイルに記録・報告されるメモリアロケーションの割合を制御します。プロファイラは、MemProfileRateバイトをアロケートするごとに平均一回、サンプルを取得します。

アロケートしたすべてのブロックをプロファイルに含めるときはMemProfileRateに1をセットしてください。また、プロファイル機能を完全にoffにするにはMemProfileRateに0をセットしてください。

このメモリプロファイルを処理するツールは、プログラムの生存中にプロファイル率の値が現在値のまま変わることはないとみなします。そのためこのメモリプロファイル率を変更するプログラムは、できるだけ早いうちに一度だけ変更を行うべきです。(たとえばmainの最初など)

var MemProfileRate int = 512 * 1024

Alloc関数

func Alloc(uintptr) *byte

Allocは、指定したブロックサイズのアロケーションを行います。これはテストとデバッグ目的だけに使用してください。

Breakpoint関数

func Breakpoint()

Breakpoint()は、ブレークポイントトラップを実行します。

Caller関数

func Caller(skip int) (pc uintptr, file string, line int, ok bool)

Callerは、呼び出したゴルーチンスタック上で実行している関数のファイルと行番号情報をレポートします。引数skipは、引き上げるスタックフレーム数であり、これに0を指定したときはCallerを呼び出したスタックレームになります。戻り値は、プログラムカウンタ、ファイル名、ファイル内で呼び出した箇所の行番号をレポートします。情報を返せなかったときは論理値okにfalseが返ります。

Callers関数

func Callers(skip int, pc []uintptr) int

Callersは、呼び出したゴルーチンスタック上で実行している関数のプログラムカウンタをスライスpc内にセットします。引数skipには、記録する前にスキップするスタックフレーム数を指定します。これに0を指定したときはCallersを呼び出したスタックレームになります。この関数はpcに書き込んだ件数を返します。

Cgocalls関数

func Cgocalls() int64

Cgocallsは、カレントのプロセスでcgo呼び出しを行った回数を返します。

Free関数

func Free(*byte)

Freeは、指定したポインタ位置で開始しているブロックを開放します。これはテストとデバッグ目的だけに使用してください。

GC関数

func GC()

GCは、ガーベジコレクションを実行します。

GOMAXPROCS関数

func GOMAXPROCS(n int) int

GOMAXPROCSは、同時に最大で実行可能なCPU数をセットし、前に設定していた値を返します。n < 1のとき、現在の設定は変更されません。スケジューラが改善されたときには、この呼び出しは不要となります。

GOROOT関数

func GOROOT() string

GOROOTは、Goツリーのルートを返します。これはセットされていればGOROOT環境変数を使用し、セットされていなければGoをビルドした時のルートを使用します。

Goexit関数

func Goexit()

Goexitは、呼び出したゴルーチンを終了します。他のゴルーチンには影響を及ぼしません。Goexitはゴルーチンを終了させる前に、すべての遅延(defer)呼び出しを実行します。

Goroutines関数

func Goroutines() int32

Goroutinesは、現存するゴルーチンの数を返します。

Gosched関数

func Gosched()

Goschedはプロセッサーを明け渡し、他のゴルーチンが実行されるようにします。カレントのゴルーチンは中断されるのではなく、自動的に実行を再開します。

LockOSThread関数

func LockOSThread()

LockOSThreadは、オペレーティングシステムのカレントスレッドと、この関数を呼び出したゴルーチンを関連付けます。呼び出したゴルーチンが終了するか、もしくはUnlockOSThreadが呼び出されるまで、常にそのスレッド内で実行されます。一方、他のゴルーチンはそのスレッド内では実行されなくなります。LockOSThreadは、init関数内では使用できません。

Lookup関数

func Lookup(*byte) (*byte, uintptr)

Lookupは、指定したポインタを含んでいるブロックのベースとサイズを返します。これはテストとデバッグ目的だけに使用してください。

MemProfile関数

func MemProfile(p []MemProfileRecord, inuseZero bool) (n int, ok bool)

MemProfileは、nにカレントのメモリプロファイル内の記録数を返します。len(p) >= nのときはプロファイルをpにコピーし、n, trueを返します。len(p) < nのときはpは変更せずn, falseを返します。

inuseZeroがtrueのとき、プロファイルにはr.AllocBytes > 0かつr.AllocBytes == r.FreeBytesでないアロケーションの記録が含まれます。これはメモリが割り付けられたあと、すでに開放されランタイムに返された領域です。

Semacquire関数

func Semacquire(s *uint32)

Semacquireは、*s > 0になるまで待ち、その後、その値をアトミックにデクリメントします。これは同期ライブラリからの使用を想定した原始的なsleepルーチンであり、直接使用してはいけません。

Semrelease関数

func Semrelease(s *uint32)

Semreleaseは、*sをアトミックにインクリメントし、Semacquireでブロック中のゴルーチンへ通知を行います。これは同期ライブラリからの使用を想定した原始的なwakeupルーチンであり、直接使用してはいけません。

SetFinalizer関数

func SetFinalizer(x, f interface{})

SetFinalizerは、xにファイナライザーfをx関連付けます。ガーベジコレクタがファイナライザが関連付けられている到達不可ブロックを見つけると、関連付けをクリアし、f(x)を別のゴルーチンで実行します。新しいゴルーチンを作成することで、xは再度到達可能となりますが、ファイナライザは持ちません。このまま、SetFinalizerが再度呼び出されなければ、次回ガーベジコレクタがxが到達不可であることを見つけたときにxは開放されます。

SetFinalizer(x, nil)とすると、xに関連付けられているすべてのファイナライザがクリアされます。

引数xは、newを呼び出してアロケートしたオブジェクトへのポインタか、複合リテラルから取得したアドレスでなければなりません。引数fは、xと同じ型の引数をひとつだけとり、戻り値を返さない関数でなければなりません。これらの2つの条件がともに満たされないときは、SetFinalizerはプログラムを途中終了します。

ファイナライザは次の順序で動作します。AがBを参照しており、双方がファイナライザを持ち、また他からは到達不可であるときは、Aのファイナライザだけが実行されます。その後Aが開放されるとBのファイナライザが実行されます。サイクリック構造内にファイナライザを持つブロックが存在するときは、このサイクルがガーベジコレクションされるかは保証されず、またファイナライザが実行されることも保証されません。これは依存関係の順序が定まらないためです。

xが到達できなくなったあと、xのファイナライザは若干遅れて実行するようスケジュールされます。プログラムが終了する前にファイナライザが必ず実行されるという保証はないため、ファイナライザは一般的には長時間実行するプログラム内の非メモリリソースを開放するためにのみ使われます。たとえばos.Fileオブジェクトは、プログラムがCloseを呼び出さずにこのオブジェクトを破棄したときに、内部で持つオペレーティングシステムのファイルデスクプリタを閉じるためにファイナライザを利用しますが、bufio.Writerのようにメモリ内でI/Oをバッファリングしているオブジェクトのフラッシュをファイナライザに頼ってしまうと、プログラム終了時にバッファがフラッシュされないため誤った使い方です。

プログラム内では、すべてのファイナライザは同一のゴルーチン上で実行されます。そのためファイナライザの処理時間が長くなるときは、新たなゴルーチンを起動してそこで処理を行わせる必要があります。

TODO(rsc): allow f to have (ignored) return values

Siginit関数

func Siginit()

Siginitは、Sigrecvを使ったシグナル受信を有効化します。これは一般的に、初期化中に呼び出さなければなりません。

Signame関数

func Signame(sig int32) string

Signameは、シグナルを表す文字列を返します。不明なシグナルのときは”"が返ります。

Sigrecv関数

func Sigrecv() uint32

Sigrecvは、前回Sigrecvを呼び出した後に届いたシグナルのビットマスクを返します。この関数はひとつ以上のシグナルが届くまでの間ブロックします。

UnlockOSThread関数

func UnlockOSThread()

UnlockOSThreadは、この関数を呼び出したゴルーチンを固定していたオペレーティングシステムのスレッドから切り離します。呼び出したゴルーチンがLockOSThreadを呼び出していなかったときは何も行いません。

Version関数

func Version() string

Versionは、Goツリーのバージョン文字列を返します。これは連番と、可能であれば”release.2010-03-04″といったリリースタグが含まれます。後ろの+記号は、ビルド時にツリーがローカルで変更されていたことを表します。

ArrayType型

ArrayTypeは、固定の配列型を表します。

type ArrayType struct {
    // contains unexported fields
}

BoolType型

BoolTypeは、論理値型を表します。

type BoolType commonType

ChanDir型

ChanDirは、チャネル型の方向を表します。

type ChanDir int
const (
    RecvDir ChanDir             = 1 << iota // <-chan
    SendDir                                 // chan<-
    BothDir = RecvDir | SendDir             // chan
)

ChanType型

ChanTypeは、チャネル型を表します。

type ChanType struct {
    // contains unexported fields
}

ComplexType型

ComplexTypeは、complex型を表します。

type ComplexType commonType

Error型

Errorインタフェースは、ランタイムエラーを識別します。

type Error interface {
    String() string

    // RuntimeErrorは何もしない関数ですが、
    // 通常のos.Errorsが、ランタイムエラーであるかどうかを
    // 識別するために役立ちます。型がRuntimeErrorメソッドを
    // 持っていればランタイムエラーです。
    RuntimeError()
}

FloatType型

FloatTypeは、float型を表します。

type FloatType commonType

Func型

type Func struct {
    // contains unexported fields
}

FuncForPC関数

func FuncForPC(pc uintptr) *Func

FuncForPCは、指定したプログラムカウンタを持つ関数の情報、もしくはnilを*Funcに返します。

(*Func) Entry関数

func (f *Func) Entry() uintptr

Entryは、関数のエントリアドレスを返します。

(*Func) FileLine関数

func (f *Func) FileLine(pc uintptr) (file string, line int)

FileLineは、プログラムカウンタpcと対応するファイル名とソースの行番号を返します。pcがf内のプログラムカウンタでないときは、結果は正確な値ではありません。

(*Func) Name関数

func (f *Func) Name() string

Nameは、関数名を返します。

FuncType型

FuncTypeは、関数型を表します。

type FuncType struct {
    // contains unexported fields
}

IntType型

IntTypeは、int型を表します。

type IntType commonType

InterfaceType型

InterfaceTypeは、インタフェース型を表します。

type InterfaceType struct {
    // contains unexported fields
}

Itable型

* Must match iface.c:/Itab and compilers. * メモ:このバージョンでは、リフレクションコードが使用されていますが、iface_defs.go内の別バージョンは、オリジナルのC言語版により近くなっています。

type Itable struct {
    Itype *Type // (*tab.inter).(*InterfaceType)は、インタフェース型
    Type  *Type

    Fn [100000]uintptr // 充分な大きさ
    // contains unexported fields
}

MapType型

MapTypeは、マップ型を表します。

type MapType struct {
    // contains unexported fields
}

MemProfileRecord型

MemProfileRecordは、特定の呼び出しシーケンス(スタックトレース)によってアロケートされ、生存中であるオブジェクトの情報です。

type MemProfileRecord struct {
    AllocBytes, FreeBytes     int64       // アロケート、および解放されたバイト数
    AllocObjects, FreeObjects int64       // アロケート、および解放されたオブジェクト数
    Stack0                    [32]uintptr // このレコードのスタックトレース。スタックの最後が先頭に格納
}

(*MemProfileRecord) InUseBytes関数

func (r *MemProfileRecord) InUseBytes() int64

InUseBytesは、使用しているバイト数を返します。(AllocBytes – FreeBytes)

(*MemProfileRecord) InUseObjects関数

func (r *MemProfileRecord) InUseObjects() int64

InUseObjectsは、使用中のオブジェクト数を返します。(AllocObjects – FreeObjects)

(*MemProfileRecord) Stack関数

func (r *MemProfileRecord) Stack() []uintptr

Stackは、r.Stack0に記録されているスタックトレースを返します。

MemStatsType型

type MemStatsType struct {
    // 一般統計
    // 更新時にロックはされないため、近似値です。
    Alloc      uint64 // アロケートされ、使用中のバイト数
    TotalAlloc uint64 // アロケート済みのバイト数(解放された数も含む)
    Sys        uint64 // システムから取得したバイト数(下のXxxSysの合計となるべき)
    Lookups    uint64 // ポインタの参照数
    Mallocs    uint64 // malloc数

    // 主要なヒープ割り当て統計
    HeapAlloc uint64 // ロケートされ、使用中のバイト数
    HeapSys   uint64 // システムから取得したバイト数
    HeapIdle  uint64 // アイドル中のバイト数
    HeapInuse uint64 // 非アイドル中のバイト数
    HeapObjects uint64 // アロケート済みオブジェクトの合計

    // 低レベル・固定サイズ構造アロケータの統計
    //	Inuseは、現在使用中のバイト数
    //	Sysは、システムから取得したバイト数
    StackInuse  uint64 // ブートストラップ スタック
    StackSys    uint64
    MSpanInuse  uint64 // mspan構造
    MSpanSys    uint64
    MCacheInuse uint64 // mcache構造
    MCacheSys   uint64
    MHeapMapSys uint64 // ヒープマップ
    BuckHashSys uint64 // バケットハッシュテーブルのプロファイリング

    // ガベージコレクタ統計
    NextGC   uint64
    PauseNs  uint64
    NumGC    uint32
    EnableGC bool
    DebugGC  bool

    // サイズ毎のアロケーション統計
    // 更新時にロックはされないため、近似値です。
    BySize [67]struct {
        Size    uint32
        Mallocs uint64
        Frees   uint64
    }
}

MemStatsは、メモリシステムについての統計情報を保持します。これらの統計情報の値は概算であり、それぞれ連動した更新はしていません。

var MemStats MemStatsType

PtrType型

PtrTypeは、ポインタ型を表します。

type PtrType struct {
    // contains unexported fields
}

SliceType型

SliceTypeは、スライス型を表します。

type SliceType struct {
    // contains unexported fields
}

StringType型

StringTypeは、文字列型を表します。

type StringType commonType

StructType型

StructTypeは、構造体型を表します。

type StructType struct {
    // contains unexported fields
}

Type型

空インタフェース値を作成できるのはコンパイル時だけです。(空以外のインタフェース値は、初期化によって作成されます) Typeは空インタフェースであるため、コンパイラはここにデータとして参照をレイアウトすることができます。

type Type interface{}

TypeAssertionError型

TypeAssertionErrorは、型アサーションに失敗した原因を明らかにします。

type TypeAssertionError struct {
    // contains unexported fields
}

(*TypeAssertionError) Asserted関数

func (e *TypeAssertionError) Asserted() Type

Assertedは、型アサーションの際に誤って指定した型を返します。

(*TypeAssertionError) Concrete関数

func (e *TypeAssertionError) Concrete() Type

Concreteは、失敗した型アサーションの実際の型を返します。インタフェース値がnilのときはConcreteはnilを返します。

(*TypeAssertionError) MissingMethod関数

func (e *TypeAssertionError) MissingMethod() string

型アサーションがインタフェース型に対して行われたとき、MissingMethodはそのインタフェース型を満たすために必要であるが実装されていないメソッド名を返します。該当するメソッドが複数存在するときは、そのうちの一つを返します。このときどれが返されるかは規定されていません。型アサーションがインタフェース型に対して行われていないときは空文字列が返ります。

(*TypeAssertionError) RuntimeError関数

func (*TypeAssertionError) RuntimeError()

(*TypeAssertionError) String関数

func (e *TypeAssertionError) String() string

UintType型

UintTypeは、uint型を表します。

type UintType commonType

UintptrType型

UintptrTypeは、uintptr型を表します。

type UintptrType commonType

UnsafePointerType型

UnsafePointerTypeは、unsafe.Pointer型を表します。

type UnsafePointerType commonType