mirror of
https://github.com/teivah/100-go-mistakes.git
synced 2026-06-21 17:07:18 +08:00
68 lines
1.1 KiB
Go
68 lines
1.1 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"sort"
|
|
)
|
|
|
|
func getKeys(m any) ([]any, error) {
|
|
switch t := m.(type) {
|
|
default:
|
|
return nil, fmt.Errorf("unknown type: %T", t)
|
|
case map[string]int:
|
|
var keys []any
|
|
for k := range t {
|
|
keys = append(keys, k)
|
|
}
|
|
return keys, nil
|
|
case map[int]string:
|
|
// ...
|
|
}
|
|
|
|
return nil, nil
|
|
}
|
|
|
|
func getKeysGenerics[K comparable, V any](m map[K]V) []K {
|
|
var keys []K
|
|
for k := range m {
|
|
keys = append(keys, k)
|
|
}
|
|
return keys
|
|
}
|
|
|
|
type customConstraint interface {
|
|
~int | ~string
|
|
}
|
|
|
|
func getKeysWithConstraint[K customConstraint, V any](m map[K]V) []K {
|
|
return nil
|
|
}
|
|
|
|
type Node[T any] struct {
|
|
Val T
|
|
next *Node[T]
|
|
}
|
|
|
|
func (n *Node[T]) Add(next *Node[T]) {
|
|
n.next = next
|
|
}
|
|
|
|
type SliceFn[T any] struct {
|
|
S []T
|
|
Compare func(T, T) bool
|
|
}
|
|
|
|
func (s SliceFn[T]) Len() int { return len(s.S) }
|
|
func (s SliceFn[T]) Less(i, j int) bool { return s.Compare(s.S[i], s.S[j]) }
|
|
func (s SliceFn[T]) Swap(i, j int) { s.S[i], s.S[j] = s.S[j], s.S[i] }
|
|
|
|
func main() {
|
|
s := SliceFn[int]{
|
|
S: []int{3, 2, 1},
|
|
Compare: func(a, b int) bool {
|
|
return a < b
|
|
},
|
|
}
|
|
sort.Sort(s)
|
|
fmt.Println(s.S)
|
|
}
|