| // Copyright 2011 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. |
| type Exported interface { |
| type Implementation struct{} |
| func (p *Implementation) private() {} |
| x.private() // main.Implementation.private() |
| // same here - should be and is legal |
| // this assignment is correctly illegal: |
| // px.private undefined (cannot refer to unexported field or method private) |
| // this assignment is correctly illegal: |
| // *Implementation does not implement p.Exported (missing p.private method) |
| // px = new(Implementation) |
| // this assignment is correctly illegal: |
| // p.Exported does not implement Exported (missing private method) |
| // this assignment unexpectedly compiles and then executes |
| println("should not get this far") |
| // this is a legitimate call, but because of the previous assignment, |
| // it invokes the method private in p! |
| x.private() // p.Implementation.private() |