mirror of
https://github.com/burrowers/garble.git
synced 2025-12-24 12:58:05 +08:00
This mainly cleans up the few bits of code where we explicitly kept support for Go 1.15.x. With v0.1.0 released, we can drop support now, since the next v0.2.0 release will only support Go 1.16.x. Also updates all modules, including test ones, to 'go 1.16'. Note that the TOOLEXEC_IMPORTPATH refactor is not done here, despite all the TODOs about doing so when we drop 1.15 support. This is because that refactor needs to be done carefully and might have side effects, so it's best to keep it to a separate commit. Finally, update the deps.
62 lines
1.1 KiB
Plaintext
62 lines
1.1 KiB
Plaintext
env GOPRIVATE=test/main
|
|
|
|
garble build
|
|
exec ./main
|
|
cmp stderr main.stderr
|
|
|
|
! binsubstr main$exe 'unexportedMethod' 'privateIface'
|
|
|
|
-- go.mod --
|
|
module test/main
|
|
|
|
go 1.16
|
|
-- main.go --
|
|
package main
|
|
|
|
import "test/main/tinyfmt"
|
|
|
|
type T string
|
|
|
|
func (t T) String() string {
|
|
return "String method for " + string(t)
|
|
}
|
|
|
|
func (t T) unexportedMethod() string {
|
|
return "unexported method for " + string(t)
|
|
}
|
|
|
|
type privateInterface interface {
|
|
privateIface()
|
|
}
|
|
|
|
func (T) privateIface() {}
|
|
|
|
var _ privateInterface = T("")
|
|
|
|
func main() {
|
|
tinyfmt.Println(T("foo"))
|
|
tinyfmt.Println(T("foo").unexportedMethod())
|
|
}
|
|
-- tinyfmt/fmt.go --
|
|
package tinyfmt
|
|
|
|
// Println emulates fmt.Println, and allows the main package to indirectly use
|
|
// T.String in a realistic way. We don't want to import fmt to avoid compiling
|
|
// too many packages, since we don't have build caching yet.
|
|
func Println(args ...interface{}) {
|
|
for _, arg := range args {
|
|
switch arg := arg.(type) {
|
|
case interface{String() string}:
|
|
print(arg.String())
|
|
case string:
|
|
print(arg)
|
|
default:
|
|
panic("unsupported type")
|
|
}
|
|
}
|
|
println()
|
|
}
|
|
-- main.stderr --
|
|
String method for foo
|
|
unexported method for foo
|