"21st Century C"에서 Ben Klemens는 C가 서명 된 숫자를 부호없는 기호로 자동 변환하는 방법을 설명합니다 (예 : 비교 식). Go는 이와 동일한 위험한 행동을 공유합니까? 아니면 Go가 다르게 접근합니까?C의 위험한 암시 적 -> 부호없는 변환을 수정하거나 공유합니까?
1
A
답변
2
Go에는 암시 적 변환이 없습니다. 다른 유형의 두 값을 비교하거나 산술을 수행하려면 수동 및 명시 적 유형 변환을 수행해야합니다.
a := 3 // numerical constant 3 defaults to int
b := uint(2)
c := a < b // compiler error
d := a < int(b) // OK
2
go는 비교를 포함하여 모든 작업에 explicit type conversions 만 사용합니다. 예 확실히, 그래서
if int64(a) == b {...}
을 :
tmp/sandbox428200464/main.go:13: invalid operation: a == b (mismatched types uint64 and int64)
비교 명시 적으로 같은 유형의 변수를 캐스팅해야 할 일 :
var a uint64
var b int64
a = 1
b = 1
if a == b {
fmt.Println("Equal")
}
이 조각은 오류가 발생할 것입니다, 그렇게 말할 수 있다면 고정되어 있습니다.
Playgound에 대한 스 니펫.