Go에서 새 유형을 정의하는 경우 예 :
type MyInt int
그런 다음 MyIntint를 기대하는 함수에 를 전달할 수 없으며 그 반대의 경우도 마찬가지입니다.
func test(i MyInt) {
//do something with i
}
func main() {
anInt := 0
test(anInt) //doesn't work, int is not of type MyInt
}
좋아. 그런데 왜 똑같은 것이 기능에 적용되지 않는 것일까 요? 예 :
type MyFunc func(i int)
func (m MyFunc) Run(i int) {
m(i)
}
func run(f MyFunc, i int) {
f.Run(i)
}
func main() {
var newfunc func(int) //explicit declaration
newfunc = func(i int) {
fmt.Println(i)
}
run(newfunc, 10) //works just fine, even though types seem to differ
}
이제 첫 번째 예제에서해야하는 것처럼 명시 적 newfunc으로 type 으로 캐스팅 할 필요가 없기 때문에 불평하지 않습니다 MyFunc. 일관성이 없어 보입니다. 그럴만 한 이유가 있다고 확신합니다. 누구든지 나를 깨달을 수 있습니까?
내가 묻는 이유는 주로 이런 방식으로 다소 긴 함수 유형 중 일부를 단축하고 싶지만이 작업을 수행하는 것이 예상되고 수용 가능한지 확인하고 싶습니다. :)
typeScala보다 Go에서 더 유용합니다. 스칼라 에는 유형 별칭 만 있습니다.