Skip to content

Commit 2e0255f

Browse files
committed
add type alias experiment data to testdata
1 parent 5d66839 commit 2e0255f

File tree

9 files changed

+184
-0
lines changed

9 files changed

+184
-0
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
goplay
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
module goplay
2+
3+
go 1.16
4+
5+
replace (
6+
bar => gorm.io/gorm v1.21.0
7+
foo => gorm.io/gorm v1.20.12
8+
)
9+
10+
require (
11+
github.com/gorilla/websocket v1.4.2
12+
golang.org/x/time v0.0.0-20210611083556-38a9dc6acbc6
13+
)
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
github.com/gorilla/websocket v1.4.2 h1:+/TMaTYc4QFitKJxsQ7Yye35DkWvkdLcvGKqM+x0Ufc=
2+
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
3+
golang.org/x/time v0.0.0-20210611083556-38a9dc6acbc6 h1:Vv0JUPWTyeqUq42B2WJ1FeIDjjvGKoA2Ss+Ts0lAVbs=
4+
golang.org/x/time v0.0.0-20210611083556-38a9dc6acbc6/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
package main
2+
3+
import (
4+
"goplay/pkg"
5+
"goplay/pkg/subpkg"
6+
"goplay/someone"
7+
"goplay/thirdparty"
8+
"log"
9+
)
10+
11+
func main() {
12+
log.SetFlags(log.Lshortfile)
13+
mainV40()
14+
}
15+
16+
func mainV40() {
17+
var a thirdparty.X // I don't know/shouldn't have to know at this point that pkg.OwnX exists/will exist
18+
var b pkg.OwnY // I don't know/shouldn't have to know at this point that subpkg.SubpkgY exists/will exist
19+
20+
a = pkg.ReturnsX()
21+
b = pkg.ReturnsY()
22+
23+
switch a {
24+
case thirdparty.TMemI:
25+
case thirdparty.TMemJ:
26+
}
27+
28+
switch b {
29+
case pkg.MemM:
30+
case pkg.MemN:
31+
}
32+
33+
log.Println(a, b)
34+
}
35+
36+
func mainV45() {
37+
var a pkg.OwnX // done to latest
38+
var b subpkg.SubpkgY // done to latest
39+
40+
a = pkg.ReturnsX()
41+
b = pkg.ReturnsY()
42+
43+
switch a {
44+
case pkg.TMemI:
45+
case pkg.TMemJ:
46+
// case pkg.TMemK:
47+
}
48+
49+
switch b {
50+
case subpkg.MemM:
51+
case subpkg.MemN:
52+
// case subpkg.MemO:
53+
}
54+
55+
log.Println(a, b)
56+
}
57+
58+
func anotherV41() {
59+
var c pkg.OwnY // I don't know/shouldn't have to know at this point that someone.SomeonesOwnY exists/will exist
60+
c = someone.P()
61+
switch c {
62+
case pkg.MemM:
63+
case pkg.MemN:
64+
}
65+
log.Println(c)
66+
}
67+
68+
func anotherV4x() {
69+
var c someone.SomeonesOwnY
70+
c = someone.P()
71+
switch c {
72+
case someone.SomeonesMM:
73+
case someone.SomeonesMN:
74+
// case someone.SomeonesMO:
75+
}
76+
log.Println(c)
77+
}
78+
79+
// type alias
80+
// assume you use it for code refactoring only
81+
// assume you do one by one (first type change fully done; then only add new enum members for example
82+
// don't add new enum members to old/pas type after new/future type is introduced
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
package main
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package pkg
2+
3+
import (
4+
"goplay/pkg/subpkg"
5+
"goplay/thirdparty"
6+
)
7+
8+
// Earlier this package was returning third party X type, but now this package
9+
// wants to return my own X type instead of third party type.
10+
//
11+
// Old API: thirdparty.X (to be unreferenced in new API's package -- this package)
12+
// New API: OwnX
13+
//
14+
// (no line of code) -->
15+
type OwnX = thirdparty.X // -->
16+
// type OwnX int
17+
18+
const (
19+
TMemI OwnX = thirdparty.TMemI
20+
TMemJ OwnX = thirdparty.TMemJ
21+
TMemK OwnX = 1002 // new extra
22+
)
23+
24+
func ReturnsX() OwnX { return TMemI }
25+
26+
// is it okay to return here the extra?
27+
const _ = TMemK // No, because users aren't yet expected to know of OwnX
28+
29+
// Earlier this package defined own Y type, but now it wants to move the
30+
// definition to a dedicated (sub)package.
31+
//
32+
// Old API: OwnY (to be removed in old API's package -- this package)
33+
// New API: subpkg.SubpkgY
34+
//
35+
// type OwnY uint -->
36+
type OwnY = subpkg.SubpkgY // -->
37+
// (no line of code)
38+
39+
const (
40+
// created these in subpkg, which is going to become the primary package
41+
// and forwarding to the created ones in subkpkg
42+
MemM = subpkg.MemM
43+
MemN = subpkg.MemN
44+
// at the end these will be become (no line of code)
45+
)
46+
47+
func ReturnsY() subpkg.SubpkgY { return subpkg.MemM }
48+
49+
// is it okay to return here the extra?
50+
const _ = subpkg.MemO // No, because users aren't yet expected to know of SubpkgY
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package subpkg
2+
3+
type SubpkgY uint
4+
5+
const (
6+
MemM SubpkgY = 1
7+
MemN SubpkgY = 2
8+
MemO SubpkgY = 3 // extra here
9+
)
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package someone
2+
3+
import "goplay/pkg"
4+
5+
// type OwnY uint -->
6+
type SomeonesOwnY = pkg.OwnY
7+
8+
const (
9+
SomeonesMM SomeonesOwnY = pkg.MemM
10+
SomeonesMN SomeonesOwnY = pkg.MemN
11+
SomeonesMO SomeonesOwnY = 444 // new extra here
12+
)
13+
14+
func P() SomeonesOwnY {
15+
return SomeonesOwnY(100)
16+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package thirdparty
2+
3+
type X int
4+
5+
const (
6+
TMemI = 1000
7+
TMemJ = 1001
8+
)

0 commit comments

Comments
 (0)