GOKEN9CC

module
v0.0.0-...-e549ce5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 23, 2026 License: MIT

README

goken9cc

goken9cc is a portable, multi-architecture toolchain — C compilers, assemblers, and linkers — together with a minimalist C library, rooted in Ken Thompson's legendary work on the Plan 9 and Inferno operating systems. First extended by Go developers, this toolchain now brings cross-platform support for Linux, macOS, and Windows while preserving the simplicity, elegance, and efficiency of the original Plan 9 tools.

See https://www.youtube.com/watch?v=E3iUpyqKvgk for a presentation of the project.


News

  • Q3 2026 — v0.4 (in progress): a big unification release.
    • imported the arm and x86 toolchains (5a/5c/5l, 8a/8c/8l) from the Principia Softwarica project and fixed the many mismatches against the older kencc-derived variants (kept side by side as 5ak/8ak, etc.)
    • fix native macOS (Mach-O) output for amd64 and arm64 (6l/7l)
    • fix native Windows (PE) output for amd64 and x86 (6l/8l)
    • early WebAssembly backend (ea/ec/el) fully written by Claude Code
    • ported a large batch of 9front fixes (mostly Cinap lenrek work) into the mips and arm64 toolchains (va/vc/vl, 7a/7c/7l)
    • brought up riscv64 for real (it was only commented-out stubs before)
    • self-hosted libc.a derived from Plan 9 libc, built entirely by goken's own compilers with no gcc involved, for every Linux arch this project targets (arm64, amd64, 386, arm, mips, riscv, riscv64), with syscalls declared through a small Go-mksyscall.sh-inspired generator (see tests/c/hello_libc), and extended also to macOS and Windows
    • fixed the arm and mips emulators (5i/vi) so they actually run their Plan 9 hello-world tests
    • much richer test infra: tests now run for many architectures under qemu/Linux, and many operating systems with wine (for Windows) and Node (for wasm) all from Linux CI; also check output against expected.txt instead of just checking the build succeeds; new tests/s/variants and tests/c/variants compare the object files and executables produced by the principia vs. kencc lineages to catch mismatches
    • bootstrapped: you can compile goken using goken on arm64 (7a/7c/7l)
    • imported and brought up to date the alpha, powerpc, sparc, and m68k toolchains from Plan 9 4th edition supporting now ELF and Linux
  • Q2 2026 — v0.3: presented goken9cc at IWP9, the International Workshop on Plan 9.
  • Q1 2026 — v0.2: added Plan 9 pcc to compile legacy Unix programs (called APE in Plan 9); started using AddressSanitizer (configure -asan) to catch memory bugs in the toolchain itself; wrote up the project for an IWP9 paper submission.
  • Q4 2025 — v0.1: first working release — a Plan 9-style toolchain (compilers, assemblers, linkers for arm, x86, mips, and early riscv, plus an arm/mips emulator and the acid debugger) able to cross compile Principia Softwarica's own pc/pi operating system targets from Linux and macOS.
  • Q3 2025 — Beta: arm64 and arm32 ELF Linux binaries actually working; imported mk, rc, ed, and other core utilities from Principia Softwarica so the repo is self-contained.
  • Q2 2025 — Alpha: project started — forked the Go repository at its October 2010 commit, refocused on the C toolchain (keeping Go stuff for testing purpose), first (untested) imports of the mips (Plan 9), arm64 (Charles Forsyth), and riscv (Richard Miller) toolchains, first Docker/Nix/CI setup.

