回答編集履歴

2

実装例追記

2020/07/23 23:58

投稿

nobonobo
nobonobo

スコア3367

test CHANGED
@@ -15,3 +15,159 @@
15
15
 
16
16
 
17
17
  それでも複数の型に対応する実装を展開する理由ができた場合、僕の場合はgo generateを活用します。
18
+
19
+
20
+
21
+ ## 追記
22
+
23
+
24
+
25
+ 現時点での僕のオススメの実装例を以下に示します。
26
+
27
+
28
+
29
+ 以下のツールをインストールします。
30
+
31
+ ```shell
32
+
33
+ go get github.com/cheekybits/genny
34
+
35
+ ```
36
+
37
+
38
+
39
+ 以下の2つのコードをメインパッケージにおきます
40
+
41
+ (必要ならパッケージを分けても構いません)
42
+
43
+ ```go
44
+
45
+ package main
46
+
47
+
48
+
49
+ import "github.com/cheekybits/genny/generic"
50
+
51
+
52
+
53
+ //go:generate genny -in=$GOFILE -out=gen-$GOFILE gen "Type=string,int"
54
+
55
+
56
+
57
+ // Type ...
58
+
59
+ type Type generic.Number
60
+
61
+
62
+
63
+ // SortType ...
64
+
65
+ func SortType(s []Type) {
66
+
67
+ size := len(s)
68
+
69
+ for i := 0; i < size; i++ {
70
+
71
+ tmp := s[i]
72
+
73
+ j := i - 1
74
+
75
+
76
+
77
+ for j >= 0 {
78
+
79
+ if tmp < s[j] {
80
+
81
+ s[j+1] = s[j]
82
+
83
+ s[j] = tmp
84
+
85
+ j--
86
+
87
+ } else {
88
+
89
+ break
90
+
91
+ }
92
+
93
+ }
94
+
95
+ }
96
+
97
+ }
98
+
99
+ ```
100
+
101
+
102
+
103
+ ```go
104
+
105
+ package main
106
+
107
+
108
+
109
+ import "fmt"
110
+
111
+
112
+
113
+ // Sort ...
114
+
115
+ func Sort(s interface{}) {
116
+
117
+ switch v := s.(type) {
118
+
119
+ case []int:
120
+
121
+ SortInt(v)
122
+
123
+ case []string:
124
+
125
+ SortString(v)
126
+
127
+ }
128
+
129
+ }
130
+
131
+
132
+
133
+ func main() {
134
+
135
+ is := []int{3, 2, 5}
136
+
137
+ Sort(is)
138
+
139
+ fmt.Println(is)
140
+
141
+ ss := []string{"oge", "moge", "hoge"}
142
+
143
+ Sort(ss)
144
+
145
+ fmt.Println(ss)
146
+
147
+ }
148
+
149
+ ```
150
+
151
+
152
+
153
+ 以下のようにgo-generateを行えば、
154
+
155
+ SortInt、SortStringという関数定義が自動生成されます。
156
+
157
+
158
+
159
+ ```shell
160
+
161
+ go generate .
162
+
163
+ ```
164
+
165
+
166
+
167
+ 以下のコマンドで実行したりできます
168
+
169
+ ```shell
170
+
171
+ go run .
172
+
173
+ ```

1

タイポ修正

2020/07/23 23:58

投稿

nobonobo
nobonobo

スコア3367

test CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
  実際にやってみたことがあるけれど結局実装を複雑に膨らませただけでいいことは何もありませんでした。
12
12
 
13
- 使われるかわからない実装をしてのためのテストを組むのはもったいないですしね。
13
+ 使われるかわからない実装をして、そのためのテストを組むのはもったいないですしね。
14
14
 
15
15
 
16
16