Golang은 유형 강제 프로그래밍 언어입니다. 즉, 변수 할당이나 매개변수 전달을 수행할 때 동일한 데이터 유형을 사용해야 합니다. 그러나 한 데이터 유형을 다른 데이터 유형으로 변환해야 하는 상황이 있습니다. 이를 위해서는 유형 캐스팅이 필요합니다.
이 글에서는 Golang의 유형 강제의 개념, 사용법 및 예방 조치에 대해 설명합니다.
유형 캐스팅 개념
유형 캐스팅은 한 데이터 유형의 값을 다른 데이터 유형의 값으로 변환하는 것으로, 일반적으로 다음과 같은 상황에서 발생합니다.
Golang에서는 유형 캐스팅을 사용하여 하나의 기본 데이터 유형을 다른 데이터 유형으로 변환하거나 하나의 사용자 정의 유형을 다른 사용자 정의 유형으로 변환하는 데 사용할 수 있습니다.
기본 데이터 유형 변환
Golang에는 캐스팅할 수 있는 몇 가지 기본 데이터 유형이 있습니다. 여기에는 정수, 부동 소수점 및 부울이 포함됩니다.
은 하나의 정수 유형을 다른 정수 유형으로 변환할 수 있습니다. 원래 데이터 유형이 대상 유형보다 크면 잘림이 발생합니다. 원래 데이터 유형이 대상 유형보다 작으면 확장이 발생합니다.
예:
var a int32 = 100
var b int64
b = int64(a)
fmt.Printf("%T, %vn", b, b)
출력 결과는 다음과 같습니다.
int64 , 100
하나의 부동 소수점 유형을 다른 부동 소수점 유형으로 변환할 수 있습니다. 원래 데이터 유형이 대상 유형과 다르면 정밀도가 손실됩니다.
예:
var a float32 = 10.5
var b float64
b = float64(a)
fmt.Printf("%T, %vn", b, b)
출력 결과는 다음과 같습니다.
float64 , 10.5
은 Boolean 값을 정수형이나 문자열형으로 변환할 수 있습니다. true를 1로, false를 0으로 변환합니다.
예:
var a bool = true
var b int
b = int(a)
fmt.Printf("%T, %vn", b, b)
출력 결과는 다음과 같습니다.
int , 1
사용자 정의 유형 변환
Golang에서는 사용자 정의 유형 간의 변환이 명시적으로 이루어져야 합니다. 하나의 사용자 정의 유형을 다른 유형으로 변환하려면 다음 두 가지 방법을 구현해야 합니다.
예:
type Student struct{
Name string Age int
}
func(s Student) tostring() string{
return fmt.Sprintf("Name: %s, Age: %d", s.Name, s.Age)
}
type Teacher struct{
Name string Age int
}
func(t Teacher) tostring ( ) string{
return fmt.Sprintf("Name: %s, Age: %d", t.Name, t.Age)
}
func main() {
s := Student{Name: "小明", Age: 18} t := Teacher(s) // 将Student类型转换为Teacher类型 fmt.Println(t.tostring()) s2 := Student(t) // 将Teacher类型转换为Student类型 fmt.Println(s2.tostring())
}
출력 결과는 다음과 같습니다.
Name: Xiao Ming, Age: 18
Name: , Age: 0
참고: 추가하기 전 사용자 정의 유형 다른 유형으로 변환할 때 두 유형 모두 동일한 필드와 메소드를 가지고 있는지 확인해야 합니다.
유형 어설션
유형 캐스팅 외에도 Golang은 인터페이스에서 값의 실제 유형을 얻기 위해 유형 어설션도 제공합니다. Golang에서 인터페이스는 보편적인 유형 변환 메커니즘을 제공할 수 있기 때문에 매우 중요한 개념입니다. 인터페이스에서 값을 가져와야 하는 경우 유형 어설션을 사용해야 합니다.
예:
var x 인터페이스{} = 1
i, ok := x.(int)
fmt.Println(i, ok)
출력 결과는 다음과 같습니다.
1 true
인터페이스가 값 x에 int 유형의 값이 포함되어 있으면 변수 i에 값이 포함되고 변수 ok가 true가 됩니다. 인터페이스 값 x가 int 유형의 값을 포함하지 않는 경우 변수 i는 기본값 0을 포함하고 변수 ok는 false가 됩니다.
참고: 어설션할 수 없는 인터페이스 유형의 경우 유형 어설션이 패닉 상태가 됩니다. 따라서 유형 주장을 하기 전에 유형 판단을 사용하여 인터페이스의 실제 유형을 확인해야 합니다.
요약
Golang은 데이터 유형 강제 변환을 위한 간단하고 효과적인 메커니즘을 제공합니다. 어떤 경우든 데이터 유형을 캐스팅할 때는 정밀도 손실이나 잘림이 발생할 수 있으므로 주의해야 합니다. 사용자 정의 유형을 다른 유형으로 변환하는 경우 두 유형 모두 동일한 필드와 메소드를 갖고 있는지 확인해야 하며 변환 메소드를 명시적으로 구현해야 합니다. 유형 어설션은 인터페이스에서 실제 유형을 가져오는 방법입니다. 요약하자면, 적절한 데이터 유형 캐스팅과 유형 어설션은 Golang 프로그래머가 코드의 효율성과 가독성을 향상시키는 데 큰 도움이 될 수 있습니다.
위 내용은 Golang의 유형 강제 개념에 대해 토론의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!