Go 语言提供了丰富的基本类型,包括整数类型、浮点数类型、字符串类型、布尔类型等。在编程过程中,常常需要在不同的基本类型之间进行转换。Go 是一种强类型语言,不会自动进行隐式类型转换,因此需要显式地进行类型转换。

整数类型之间的转换

整数类型包括 int, int8, int16, int32, int64, 以及它们对应的无符号类型 uint, uint8, uint16, uint32, uint64。你可以显式地进行不同整数类型之间的转换:

package main

import (
	"fmt"
)

func main() {
	var a int = 100
	var b int32 = int32(a)
	var c int64 = int64(a)
	var d uint = uint(a)

	fmt.Println(b) // 输出: 100
	fmt.Println(c) // 输出: 100
	fmt.Println(d) // 输出: 100
}

整数和浮点数之间的转换

整数和浮点数之间的转换需要显式进行:

package main

import (
	"fmt"
)

func main() {
	var a int = 42
	var b float64 = float64(a) // 整数转换为浮点数
	var c int = int(b)         // 浮点数转换为整数

	fmt.Println(b) // 输出: 42.0
	fmt.Println(c) // 输出: 42
}

字符串和其他基本类型之间的转换

Go 提供了标准库 strconv 来处理字符串和其他基本类型之间的转换。

字符串转换为整数

package main

import (
	"fmt"
	"strconv"
)

func main() {
	var s string = "123"
	n, err := strconv.Atoi(s)
	if err != nil {
		fmt.Println(err)
	} else {
		fmt.Println(n) // 输出: 123
	}
}

整数转换为字符串

package main

import (
	"fmt"
	"strconv"
)

func main() {
	var n int = 456
	var s string = strconv.Itoa(n)
	fmt.Println(s) // 输出: "456"
}

字符串转换为浮点数

package main

import (
	"fmt"
	"strconv"
)

func main() {
	var s string = "3.14"
	f, err := strconv.ParseFloat(s, 64)
	if err != nil {
		fmt.Println(err)
	} else {
		fmt.Println(f) // 输出: 3.14
	}
}

浮点数转换为字符串

package main

import (
	"fmt"
)

func main() {
	var f float64 = 1.618
	var s string = fmt.Sprintf("%f", f)
	fmt.Println(s) // 输出: "1.618000"
}

布尔类型和字符串之间的转换

字符串转换为布尔类型

package main

import (
	"fmt"
	"strconv"
)

func main() {
	var s string = "true"
	b, err := strconv.ParseBool(s)
	if err != nil {
		fmt.Println(err)
	} else {
		fmt.Println(b) // 输出: true
	}
}

布尔类型转换为字符串

package main

import (
	"fmt"
)

func main() {
	var b bool = true
	var s string = strconv.FormatBool(b)
	fmt.Println(s) // 输出: "true"
}

注意事项

  1. 类型转换需要显式进行:Go 不会自动进行隐式类型转换。
  2. 可能的精度丢失:在转换过程中,尤其是浮点数和整数之间的转换时,可能会发生精度丢失。
  3. 错误处理:在字符串和其他基本类型之间的转换时,可能会遇到错误,需要进行错误处理。

通过显式类型转换,Go 程序能够保持类型安全性,减少潜在的类型错误,同时也增加了代码的可读性和维护性。