"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에 대한 스 니펫.
관련 문제
- 1. 암시 적 변환을 DateTime에서 암시 적 변환을 사용하여 Comparable로 변환 할 수 없습니다.
- 2. 클래스에 대해 암시 적 변환을 얼마나 자주합니까?
- 3. rvalue 레퍼런스는 암시 적 변환을 허용합니까?
- 4. char에서 int로 암시 적 변환을 방지하려면 어떻게해야합니까?
- 5. 암시 적 변환을 사용할 수 있는지 테스트합니다.
- 6. 스칼라 암시 적 변환을 주문 하시겠습니까?
- 7. 암시 적 변환을 사용해야 전제 조건을 적용해야합니까?
- 8. 내가 Tuple2의 암시 적 변환을 작성하려면 2.8
- 9. Swift는 암시 적 변환을 지원합니까? 예를 들어
- 10. 암시 적 변환을 사용하는 일반 Serializable 확장
- 11. 스칼라가 내 암시 적 변환을 두 번 발견하여 "모호한 암시 적"오류가 발생합니다.
- 12. 암시 적 매개 변수를 암시 적 변환을 수행 할 때 명시 적으로 전달할 수없는 이유는 무엇입니까?
- 13. 내가 내 뷰 모델 클래스 (VMSalesRep)로 암시 적 변환을 추가하려고 암시 적 변환
- 14. 암시 적 변환과 암시 적 클래스
- 15. 암시 적 키워드
- 16. 암시 적 변환이 정수 정밀도를 잃습니다. '부호없는 long'을 'int'로 - 오류
- 17. 암시 적 변환 오퍼레이터
- 18. 암시 적 변환 찾기
- 19. c의 부호없는 정수
- 20. 인터페이스에서 다른 유형으로 암시 적 변환을 작성하는 방법?
- 21. 암시 적 변환을 사용하여 C++ 함수 템플릿 인스턴스화를 시뮬레이트합니다.
- 22. 암시 적 유형 변환을 통한 점진적 산술 구현
- 23. 디버깅을 돕기 위해 반환 형식에 암시 적 변환을 사용해야합니까?
- 24. Option Strict On 'String'에서 'Boolean'으로의 암시 적 변환을 허용하지 않습니다.
- 25. 내 스칼라 테스트에서 암시 적 변환을 재정의하는 방법은 무엇입니까?
- 26. C++은 조건에서 bool 로의 암시 적 변환을 사용합니까?
- 27. 템플릿 별칭의 암시 적 값 보존 변환을 방지하는 방법은 무엇입니까?
- 28. 템플릿 유형 공제가 암시 적 배열 대 포인터 변환을 수행합니다.
- 29. 제네릭 형식으로의 암시 적 변환을 예상하는 함수 모의
- 30. 숫자 형식 간의 산술을 허용하는 암시 적 변환을 설정하는 방법?