Go语言之旅:基本类型

幸运草 2020年4月14日23:10:20前端框架评论阅读模式
Go 内置了以下基本类型:

  • 布尔
    • bool
  • 字符串
    • string
  • 整数
    • int int8 int16 int32 int64
    • uint uint8 uint16 uint32 uint64
  • 字节
    • byte , uint8 的别名
  • Unicode
    • rune , int32 别名
  • 浮点
    • float32 float64
  • 复数
    • complex64 complex128
package main

import (
    "fmt"
    "math/cmplx"
)

var (
    ToBe    bool        = false
    MaxInt  uint64      = 1 << 64 -1
    z       complex128  = cmplx.Sqrt(-5 +12i)
)

func main() {
    fmt.Printf("Type: %T Value: %vn", ToBe, ToBe)
    fmt.Printf("Type: %T Value: %vn", MaxInt, MaxInt)
    fmt.Printf("Type: %T Value: %vn", z, z)
}

运行结果如下:

$ go run basic-types.go
Type: bool Value: false
Type: uint64 Value: 18446744073709551615
Type: complex128 Value: (2+3i)

例子展示了几种不同类型变量的用法。 注意到,跟 import语句 一样,变量申明可以批量写到一个代码块里。

一般来说,int 、 uint 以及 uintptr 类型在 32 位机器上是 32 位长; 在 64 位机器上则是 64 位长。 需要使用整数时, int 类型是首选, 除非你有特别的理由一定要用 定长 或者 无符号 类型。

零值

变量申明时没有显式赋初始值,则默认是“ 零 ”。

不同的类型有不同的“ 零 ”:

  • 对于数值类型是 0 ;
  • 对于布尔类型是 false ;
  • 对于字符串类型是 "" (空字符串);
package main

import "fmt"

func main() {
    var i int
    var f float64
    var b bool
    var s string
    fmt.Printf("%v %v %v %qn", i, f, b, s)
}

运行结果如下:

$ go run zero.go
0 0 false ""

类型转换

表达式 ( expression ) T(v) 将值 v 转换成类型 T , 这就是所谓的 类型转换 ( type conversions )。

这是一些数值类型转换:

var i int = 42
var f float64 = float64(i)
var u uint = uint(f)

或者简写成:

i := 42
f := float(i)
u := uint(f)

跟 C 语言有所不同, Go 在不同类型之间赋值,需要显式类型转换。 不信,将下面例子中 float64 和 unit 类型转换移除,看看发生什么?

package main

import (
    "fmt"
    "math"
)

func main() {
    var x, y int = 3, 4
    var f float64 = math.Sqrt(float64(x*x + y*y))
    var z uint = uint(f)
    fmt.Println(x, y, z)
}

运行结果如下:

$ go run type-conversions.go
3 4 5

类型推理

变量类型通过右边的值推理而来。

如果申明右边的值是有类型的,那么新变量也是一样的类型:

var i int
j := i  // j is an int as well

如果右边只是一个数值常量,没有具体类型,那么新变量可能是 int 、 float64 以及 complex128 三种类型中的一种,取决于常量的精度。

i := 42             // int
f := 3.142          // float64
g := 0.867 + 0.5i   // complex128

接下来做个实验吧! 改变例子中 v 的初始值,观察它是如何影响变量类型的:

package main

import "fmt"

func main() {
    v := 42     // change me!
    fmt.Printf("v is of type %Tn", v)
}

特别声明:以上文章内容仅代表作者本人观点,不代表变化吧观点或立场。如有关于作品内容、版权或其它问题请于作品发表后的30日内与变化吧联系。

  • 赞助本站
  • 微信扫一扫
  • weinxin
  • 加入Q群
  • QQ扫一扫
  • weinxin
幸运草
Go语言接口规则 前端框架

Go语言接口规则

Go语言接口规则 接口是一个或多个方法签名的集合。任何类型的方法集中只要拥有该接口对应的全部方法签名。就表示它 "实现" 了该接口,无须在该类型上显式声明实现了哪个接口。对应方法,是指有相同名称、参数...
Go语言中处理 HTTP 服务器 前端框架

Go语言中处理 HTTP 服务器

1 概述 包 net/http 提供了HTTP服务器端和客户端的实现。本文说明关于服务器端的部分。 快速开始: package main import (   "log"   "net/http" )...

发表评论