goken9cc's direct ancestor is fork-kencc, now deprecated in its favor:

  • 2025 — fork-kencc v0.4: added a Dockerfile and CI.

  • 2024 — fork-kencc v0.3: slow resume of the project with basic CI.

  • 2019 — 2024: Hiatus (working on https://semgrep.dev)

  • 2018 — fork-kencc v0.2: got it building also on Linux and Windows.

  • 2014 — fork-kencc v0.1: project started — forked the kencc toolchain from Plan 9 (actually from https://code.google.com/p/ken-cc/ which was forked from inferno which itself derived from Plan 9), keep just the x86 and arm toolchains, got it building on macOS, and did a big code reorganization.

See changes.txt for the detailed changelog.


Features

  • Portable: It can build on Linux, macOS, and Windows (WSL, Cygwin) (TODO Plan 9 and xv6) using gcc or clang or a bootstrapped version of itself, on 32 bits or 64 bits machines
  • Multi-OS support: Link C and assembly programs that can run on Linux, macOS, Windows, and Plan 9 (TODO xv6)
  • Multi-architecture support: Build C and assembly programs targeting the i386 (a.k.a. x86), amd64 (a.k.a. x86_64), arm, arm64 (a.k.a. aarch64), riscv (a.k.a. riscv32), riscv64, mips, alpha, sparc, powerpc, and m68k architectures, plus experimental WebAssembly (wasm) support
  • Cross-compilers: Build C programs targeting different platforms from different platforms (e.g., you can build from a Linux x86 machine a binary for macOS arm64)
  • Compact and efficient: A lightweight compiler toolchain designed for speed and simplicity.
  • Heritage: Based on the Plan 9 and Inferno OS compilers developed by Ken Thompson and others.
  • Go-era improvements: Enhanced and extended by contributors from the Go language community for multi-platform support.
  • Open and extensible: Designed to be easy to understand, modify, and integrate into new projects, thanks to its reasonable size and the use of Literate programming, which explains the code in depth (see https://principia-softwarica.org); it takes more than a license to make code truly open.

Getting Started

Building from source
git clone https://github.com/aryx/goken9cc.git
cd goken9cc
./configure
./scripts/build-mk.sh
./scripts/promote-mk.sh
. env.sh
mk
mk install

You can also play with the $ostype and $objtype environment variables for cross compiling.


Architecture Naming Convention

goken9cc, like Plan 9, uses single-character codes for architectures. Each tool is prefixed with this code:

Code Arch Compiler Assembler Linker Object ext
2 m68k 2c 2a 2l .2
5 arm 5c 5a 5l .5
6 amd64 6c 6a 6l .6
7 arm64 7c 7a 7l .7
8 i386 8c 8a 8l .8
e wasm ec ea el .e
i riscv ic ia il .i
j riscv64 jc ja jl .j
k sparc kc ka kl .k
q powerpc qc qa ql .q
v mips vc va vl .v
z alpha zc za zl .z

Pipeline: .c → compiler (Xc) → assembler (Xa) → linker (Xl) → X.out


History

This repository was originally a fork of the assemblers, linkers, and C compilers as well as supporting libraries (e.g., lib9, libmach, pkg/runtime) in the Go repository in October 2010 at this precise commit: https://github.com/golang/go/commit/99a10eff16b79cfb8ccf36e586532a40b17a203c (see pad.org for an explanation of why I forked at this precise commit).

The C toolchain that was part of the Go repository was actually itself a fork of the "kencc" toolchain in inferno-os at https://github.com/inferno-os/inferno-os (in the utils/ subdirectory) as well as code from the plan9port https://github.com/9fans/plan9port which both were themselves forks of the kencc toolchain in the plan9 operating system at https://github.com/plan9foundation/plan9

The main improvements in the Go repository to the C toolchain compared to the original kencc toolchain in Plan 9 were the support for other operating systems such as Linux, macOS, and Windows (and not just Plan9), with the management of binary formats such as ELF (for Linux), machO (for macOS), and PE (for Windows) as well as the management of syscalls to those different operating systems. Another nice improvement was the support for the DWARF debugging format so the generated binaries could be debugged using gdb (instead of just the Plan9 acid debugger).

This fork was then further extended to add more architectures such as arm64 (thanks to the work of Charles Forsyth) and riscv (thanks to the work of Richard Miller) that were not in the Go repo but scattered around in "kencc-derived" repositories.

More work was done then to make all of this work together, to support the latest Linux, macOS, and Windows to reach a point where one could use goken9cc to compile goken9cc itself on many architectures and many operating systems.

AI disclaimer

95% of the code in goken9cc was written by humans (mostly Ken Thompson, Rob Pike, Charles Forsyth, Richard Miller, and other Plan 9 contributors), and for the most part written more than 30 years ago. What I did was essentially to package those old toolchains together and then use AI to write the remaining 5% so that the toolchains could work not just on Plan 9 for Plan 9 but also on and for Linux, macOS, and Windows (imitating for the most part what was done by Go developers for the Go language).

All the clerical work of finding the right syscall numbers for each architecture and operating systems for the multiplatform C library in goken9cc (see lib_core/libc/{arch,syscall,os}) was done by Claude Code, inspired by what Go developers did for Go (see the GO/pkg/{syscall,runtime} directories).

The entire wasm backend was written by Claude Code.

Most of the architecture and operating system bugfixes were done by Claude Code.

Most of the code written by AI is clearly marked with a special claude: comment at the front and part of a commit authored by Claude code. You can use the scripts/ai_percentage.py to get authorship LOC statistics across the different directories in goken9cc.


Environment variables

build time: objtype ostype

run time: for all: GOROOT (used for "#9/..." paths) for mk: MKSHELL for rc: RCMAIN for yacc: YACCPAR

Directories

Path Synopsis
GO
C/cmd/5a
5a is a version of the Plan 9 assembler.
5a is a version of the Plan 9 assembler.
C/cmd/5c
5c is a version of the Plan 9 C compiler.
5c is a version of the Plan 9 C compiler.
C/cmd/5l
5l is a modified version of the Plan 9 linker.
5l is a modified version of the Plan 9 linker.
C/cmd/6a
6a is a version of the Plan 9 assembler.
6a is a version of the Plan 9 assembler.
C/cmd/6c
6c is a version of the Plan 9 C compiler.
6c is a version of the Plan 9 C compiler.
C/cmd/6l
6l is a modified version of the Plan 9 linker.
6l is a modified version of the Plan 9 linker.
C/cmd/8a
8a is a version of the Plan 9 assembler.
8a is a version of the Plan 9 assembler.
C/cmd/8c
8c is a version of the Plan 9 C compiler.
8c is a version of the Plan 9 C compiler.
C/cmd/8l
8l is a modified version of the Plan 9 linker.
8l is a modified version of the Plan 9 linker.
C/cmd/ar
Gopack is a variant of the Plan 9 ar tool.
Gopack is a variant of the Plan 9 ar tool.
C/cmd/cc
This directory contains the portable section of the Plan 9 C compilers.
This directory contains the portable section of the Plan 9 C compilers.
C/cmd/cov
Cov is a rudimentary code coverage tool.
Cov is a rudimentary code coverage tool.
C/cmd/ld
This directory contains the portable section of the Plan 9 C linkers.
This directory contains the portable section of the Plan 9 C linkers.
C/cmd/nm
Nm is a version of the Plan 9 nm command.
Nm is a version of the Plan 9 nm command.
C/cmd/prof
Prof is a rudimentary real-time profiler.
Prof is a rudimentary real-time profiler.
cmd/5g
5g is the version of the gc compiler for the ARM.
5g is the version of the gc compiler for the ARM.
cmd/6g
6g is the version of the gc compiler for the x86-64.
6g is the version of the gc compiler for the x86-64.
cmd/8g
8g is the version of the gc compiler for the x86.
8g is the version of the gc compiler for the x86.
cmd/godefs
Godefs is a bootstrapping tool for porting the Go runtime to new systems.
Godefs is a bootstrapping tool for porting the Go runtime to new systems.
cmd/gomake
The gomake command runs GNU make with an appropriate environment for using the conventional Go makefiles.
The gomake command runs GNU make with an appropriate environment for using the conventional Go makefiles.
cmd/gotest
Gotest is an automated testing tool for Go packages.
Gotest is an automated testing tool for Go packages.
misc/src/pkg/exp/4s command
This is a simple demo of Go running under Native Client.
This is a simple demo of Go running under Native Client.
misc/src/pkg/exp/draw
Package draw provides image composition functions.
Package draw provides image composition functions.
misc/src/pkg/exp/ebnf
Package ebnf is a library for EBNF grammars.
Package ebnf is a library for EBNF grammars.
misc/src/pkg/exp/gui
Package gui defines a basic graphical user interface programming model.
Package gui defines a basic graphical user interface programming model.
misc/src/pkg/exp/gui/x11
Package x11 implements an X11 backend for the exp/gui package.
Package x11 implements an X11 backend for the exp/gui package.
misc/src/pkg/exp/inotify
Package inotify implements a wrapper for the Linux inotify system.
Package inotify implements a wrapper for the Linux inotify system.
misc/src/pkg/exp/sql
Package sql provides a generic interface around SQL (or SQL-like) databases.
Package sql provides a generic interface around SQL (or SQL-like) databases.
misc/src/pkg/exp/sql/driver
Package driver defines interfaces to be implemented by database drivers as used by package sql.
Package driver defines interfaces to be implemented by database drivers as used by package sql.
misc/src/pkg/exp/ssh
Package ssh implements an SSH client and server.
Package ssh implements an SSH client and server.
misc/src/pkg/exp/terminal
Package terminal provides support functions for dealing with terminals, as commonly found on UNIX systems.
Package terminal provides support functions for dealing with terminals, as commonly found on UNIX systems.
misc/src/pkg/exp/types
PACKAGE UNDER CONSTRUCTION.
PACKAGE UNDER CONSTRUCTION.
misc/src/pkg/exp/winfsnotify
Package winfsnotify allows the user to receive file system event notifications on Windows.
Package winfsnotify allows the user to receive file system event notifications on Windows.
misc/src/pkg/image
Package image implements a basic 2-D image library.
Package image implements a basic 2-D image library.
misc/src/pkg/image/bmp
Package bmp implements a BMP image decoder.
Package bmp implements a BMP image decoder.
misc/src/pkg/image/color
Package color implements a basic color library.
Package color implements a basic color library.
misc/src/pkg/image/gif
Package gif implements a GIF image decoder.
Package gif implements a GIF image decoder.
misc/src/pkg/image/jpeg
Package jpeg implements a JPEG image decoder and encoder.
Package jpeg implements a JPEG image decoder and encoder.
misc/src/pkg/image/png
Package png implements a PNG image decoder and encoder.
Package png implements a PNG image decoder and encoder.
misc/src/pkg/image/tiff
Package tiff implements a TIFF image decoder.
Package tiff implements a TIFF image decoder.
misc/src/pkg/image/ycbcr
Package ycbcr provides images from the Y'CbCr color model.
Package ycbcr provides images from the Y'CbCr color model.
pkg/archive/tar
The tar package implements access to tar archives.
The tar package implements access to tar archives.
pkg/archive/zip
The zip package provides support for reading ZIP archives.
The zip package provides support for reading ZIP archives.
pkg/asn1
The asn1 package implements parsing of DER-encoded ASN.1 data structures, as defined in ITU-T Rec X.690.
The asn1 package implements parsing of DER-encoded ASN.1 data structures, as defined in ITU-T Rec X.690.
pkg/big
This package implements multi-precision arithmetic (big numbers).
This package implements multi-precision arithmetic (big numbers).
pkg/bufio
This package implements buffered I/O. It wraps an io.Reader or io.Writer object, creating another object (Reader or Writer) that also implements the interface but provides buffering and some help for textual I/O.
This package implements buffered I/O. It wraps an io.Reader or io.Writer object, creating another object (Reader or Writer) that also implements the interface but provides buffering and some help for textual I/O.
pkg/bytes
The bytes package implements functions for the manipulation of byte slices.
The bytes package implements functions for the manipulation of byte slices.
pkg/cmath
The cmath package provides basic constants and mathematical functions for complex numbers.
The cmath package provides basic constants and mathematical functions for complex numbers.
pkg/compress/flate
The flate package implements the DEFLATE compressed data format, described in RFC 1951.
The flate package implements the DEFLATE compressed data format, described in RFC 1951.
pkg/compress/gzip
The gzip package implements reading and writing of gzip format compressed files, as specified in RFC 1952.
The gzip package implements reading and writing of gzip format compressed files, as specified in RFC 1952.
pkg/compress/zlib
The zlib package implements reading and writing of zlib format compressed data, as specified in RFC 1950.
The zlib package implements reading and writing of zlib format compressed data, as specified in RFC 1950.
pkg/container/heap
This package provides heap operations for any type that implements heap.Interface.
This package provides heap operations for any type that implements heap.Interface.
pkg/container/list
The list package implements a doubly linked list.
The list package implements a doubly linked list.
pkg/container/ring
The ring package implements operations on circular lists.
The ring package implements operations on circular lists.
pkg/container/vector
The vector package implements containers for managing sequences of elements.
The vector package implements containers for managing sequences of elements.
pkg/crypto/aes
This package implements AES encryption (formerly Rijndael), as defined in U.S. Federal Information Processing Standards Publication 197.
This package implements AES encryption (formerly Rijndael), as defined in U.S. Federal Information Processing Standards Publication 197.
pkg/crypto/block
The block package implements standard block cipher modes that can be wrapped around low-level block cipher implementations.
The block package implements standard block cipher modes that can be wrapped around low-level block cipher implementations.
pkg/crypto/blowfish
This package implements Bruce Schneier's Blowfish encryption algorithm.
This package implements Bruce Schneier's Blowfish encryption algorithm.
pkg/crypto/hmac
The hmac package implements the Keyed-Hash Message Authentication Code (HMAC) as defined in U.S. Federal Information Processing Standards Publication 198.
The hmac package implements the Keyed-Hash Message Authentication Code (HMAC) as defined in U.S. Federal Information Processing Standards Publication 198.
pkg/crypto/md4
This package implements the MD4 hash algorithm as defined in RFC 1320.
This package implements the MD4 hash algorithm as defined in RFC 1320.
pkg/crypto/md5
This package implements the MD5 hash algorithm as defined in RFC 1321.
This package implements the MD5 hash algorithm as defined in RFC 1321.
pkg/crypto/ocsp
This package parses OCSP responses as specified in RFC 2560.
This package parses OCSP responses as specified in RFC 2560.
pkg/crypto/rand
Package rand implements a cryptographically secure pseudorandom number generator.
Package rand implements a cryptographically secure pseudorandom number generator.
pkg/crypto/rc4
This package implements RC4 encryption, as defined in Bruce Schneier's Applied Cryptography.
This package implements RC4 encryption, as defined in Bruce Schneier's Applied Cryptography.
pkg/crypto/ripemd160
This package implements the RIPEMD-160 hash algorithm.
This package implements the RIPEMD-160 hash algorithm.
pkg/crypto/rsa
This package implements RSA encryption as specified in PKCS#1.
This package implements RSA encryption as specified in PKCS#1.
pkg/crypto/sha1
This package implements the SHA1 hash algorithm as defined in RFC 3174.
This package implements the SHA1 hash algorithm as defined in RFC 3174.
pkg/crypto/sha256
This package implements the SHA224 and SHA256 hash algorithms as defined in FIPS 180-2.
This package implements the SHA224 and SHA256 hash algorithms as defined in FIPS 180-2.
pkg/crypto/sha512
This package implements the SHA384 and SHA512 hash algorithms as defined in FIPS 180-2.
This package implements the SHA384 and SHA512 hash algorithms as defined in FIPS 180-2.
pkg/crypto/subtle
This package implements functions that are often useful in cryptographic code but require careful thought to use correctly.
This package implements functions that are often useful in cryptographic code but require careful thought to use correctly.
pkg/crypto/x509
This package parses X.509-encoded keys and certificates.
This package parses X.509-encoded keys and certificates.
pkg/crypto/xtea
This package implements XTEA encryption, as defined in Needham and Wheeler's 1997 technical report, "Tea extensions."
This package implements XTEA encryption, as defined in Needham and Wheeler's 1997 technical report, "Tea extensions."
pkg/debug/dwarf
This package provides access to DWARF debugging information loaded from executable files, as defined in the DWARF 2.0 Standard at http://dwarfstd.org/doc/dwarf-2.0.0.pdf
This package provides access to DWARF debugging information loaded from executable files, as defined in the DWARF 2.0 Standard at http://dwarfstd.org/doc/dwarf-2.0.0.pdf
pkg/debug/elf
Package elf implements access to ELF object files.
Package elf implements access to ELF object files.
pkg/debug/gosym
Package gosym implements access to the Go symbol and line number tables embedded in Go binaries generated by the gc compilers.
Package gosym implements access to the Go symbol and line number tables embedded in Go binaries generated by the gc compilers.
pkg/debug/macho
Package macho implements access to Mach-O object files, as defined by http://developer.apple.com/mac/library/documentation/DeveloperTools/Conceptual/MachORuntime/Reference/reference.html.
Package macho implements access to Mach-O object files, as defined by http://developer.apple.com/mac/library/documentation/DeveloperTools/Conceptual/MachORuntime/Reference/reference.html.
pkg/debug/proc
Package proc provides a platform-independent interface for tracing and controlling running processes.
Package proc provides a platform-independent interface for tracing and controlling running processes.
pkg/ebnf
A library for EBNF grammars.
A library for EBNF grammars.
pkg/encoding/ascii85
Package ascii85 implements the ascii85 data encoding as used in the btoa tool and Adobe's PostScript and PDF document formats.
Package ascii85 implements the ascii85 data encoding as used in the btoa tool and Adobe's PostScript and PDF document formats.
pkg/encoding/base64
Package base64 implements base64 encoding as specified by RFC 4648.
Package base64 implements base64 encoding as specified by RFC 4648.
pkg/encoding/binary
This package implements translation between unsigned integer values and byte sequences.
This package implements translation between unsigned integer values and byte sequences.
pkg/encoding/git85
Package git85 implements the radix 85 data encoding used in the Git version control system.
Package git85 implements the radix 85 data encoding used in the Git version control system.
pkg/encoding/hex
This package implements hexadecimal encoding and decoding.
This package implements hexadecimal encoding and decoding.
pkg/encoding/pem
This package implements the PEM data encoding, which originated in Privacy Enhanced Mail.
This package implements the PEM data encoding, which originated in Privacy Enhanced Mail.
pkg/exec
The exec package runs external commands.
The exec package runs external commands.
pkg/exp/datafmt
The datafmt package implements syntax-directed, type-driven formatting of arbitrary data structures.
The datafmt package implements syntax-directed, type-driven formatting of arbitrary data structures.
pkg/exp/draw
Package draw provides basic graphics and drawing primitives, in the style of the Plan 9 graphics library (see http://plan9.bell-labs.com/magic/man2html/2/draw) and the X Render extension.
Package draw provides basic graphics and drawing primitives, in the style of the Plan 9 graphics library (see http://plan9.bell-labs.com/magic/man2html/2/draw) and the X Render extension.
pkg/expvar
The expvar package provides a standardized interface to public variables, such as operation counters in servers.
The expvar package provides a standardized interface to public variables, such as operation counters in servers.
pkg/flag
The flag package implements command-line flag parsing.
The flag package implements command-line flag parsing.
pkg/go/ast
The AST package declares the types used to represent syntax trees for Go packages.
The AST package declares the types used to represent syntax trees for Go packages.
pkg/go/doc
The doc package extracts source code documentation from a Go AST.
The doc package extracts source code documentation from a Go AST.
pkg/go/parser
A parser for Go source files.
A parser for Go source files.
pkg/go/printer
The printer package implements printing of AST nodes.
The printer package implements printing of AST nodes.
pkg/go/scanner
A scanner for Go source text.
A scanner for Go source text.
pkg/go/token
This package defines constants representing the lexical tokens of the Go programming language and basic operations on tokens (printing, predicates).
This package defines constants representing the lexical tokens of the Go programming language and basic operations on tokens (printing, predicates).
pkg/go/typechecker
This package implements typechecking of a Go AST.
This package implements typechecking of a Go AST.
pkg/hash/adler32
This package implements the Adler-32 checksum.
This package implements the Adler-32 checksum.
pkg/hash/crc32
This package implements the 32-bit cyclic redundancy check, or CRC-32, checksum.
This package implements the 32-bit cyclic redundancy check, or CRC-32, checksum.
pkg/hash/crc64
This package implements the 64-bit cyclic redundancy check, or CRC-64, checksum.
This package implements the 64-bit cyclic redundancy check, or CRC-64, checksum.
pkg/html
The html package implements an HTML5-compliant tokenizer and parser.
The html package implements an HTML5-compliant tokenizer and parser.
pkg/http/pprof
Package pprof serves via its HTTP server runtime profiling data in the format expected by the pprof visualization tool.
Package pprof serves via its HTTP server runtime profiling data in the format expected by the pprof visualization tool.
pkg/image
The image package implements a basic 2-D image library.
The image package implements a basic 2-D image library.
pkg/image/jpeg
The jpeg package implements a decoder for JPEG images, as defined in ITU-T T.81.
The jpeg package implements a decoder for JPEG images, as defined in ITU-T T.81.
pkg/image/png
The png package implements a PNG image decoder and encoder.
The png package implements a PNG image decoder and encoder.
pkg/index/suffixarray
The suffixarray package implements substring search in logarithmic time using an in-memory suffix array.
The suffixarray package implements substring search in logarithmic time using an in-memory suffix array.
pkg/io
This package provides basic interfaces to I/O primitives.
This package provides basic interfaces to I/O primitives.
pkg/json
The json package implements encoding and decoding of JSON objects as defined in RFC 4627.
The json package implements encoding and decoding of JSON objects as defined in RFC 4627.
pkg/log
Simple logging package.
Simple logging package.
pkg/math
The math package provides basic constants and mathematical functions.
The math package provides basic constants and mathematical functions.
pkg/mime
The mime package implements parts of the MIME spec.
The mime package implements parts of the MIME spec.
pkg/mime/multipart
Package multipart implements MIME multipart parsing, as defined in RFC 2046.
Package multipart implements MIME multipart parsing, as defined in RFC 2046.
pkg/net/dict
Package dict implements the Dictionary Server Protocol as defined in RFC 2229.
Package dict implements the Dictionary Server Protocol as defined in RFC 2229.
pkg/net/textproto
The textproto package implements generic support for text-based request/response protocols in the style of HTTP, NNTP, and SMTP.
The textproto package implements generic support for text-based request/response protocols in the style of HTTP, NNTP, and SMTP.
pkg/nntp
The nntp package implements a client for the news protocol NNTP, as defined in RFC 3977.
The nntp package implements a client for the news protocol NNTP, as defined in RFC 3977.
pkg/os
The os package provides a platform-independent interface to operating system functionality.
The os package provides a platform-independent interface to operating system functionality.
pkg/os/signal
Package signal implements operating system-independent signal handling.
Package signal implements operating system-independent signal handling.
pkg/patch
Package patch implements parsing and execution of the textual and binary patch descriptions used by version control tools such as CVS, Git, Mercurial, and Subversion.
Package patch implements parsing and execution of the textual and binary patch descriptions used by version control tools such as CVS, Git, Mercurial, and Subversion.
pkg/path
The path package implements utility routines for manipulating slash-separated filename paths.
The path package implements utility routines for manipulating slash-separated filename paths.
pkg/rand
Package rand implements pseudo-random number generators.
Package rand implements pseudo-random number generators.
pkg/reflect
The reflect package implements run-time reflection, allowing a program to manipulate objects with arbitrary types.
The reflect package implements run-time reflection, allowing a program to manipulate objects with arbitrary types.
pkg/regexp
Package regexp implements a simple regular expression library.
Package regexp implements a simple regular expression library.
pkg/rpc/jsonrpc
Package jsonrpc implements a JSON-RPC ClientCodec and ServerCodec for the rpc package.
Package jsonrpc implements a JSON-RPC ClientCodec and ServerCodec for the rpc package.
pkg/runtime
The runtime package contains operations that interact with Go's runtime system, such as functions to control goroutines.
The runtime package contains operations that interact with Go's runtime system, such as functions to control goroutines.
pkg/runtime/pprof
Package pprof writes runtime profiling data in the format expected by the pprof visualization tool.
Package pprof writes runtime profiling data in the format expected by the pprof visualization tool.
pkg/scanner
A scanner and tokenizer for UTF-8-encoded text.
A scanner and tokenizer for UTF-8-encoded text.
pkg/smtp
Package smtp implements the Simple Mail Transfer Protocol as defined in RFC 5321.
Package smtp implements the Simple Mail Transfer Protocol as defined in RFC 5321.
pkg/sort
The sort package provides primitives for sorting arrays and user-defined collections.
The sort package provides primitives for sorting arrays and user-defined collections.
pkg/strconv
The strconv package implements conversions to and from string representations of basic data types.
The strconv package implements conversions to and from string representations of basic data types.
pkg/strings
A package of simple functions to manipulate strings.
A package of simple functions to manipulate strings.
pkg/sync
The sync package provides basic synchronization primitives such as mutual exclusion locks.
The sync package provides basic synchronization primitives such as mutual exclusion locks.
pkg/syscall
This package contains an interface to the low-level operating system primitives.
This package contains an interface to the low-level operating system primitives.
pkg/syslog
The syslog package provides a simple interface to the system log service.
The syslog package provides a simple interface to the system log service.
pkg/tabwriter
The tabwriter package implements a write filter (tabwriter.Writer) that translates tabbed columns in input into properly aligned text.
The tabwriter package implements a write filter (tabwriter.Writer) that translates tabbed columns in input into properly aligned text.
pkg/template
Data-driven templates for generating textual output such as HTML.
Data-driven templates for generating textual output such as HTML.
pkg/testing
The testing package provides support for automated testing of Go packages.
The testing package provides support for automated testing of Go packages.
pkg/testing/iotest
The iotest package implements Readers and Writers useful only for testing.
The iotest package implements Readers and Writers useful only for testing.
pkg/testing/quick
This package implements utility functions to help with black box testing.
This package implements utility functions to help with black box testing.
pkg/testing/script
This package aids in the testing of code that uses channels.
This package aids in the testing of code that uses channels.
pkg/time
The time package provides functionality for measuring and displaying time.
The time package provides functionality for measuring and displaying time.
pkg/try
Package try contains the executable part of the gotry command.
Package try contains the executable part of the gotry command.
pkg/unsafe
The unsafe package contains operations that step around the type safety of Go programs.
The unsafe package contains operations that step around the type safety of Go programs.
pkg/utf16
Package utf16 implements encoding and decoding of UTF-16 sequences.
Package utf16 implements encoding and decoding of UTF-16 sequences.
pkg/utf8
Functions and constants to support text encoded in UTF-8.
Functions and constants to support text encoded in UTF-8.
pkg/websocket
The websocket package implements a client and server for the Web Socket protocol.
The websocket package implements a client and server for the Web Socket protocol.
pkg/xml
Package xml implements a simple XML 1.0 parser that understands XML name spaces.
Package xml implements a simple XML 1.0 parser that understands XML name spaces.
test/bench command
test/bugs command
test/garbage command
test/nilptr command
tests
go/hello command
go/wiki command

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL