출처: http://golang.jp/pkg/runtime 

import "runtime"

runtime 패키지에는 고루틴 제어 기능 등 Go 언어의 런타임 시스템과 상호 작용하는 작업을 다룬다.

또한 reflect 패키지를 이용한 저 레벨의 타입 정보도 다룬다. 런타임 형식 시스템으로의 프로그래밍 인터페이스는 reflect 문서를 참조한다.

상수

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와 같은 형태의 인수를 하나만 잡고, 반환 값을 반환하지 않는 함수이어야 한다. 이 두 조건이 모두 충족되지 않을 때 SetFinalizer 프로그램을 도중에 종료한다.

종료자는 다음과 같은 순서로 동작한다.

A가 B를 참조하고, 쌍방이 종료자가 있고, 또 다른쪽에서는 도달 불가한 경우는 A의 종료자만 실행된다. 이 후 A가 해제되면 B의 종료가 실행된다. 순환 구조에 종료자를 가지는 블록이 존재하는 경우, 이 주기가 가비지 수집되는 보장은 되지 않으며 종료자가 실행되는 것도 보증되지 않는다. 이것은 종속성 순서가 정해지지 않기 때문이다.

x가 도달 할 수 없게 된 후 x의 종료자는 약간 늦게 실행되도록 예약된다. 프로그램이 종료하기 전에 종료자가 반드시 실행된다는 보장이 없으므로, 종료자는 일반적으로 장기 실행 프로그램의 비 메모리 자원을 해제하는 목적으로만 사용된다. 예를 들어 os.File 객체는 프로그램이 Close를 호출하지 않고 이 오브젝트를 파기 할 때 내부적으로 가지는 운영 체제의 파일 서술자를 닫기 위해 종료자가 사용되지만 bufio.Writer 처럼 메모리 내부 I/O를 버퍼링하고 있는 객체의 flash를 종료자에 의존하게 되면 프로그램 종료 시 버퍼가 flash 되지 않기 때문에 잘못된 사용 방법이다.

프로그램 내에서 모든 종료자는 동일한 고루틴에서 실행된다. 따라서 종료자 처리 시간이 길어지는 경우에는 새로운 고루틴을 시작하고 거기서 처리를 실시 할 필요가 있다.

   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은 Bool을 나타낸다.

   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 형을 나타냅니다.