[关闭]
@adamhand 2019-01-30T10:07:25.000000Z 字数 2169 阅读 1289

golang--基本数据类型


golang的数据类型

golang的数据类型大概如下图所示:



这里主要谈论基本数据类型:数字、字符串和布尔。它们又可以细分为如下:

数字类型

整型

有符号整型

int8、int16、int32和int64分别表示8位、16位、32位和64位的有符号整型。而int表示的位数和编译器以及平台有关,一般在32位系统上为32位,在64位系统上为64位。注意,int和int32或64并不等价,虽然它们表示的位数是相同的,它们之间转换时需要显式类型转换

  1. package main
  2. import (
  3. "fmt"
  4. "unsafe"
  5. )
  6. func main() {
  7. var a int = 89
  8. b := 95
  9. fmt.Println("value of a is", a, "and b is", b)
  10. fmt.Printf("type of a is %T, size of a is %d", a, unsafe.Sizeof(a)) // a 的类型和大小
  11. fmt.Printf("\ntype of b is %T, size of b is %d", b, unsafe.Sizeof(b)) // b 的类型和大小
  12. }

在32位系统上,以上程序会输出:

  1. value of a is 89 and b is 95
  2. type of a is int, size of a is 4
  3. type of b is int, size of b is 4

无符号整型

uint8、uint16、uint32和uint64分别表示8位、16位、32位和64位的无符号整型。uint表示的位数和编译器以及平台有关,一般在32位系统上为32位,在64位系统上为64位。

浮点型

下面一个简单程序演示了整型和浮点型的运用。

  1. package main
  2. import (
  3. "fmt"
  4. )
  5. func main() {
  6. a, b := 5.67, 8.97
  7. fmt.Printf("type of a %T b %T\n", a, b)
  8. sum := a + b
  9. diff := a - b
  10. fmt.Println("sum", sum, "diff", diff)
  11. no1, no2 := 56, 89
  12. fmt.Println("sum", no1+no2, "diff", no1-no2)
  13. }

结果为:

  1. type of a float64 b float64
  2. sum 14.64 diff -3.3000000000000007
  3. sum 145 diff -33

复数类型

内建函数 complex 用于创建一个包含实部和虚部的复数。complex 函数的定义如下:

  1. func complex(r, i FloatType) ComplexType

该函数的参数分别是实部和虚部,并返回一个复数类型。实部和虚部应该是相同类型,也就是 float32 或 float64。如果实部和虚部都是 float32 类型,则函数会返回一个 complex64 类型的复数。如果实部和虚部都是 float64 类型,则函数会返回一个 complex128 类型的复数。

还可以使用简短语法来创建复数:

  1. c := 6 + 7i

下面我们编写一个简单的程序来理解复数。

  1. package main
  2. import (
  3. "fmt"
  4. )
  5. func main() {
  6. c1 := complex(5, 7)
  7. c2 := 8 + 27i
  8. cadd := c1 + c2
  9. fmt.Println("sum:", cadd)
  10. cmul := c1 * c2
  11. fmt.Println("product:", cmul)
  12. }

结果为:

  1. sum: (13+34i)
  2. product: (-149+191i)

其他数字类型

string 类型

string类型是不可变的,和Java相似,每对一个string类型的变量进行操作,都会生成一个新的变量。

两个字符串连接操作可以使用加号"+"来实现,如下:

  1. package main
  2. import (
  3. "fmt"
  4. )
  5. func main() {
  6. first := "Naveen"
  7. last := "Ramanathan"
  8. name := first +" "+ last
  9. fmt.Println("My name is",name)
  10. }

结果为:

  1. My name is Naveen Ramanathan

类型转换

Go 没有自动类型提升或类型转换。比如下面的例子会出现错误:

  1. package main
  2. import (
  3. "fmt"
  4. )
  5. func main() {
  6. i := 55 //int
  7. j := 67.8 //float64
  8. sum := i + j //不允许 int + float64
  9. fmt.Println(sum)
  10. }

可以使用强制类型转换,把上面的例子改为下面所示,就没有错误了。

  1. package main
  2. import (
  3. "fmt"
  4. )
  5. func main() {
  6. i := 55 //int
  7. j := 67.8 //float64
  8. sum := i + int(j) //j is converted to int
  9. fmt.Println(sum)
  10. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注