1
0
mirror of https://github.com/golang/go synced 2024-11-20 01:54:41 -07:00
go/test
Russ Cox d03611f628 allow copy of struct containing unexported fields
An experiment: allow structs to be copied even if they
contain unexported fields.  This gives packages the
ability to return opaque values in their APIs, like reflect
does for reflect.Value but without the kludgy hacks reflect
resorts to.

In general, we trust programmers not to do silly things
like *x = *y on a package's struct pointers, just as we trust
programmers not to do unicode.Letter = unicode.Digit,
but packages that want a harder guarantee can introduce
an extra level of indirection, like in the changes to os.File
in this CL or by using an interface type.

All in one CL so that it can be rolled back more easily if
we decide this is a bad idea.

Originally discussed in March 2011.
https://groups.google.com/group/golang-dev/t/3f5d30938c7c45ef

R=golang-dev, adg, dvyukov, r, bradfitz, jan.mercl, gri
CC=golang-dev
https://golang.org/cl/5372095
2011-11-15 12:20:59 -05:00
..
bench renaming_4: gofix -r everything/but/src/pkg 2011-11-08 15:43:02 -08:00
bugs test: Add test for inheriting private method from anonymous field. 2011-09-14 10:31:51 -07:00
chan renaming_4: gofix -r everything/but/src/pkg 2011-11-08 15:43:02 -08:00
dwarf test: clear execute bit from source file 2011-11-03 10:26:33 +09:00
fixedbugs allow copy of struct containing unexported fields 2011-11-15 12:20:59 -05:00
garbage renaming_4: gofix -r everything/but/src/pkg 2011-11-08 15:43:02 -08:00
interface reflect: disallow Interface method on Value obtained via unexported name 2011-10-17 18:48:45 -04:00
ken renaming_4: gofix -r everything/but/src/pkg 2011-11-08 15:43:02 -08:00
syntax gc: clean up if grammar 2011-09-12 15:52:29 -04:00
64bit.go
235.go
alias1.go test/alias.go: additional tests 2011-10-26 15:27:47 -07:00
alias.go renaming_4: gofix -r everything/but/src/pkg 2011-11-08 15:43:02 -08:00
append.go runtime: append([]byte, string...) 2011-10-12 15:59:23 +02:00
args.go
assign1.go test: Match gccgo error messages. 2010-09-10 19:12:10 -07:00
assign.go allow copy of struct containing unexported fields 2011-11-15 12:20:59 -05:00
bigalg.go
bigmap.go
blank1.go
blank.go delete float, complex - code changes 2011-01-19 23:09:00 -05:00
chancap.go
char_lit1.go
char_lit.go
closedchan.go test: make closedchan.go exit with failure if something fails 2011-11-04 14:12:35 -07:00
closure.go gc: remove func, map compare 2011-11-13 22:58:08 -05:00
cmp6.go gc: remove func, map compare 2011-11-13 22:58:08 -05:00
cmp.go test: silence/coalesce some tests 2011-09-26 19:35:21 -04:00
cmplx.go delete float, complex - code changes 2011-01-19 23:09:00 -05:00
cmplxdivide1.go delete float, complex - code changes 2011-01-19 23:09:00 -05:00
cmplxdivide.c delete float, complex - code changes 2011-01-19 23:09:00 -05:00
cmplxdivide.go renaming_4: gofix -r everything/but/src/pkg 2011-11-08 15:43:02 -08:00
complit.go delete float, complex - code changes 2011-01-19 23:09:00 -05:00
compos.go
const1.go delete float, complex - code changes 2011-01-19 23:09:00 -05:00
const2.go
const3.go gc: another shift bug 2010-12-13 13:42:51 -05:00
const.go
convert3.go
convert.go fix tree for reflect rename 2011-04-25 13:39:36 -04:00
convlit1.go
convlit.go cgo, goyacc, go/build, html, http, path, path/filepath, testing/quick, test: use rune 2011-10-25 22:20:02 -07:00
copy.go test copy([]byte, string) 2010-10-26 08:36:23 -07:00
ddd1.go gc: clean up printing. 2011-10-31 18:09:40 +01:00
ddd2.go
ddd3.go
ddd.go gc: ... bug 2010-10-06 11:12:30 -04:00
decl.go delete float, complex - code changes 2011-01-19 23:09:00 -05:00
declbad.go errchk: allow multiple patterns 2011-08-16 11:14:26 -04:00
defer.go ... changes 2010-09-24 11:55:48 -04:00
deferprint.go
divide.go 6g, 8g: divide corner case 2011-07-28 14:18:22 -04:00
empty.go
env.go non-pkg: gofix -r error -force=error 2011-11-01 22:06:05 -04:00
eof1.go gc: line comments may end in EOF 2010-11-04 16:04:04 -04:00
eof.go gc: insert semicolon at EOF if needed 2010-09-28 10:35:02 -04:00
errchk errchk: allow multiple patterns 2011-08-16 11:14:26 -04:00
escape2.go gc: small fixes for printing. 2011-11-02 15:36:33 +01:00
escape3.go gc: zero stack-allocated slice backing arrays 2011-09-02 15:11:28 -04:00
escape.go
float_lit.go arm: enable all tests 2010-10-25 21:25:13 -07:00
floatcmp.go
for.go
func1.go delete float, complex - code changes 2011-01-19 23:09:00 -05:00
func2.go non-pkg: gofix -r error -force=error 2011-11-01 22:06:05 -04:00
func3.go
func4.go
func5.go
func6.go gc: fix func syntax error 2011-04-13 22:48:21 -04:00
func7.go gc: fix order of operations for f() < g(). 2011-04-26 00:57:03 -04:00
func.go delete float, complex - code changes 2011-01-19 23:09:00 -05:00
gc1.go
gc2.go runtime: add UpdateMemStats, use in tests 2011-07-22 00:55:01 -04:00
gc.go
golden.out test: silence/coalesce some tests 2011-09-26 19:35:21 -04:00
goprint.go gc: handle go print() and go println() 2011-06-13 22:50:51 +10:00
goto.go test: match gccgo error messages for goto.go and bug344.go 2011-09-20 14:45:54 -07:00
hashmap.go build: clear execute bit from Go files 2011-09-05 07:48:42 -04:00
helloworld.go
if.go go: require { } around else block 2011-07-14 17:15:52 -04:00
import1.go errchk: allow multiple patterns 2011-08-16 11:14:26 -04:00
import2.go
import3.go
import4.go
import.go test: error-related fixes 2011-10-27 19:41:39 -07:00
index.go test: fix NaCl build 2010-09-19 23:28:32 -04:00
indirect1.go
indirect.go
init1.go runtime: run goroutines during init 2011-10-13 15:54:23 -04:00
init.go test: match gccgo error messages for init.go 2011-03-26 11:24:02 -07:00
initcomma.go
initialize.go
initializerr.go errchk: allow multiple patterns 2011-08-16 11:14:26 -04:00
initsyscall.go
int_lit.go
intcvt.go
iota.go delete float, complex - code changes 2011-01-19 23:09:00 -05:00
label1.go test: match gccgo error messages for label.go and label1.go. 2011-03-25 10:36:46 -07:00
label.go test: match gccgo error messages for label.go and label1.go. 2011-03-25 10:36:46 -07:00
literal.go delete float, complex - code changes 2011-01-19 23:09:00 -05:00
malloc1.go runtime: add UpdateMemStats, use in tests 2011-07-22 00:55:01 -04:00
mallocfin.go runtime: faster finalizers 2011-10-06 18:42:51 +03:00
mallocrand.go renaming_4: gofix -r everything/but/src/pkg 2011-11-08 15:43:02 -08:00
mallocrep1.go runtime: add UpdateMemStats, use in tests 2011-07-22 00:55:01 -04:00
mallocrep.go runtime: faster finalizers 2011-10-06 18:42:51 +03:00
map1.go gc: remove func, map compare 2011-11-13 22:58:08 -05:00
map.go delete float, complex - code changes 2011-01-19 23:09:00 -05:00
method1.go test: s/float/float64/ 2011-01-21 08:37:58 -08:00
method2.go test: match gccgo error messages 2011-09-21 17:25:48 -07:00
method3.go
method.go gc, spec, tests: no auto-indirect of pointer to interface value 2010-09-30 14:59:41 -04:00
named1.go gc: remove m[k] = x, false 2011-11-11 16:48:25 -05:00
named.go delete float, complex - code changes 2011-01-19 23:09:00 -05:00
nil.go gofix -r mapdelete 2011-10-18 09:56:34 -04:00
nilptr.go test: silence/coalesce some tests 2011-09-26 19:35:21 -04:00
nul1.go errchk: allow multiple patterns 2011-08-16 11:14:26 -04:00
parentype.go
peano.go
printbig.go
range.go cgo, goyacc, go/build, html, http, path, path/filepath, testing/quick, test: use rune 2011-10-25 22:20:02 -07:00
recover1.go
recover2.go non-pkg: gofix -r error -force=error 2011-11-01 22:06:05 -04:00
recover3.go non-pkg: gofix -r error -force=error 2011-11-01 22:06:05 -04:00
recover.go
rename1.go errchk: allow multiple patterns 2011-08-16 11:14:26 -04:00
rename.go
reorder.go gc: stricter multiple assignment + test 2011-10-13 15:46:39 -04:00
run build: pass $GCFLAGS to compiler 2011-10-18 14:55:10 -04:00
runtime.go
shift1.go test: match gccgo error messages 2011-09-21 17:25:48 -07:00
shift2.go gc: implement new shift rules 2011-05-31 15:05:40 -04:00
sieve.go
sigchld.go test: fix windows build 2011-09-27 09:13:00 -04:00
simassign.go
sinit.go gc: make static initialization more static 2011-08-31 07:37:14 -04:00
sizeof.go gc: unsafe.Alignof, unsafe.Offsetof, unsafe.Sizeof now return uintptr 2011-06-17 16:12:14 -04:00
solitaire.go cgo, goyacc, go/build, html, http, path, path/filepath, testing/quick, test: use rune 2011-10-25 22:20:02 -07:00
stack.go 5l, 8l: pass stack frame size to morestack when needed 2011-02-01 18:34:41 -05:00
string_lit.go cgo, goyacc, go/build, html, http, path, path/filepath, testing/quick, test: use rune 2011-10-25 22:20:02 -07:00
stringrange.go renaming_4: gofix -r everything/but/src/pkg 2011-11-08 15:43:02 -08:00
struct0.go gc: fix zero-length struct eval 2011-09-05 15:31:22 -04:00
switch1.go
switch3.go gc: remove func, map compare 2011-11-13 22:58:08 -05:00
switch.go gc: remove func, map compare 2011-11-13 22:58:08 -05:00
test0.go delete float, complex - code changes 2011-01-19 23:09:00 -05:00
turing.go
typeswitch1.go
typeswitch2.go type switches: test for pathological case 2011-08-19 09:31:50 -07:00
typeswitch3.go gc: Better typechecks and errors in switches. 2011-11-09 10:58:53 +01:00
typeswitch.go gc: remove func, map compare 2011-11-13 22:58:08 -05:00
undef.go
utf.go renaming_4: gofix -r everything/but/src/pkg 2011-11-08 15:43:02 -08:00
varerr.go test: Match gccgo error messages. 2010-09-10 12:45:46 -07:00
varinit.go
zerodivide.go non-pkg: gofix -r error -force=error 2011-11-01 22:06:05 -04:00