Go는 데이터의 암시적 유형 변환을 수행하지 않으며 수동으로 변환 작업만 수행할 수 있습니다. go 언어에서 데이터 유형 변환 방법을 살펴보겠습니다. .
간단한 변환 작업
데이터 유형을 변환하는 방법은 매우 간단합니다.
valueOfTypeB = typeB(valueOfTypeA)
예:
// 浮点数 a := 5.0 // 转换为int类型 b := int(a)
Go에서는 동일한 기본 구조를 가진 두 유형 간의 변환을 허용합니다. 예:
// IT类型的底层是int类型 type IT int // a的类型为IT,底层是int var a IT = 5 // 将a(IT)转换为int,b现在是int类型 b := int(5) // 将b(int)转换为IT,c现在是IT类型 c := IT(b)
그러나 참고:
1. 모든 데이터 유형을 변환할 수 있는 것은 아닙니다. 예를 들어, 알파벳 형식의 문자열 유형 "abcd"는 int로 변환될 수 있습니다. . 확실히 실패합니다
2. 낮은 정밀도를 높은 정밀도로 변환하는 것은 안전합니다. 그러나 높은 정밀도 값을 낮은 정밀도로 변환하면 정밀도가 손실됩니다. 예를 들어 int32를 변환합니다. int16 및 float32를 int
3으로 변환합니다. 이 간단한 변환 방법은 int(float)와 문자열을 서로 변환할 수 없습니다. strconv 패키지
strconv
strconv 패키지에서 제공하는 기능은 문자열과 단순 데이터 유형 간의 유형 변환 기능을 제공합니다. 단순 유형을 문자로 변환할 수 있습니다. 문자열은 다른 단순 유형으로 변환될 수도 있습니다.
이 패키지는 대략 여러 범주로 구분되는 많은 기능을 제공합니다:
1 문자열을 정수로 변환: Atoi()
2. int를 문자열로: Itoa()
🎜🎜#3. ParseTP 클래스 함수는 문자열을 TP 유형으로 변환합니다: ParseBool(), ParseFloat(), ParseInt(), ParseUint(). 문자열을 다른 유형으로 변환하는 것은 실패할 수 있으므로 이러한 함수에는 변환 여부를 나타내는 두 번째 반환 값이 있습니다. 성공적으로 변경되었습니다4. FormatTP 클래스 함수는 다른 유형을 문자열로 변환합니다: FormatBool(), FormatFloat(), FormatInt(), FormatUint()5. AppendTP 클래스 함수는 TP를 문자열로 변환한 다음 이를 슬라이스에 추가하는 데 사용됩니다: AppendBool(), AppendFloat(), AppendInt(), AppendUint() 및 기본적으로 사용되지 않는 기타 기능은 공식 매뉴얼을 참조하세요. go doc strconv 또는 https://golang.org/pkg/strconv/. 일부 유형을 변환할 수 없는 경우 오류가 보고됩니다. 반환되는 오류는 strconv 패키지에 자체 정의된 오류 유형입니다. 두 종류가 있습니다 오류:var ErrRange = errors.New("value out of range") var ErrSyntax = errors.New("invalid syntax")예를 들어 Atoi("a")를 사용하여 "a"를 int 유형으로 변환하는 것은 당연히 실패합니다. 만약에 print는 오류 정보를 출력하고 다음을 표시합니다:
strconv.Atoi: parsing "a": invalid syntax
string과 int 사이의 변환
가장 일반적인 것은 string과 int 사이의 변환입니다: 1.int가 문자열로 변환됨: Itoa()// Itoa(): int -> string println("a" + strconv.Itoa(32)) // a322.string이 int로 변환됨: Atoi()
func Atoi(s string) (int, error)int로 변환되지 않으므로 이 함수에는 두 개의 반환 값이 있습니다. 첫 번째 반환 값은 int로 변환됩니다. 값, 두 번째 반환 값은 변환 성공 여부를 결정합니다.
// Atoi(): string -> int i,_ := strconv.Atoi("3") println(3 + i) // 6 // Atoi()转换失败 i,err := strconv.Atoi("a") if err != nil { println("converted failed") }
Parse 클래스 함수
Parse 클래스 함수는 문자열을 특정 유형의 값으로 변환하는 데 사용됩니다: ParseBool(), ParseFloat () ,ParseInt(), ParseUint(). 문자열을 다른 유형으로 변환하는 데 실패할 수 있으므로 이 함수에는 두 개의 반환 값이 있으므로 첫 번째 반환 값이 저장됩니다. 변환된 값, 두 번째 반환 값에 따라 변환 성공 여부가 결정됩니다.b, err := strconv.ParseBool("true") f, err := strconv.ParseFloat("3.1415", 64) i, err := strconv.ParseInt("-42", 10, 64) u, err := strconv.ParseUint("42", 10, 64)ParseFloat()는 float64 유형의 부동 소수점 숫자만 받을 수 있습니다. ParseInt() 및 ParseUint()에는 3개의 매개변수가 있습니다.
func ParseInt(s string, base int, bitSize int) (i int64, err error) func ParseUint(s string, base int, bitSize int) (uint64, error)bitSize 매개변수는 변환할 int/uint 비트를 나타냅니다. 유효한 값은 0, 8입니다. 16, 32,64. 비트크기=0인 경우 int 또는 uint 유형으로의 변환을 나타내는 시간입니다. 예를 들어, bitSize=8은 변환된 값의 유형이 int8 또는 uint8임을 의미합니다. 기본 매개변수는 주어진 문자열을 구문 분석하는 데 사용할 기본 방법을 나타냅니다. 유효한 값은 0과 2-36입니다. 베이스=0인 경우 , 문자열의 접두사가 구문 분석할 기준을 결정하는 데 사용됨을 나타냅니다. 0x로 시작하는 것은 16진수로 구문 분석되고 0으로 시작하는 것은 구문 분석됩니다. 8진수 형식으로 구문 분석되고, 나머지는 10진수 형식으로 구문 분석됩니다. 10진수 모드에서 "-42"를 구문 분석하고 int64 유형으로 저장합니다.
i, _ := strconv.ParseInt("-42", 10, 64)5진수 모드에서 "23"을 구문 분석하고 int64 유형으로 저장합니다. #🎜 🎜#
i, _ := strconv.ParseInt("23", 5, 64) println(i) // 13
5진수에서 23은 2를 곱하고 3을 더한다는 의미이므로 해당 십진수는 5*2+3=13입니다.
23을 16진수로 구문 분석하고 int64 형식으로 저장합니다.
i, _ := strconv.ParseInt("23", 16, 64) println(i) // 35
16진수에서 23은 2를 곱하고 3을 더하는 것을 의미하므로 해당 십진수는 16*입니다. 2+3=35.
23을 16진수로 구문 분석하고 int64 형식으로 저장합니다.
i, _ := strconv.ParseInt("23", 15, 64) println(i) // 33
16진수에서 23은 2를 곱하고 3을 더하는 것을 의미하므로 해당하는 10진수는 15*입니다. 2+3=33.
Format 클래스 함수주어진 유형을 문자열 유형으로 포맷합니다: FormatBool(), FormatFloat(), FormatInt(), FormatUint().
s := strconv.FormatBool(true) s := strconv.FormatFloat(3.1415, 'E', -1, 64) s := strconv.FormatInt(-42, 16) s := strconv.FormatUint(42, 16)
FormatInt() 및 FormatUint()에는 두 개의 매개변수가 있습니다.
func FormatInt(i int64, base int) string func FormatUint(i uint64, base int) string
두 번째 매개변수 기준은 첫 번째 매개변수를 변환할 기준을 지정하며 유효한 값은 2<=입니다. 베이스<=36. 지정할 때 의 기본 숫자가 10보다 큰 경우 10을 초과하는 값은 문자 a-z로 표시됩니다. 예를 들어 16진수에서는 10~15의 숫자가 각각 사용됩니다. a-f는 16진수 시스템에서 값 10-16이 각각 a-g로 표시됨을 의미합니다.
예: FormatInt(-42, 16)은 -42를 16진수로 변환하는 것을 의미하며 변환 결과는 -2a입니다.
FormatFloat()에는 많은 매개변수가 있습니다:
func FormatFloat(f float64, fmt byte, prec, bitSize int) string
bitSize表示f的来源类型(32:float32、64:float64),会据此进行舍入。
fmt表示格式:'f'(-ddd.dddd)、'b'(-ddddp±ddd,指数为二进制) 、'e'(-d.dddde±dd,十进制指数)、'E'(-d.ddddE±dd,十进制指数)、 'g'(指数很大时用'e'格式,否则'f'格式)、'G'(指数很 大时用'E'格式,否则'f'格式)。
prec控制精度(排除指数部分):对'f'、'e'、'E',它表示小 数点后的数字个数;对'g'、'G',它控制总的数字个数。如果prec 为-1,则 代表使用最少数量的、但又必需的数字来表示f。
Append类函数
AppendTP类函数用于将TP转换成字符串后append到一个slice中:AppendBool()、 AppendFloat()、AppendInt()、AppendUint()。
Append类的函数和Format类的函数工作方式类似,只不过是将转换后的结果追加到一个 slice中。
package main import ( "fmt" "strconv" ) func main() { // 声明一个slice b10 := []byte("int (base 10):") // 将转换为10进制的string,追加到slice中 b10 = strconv.AppendInt(b10, -42, 10) fmt.Println(string(b10)) b16 := []byte("int (base 16):") b16 = strconv.AppendInt(b16, -42, 16) fmt.Println(string(b16)) }
输出结果:
int (base 10):-42 int (base 16):-2a
更多golang知识请关注golang教
程栏目。
위 내용은 Go 언어 데이터 유형 변환 튜토리얼의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!