From 48b90bbc55889ab12239ef0b3c884316d8f31b1b Mon Sep 17 00:00:00 2001 From: Russ Cox Date: Wed, 14 Aug 2013 00:18:20 -0400 Subject: [PATCH] encoding: new package See golang.org/s/go12encoding for design. R=r CC=golang-dev https://golang.org/cl/12541051 --- src/cmd/dist/build.c | 4 +++ src/pkg/encoding/encoding.go | 48 +++++++++++++++++++++++++++++++++++ src/pkg/go/build/deps_test.go | 5 ++-- 3 files changed, 55 insertions(+), 2 deletions(-) create mode 100644 src/pkg/encoding/encoding.go diff --git a/src/cmd/dist/build.c b/src/cmd/dist/build.c index 07a47a3952..fa43c77e50 100644 --- a/src/cmd/dist/build.c +++ b/src/cmd/dist/build.c @@ -992,6 +992,8 @@ install(char *dir) vadd(&compile, bprintf(&b, "GOOS_%s", goos)); vadd(&compile, "-D"); vadd(&compile, bprintf(&b, "GOARCH_%s", goarch)); + vadd(&compile, "-D"); + vadd(&compile, bprintf(&b, "GOOS_GOARCH_%s_%s", goos, goarch)); } bpathf(&b, "%s/%s", workdir, lastelem(files.p[i])); @@ -1265,6 +1267,7 @@ static char *buildorder[] = { "pkg/os", "pkg/reflect", "pkg/fmt", + "pkg/encoding", "pkg/encoding/json", "pkg/flag", "pkg/path/filepath", @@ -1317,6 +1320,7 @@ static char *cleantab[] = { "pkg/bufio", "pkg/bytes", "pkg/container/heap", + "pkg/encoding", "pkg/encoding/base64", "pkg/encoding/json", "pkg/errors", diff --git a/src/pkg/encoding/encoding.go b/src/pkg/encoding/encoding.go new file mode 100644 index 0000000000..6d218071b7 --- /dev/null +++ b/src/pkg/encoding/encoding.go @@ -0,0 +1,48 @@ +// Copyright 2013 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 encoding defines interfaces shared by other packages that +// convert data to and from byte-level and textual representations. +// Packages that check for these interfaces include encoding/gob, +// encoding/json, and encoding/xml. As a result, implementing an +// interface once can make a type useful in multiple encodings. +// Standard types that implement these interfaces include time.Time and net.IP. +// The interfaces come in pairs that produce and consume encoded data. +package encoding + +// BinaryMarshaler is the interface implemented by an object that can +// marshal itself into a binary form. +// +// MarshalBinary encodes the receiver into a binary form and returns the result. +type BinaryMarshaler interface { + MarshalBinary() (data []byte, err error) +} + +// BinaryUnmarshaler is the interface implemented by an object that can +// unmarshal a binary representation of itself. +// +// UnmarshalBinary must be able to decode the form generated by MarshalBinary. +// UnmarshalBinary must copy the data if it wishes to retain the data +// after returning. +type BinaryUnmarshaler interface { + UnmarshalBinary(data []byte) error +} + +// TextMarshaler is the interface implemented by an object that can +// marshal itself into a textual form. +// +// MarshalText encodes the receiver into UTF-8-encoded text and returns the result. +type TextMarshaler interface { + MarshalText() (text []byte, err error) +} + +// TextUnmarshaler is the interface implemented by an object that can +// unmarshal a textual representation of itself. +// +// UnmarshalText must be able to decode the form generated by MarshalText. +// UnmarshalText must copy the text if it wishes to retain the text +// after returning. +type TextUnmarshaler interface { + UnmarshalText(text []byte) error +} diff --git a/src/pkg/go/build/deps_test.go b/src/pkg/go/build/deps_test.go index 23cbce3652..5e5982422b 100644 --- a/src/pkg/go/build/deps_test.go +++ b/src/pkg/go/build/deps_test.go @@ -192,12 +192,13 @@ var pkgDeps = map[string][]string{ "debug/gosym": {"L4"}, "debug/macho": {"L4", "OS", "debug/dwarf"}, "debug/pe": {"L4", "OS", "debug/dwarf"}, + "encoding": {"L4"}, "encoding/ascii85": {"L4"}, "encoding/asn1": {"L4", "math/big"}, "encoding/csv": {"L4"}, - "encoding/gob": {"L4", "OS"}, + "encoding/gob": {"L4", "OS", "encoding"}, "encoding/hex": {"L4"}, - "encoding/json": {"L4"}, + "encoding/json": {"L4", "encoding"}, "encoding/pem": {"L4"}, "encoding/xml": {"L4"}, "flag": {"L4", "OS"},