Golang学习笔记-1.4 数据类型

xunk1900 · · 665 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

本文系第四篇Golang语言学习教程
在Go语言中,数据类型用于声明函数和变量。
Go语言按类别有以下几种数据分类

序号 类型 描述
1 bool bool类型表示一个布尔值,值为truefalse
2 数字类型 整型int和浮点型float32、float64.Go支持整型和浮点型数字,并且原生支持复数。
3 字符串类型 一串固定长度字符连接起来的序列,Go语言中字符串由单个字节连接起来,使用UTF-8编码标识Unicode文本。
4 派生类型 包括:
(a) 指针类型(Pointer)
(b) 数组类型
(c) 结构化类型(struct)
(d) Channel 类型
(e) 函数类型
(f) 切片类型
(g) 接口类型(interface)
(h) Map 类型

bool

bool类型表示一个布尔值,值为truefalse
例:

package main 

import . "fmt"

func main(){
        a := true //定义 a为true
        b := false //定义 b为false
        Println("a is",a, "b is",b)
        c := a && b //c = a 和 b做与运算
        Println("c is",c)
        d := a || b //d = a 和 b做或运算 
        Println("d is",d)
}

以上程序运行结果如下:

a is true b is false
c is false
d is true

数字类型

序号 类型和描述
1 uint8
无符号8位整型(0 - 255)
2 uint16
无符号16位整型(0 - 65535)
3 uint32
无符号32位整型(0 - 4294967295)
4 uint64
无符号64位整型(0 - 18446744073709551615)
5 int8
有符号8位整型(-128 - 127)
6 int16
有符号16位整型(-32768 - 32767)
7 int32
有符号整型32位(-2147483648 - 2147483647)
8 int64
有符号整型64位(-9223372036854775808 - 9223372036854775807)

int:根据不同的底层平台(Underlying Platform),表示 32 或 64 位整型。除非对整型的大小有特定的需求,否则你通常应该使用 int 表示整型。
大小:在 32 位系统下是 32 位,而在 64 位系统下是 64 位。

例:

package main

import (
        "fmt"
        "unsafe"
)

func main(){
        a,b := 95,80 //给 a 和 b 赋值
        fmt.Println("values of a is",a, "values of b is",b)
        fmt.Printf("the type of a is %T,the size of a is %d\n",a, unsafe.Sizeof(a))  //输出 a 的类型和类型大小
        fmt.Printf("the type of b is %T,the size of b is %d\n",b, unsafe.Sizeof(b)) //输出 b 的类型和类型大小,\n换行
}

在 Printf 方法中,使用 %T 格式说明符(Format Specifier),可以打印出变量的类型。Go 的 unsafe 包提供了一个 Sizeof 函数,该函数接收变量并返回它的字节大小。unsafe 包应该小心使用,因为使用 unsafe 包可能会带来可移植性问题。不过出于本教程的目的,我们是可以使用的。

上面程序会输出变量 a 和 b 的类型和大小。格式说明符 %T 用于打印类型,而 %d 用于打印字节大小。

以上程序运行结果如下:

values of a is 95 values of b is 80

the type of a is int,the size of a is 8
the type of b is int,the size of b is 8

从上面的输出,我们可以推断出 a 和 b 为 int 类型,且大小都是 64 位(8 字节)。

浮点型

package main

import "fmt"

func main(){
        a,b := 11.5,55.98 //自动推断 a, b 的类型
        fmt.Printf("Type of is a is %T, type of b is %T\n",a,b) //输出 a, b 的类型
        sum := a+b //将a+b赋值给sum
        diff := a-b //将a-b赋值给diff
        fmt.Println("sum",sum, "diff",diff) //输出sum、diff
}

以上程序简单演示了浮点型的运用。
运行结果如下:

Type of is a is float64, type of b is float64
sum 67.47999999999999 diff -44.48

复数类型

Go语言提供了两种精度的复数类型:complex64和complex128,分别对应float32和float64两种浮点数精度。
内置的complex函数用于构建复数,内建的real和imag函数分别返回复数的实数和虚数。
例:

package main

import ( "fmt" )

func get_real_imag() {
        value4 := 1.2 + 10i
        var r = real(value4) //返回复数的实部: 1.2
        var i = imag(value4) //返回复数的虚部: 10
        fmt.Println("the real is",r, "and the imag is",i)
}

func main() {
        get_real_imag()
}

以上运行结果如下:

the real is 1.2 and the imag is 10

类型转换

Go 有着非常严格的强类型特征。Go 没有自动类型提升或类型转换。
例:

package main
  
import "fmt"

func main(){
        i := 1 // i 的类型为int
        j := 5.5  // j 的类型为float64
        sum := i + j //赋值sum为 i + j
        fmt.Println(sum)
}

以上程序会报错:

i + j (mismatched types int and float64)

试图将两个不同类型的数相加是不行的,所以需要将 i 转换成float64类型
例:

package main
  
import "fmt"

func main(){
        i := 1 // i 的类型为int
        j := 5.5  // j 的类型为float64
        sum := float64(i) + j //赋值sum为 i + j,转换 i 的类型为float64
        fmt.Println(sum)
}

以上运行结果如下:

6.5

注意:本例中将 i 转换为float64,运算正常。若将 j 转换为int整数类型,则 j 变成整数,输出结果为 6。

字符串类型(string)

在Golang中,字符串是字节的集合。
例:

package main
  
import "fmt"

func main(){
        first := "Hello,everyone!" //first 赋值
        second := "This is ergouzi's Mac " //second 赋值
        all := first + " " + second // + 操作符用于拼接字符,将first、空格、second拼接在一起赋值给all
        fmt.Println(all)
}

以上运行结果如下:

Hello,everyone! This is ergouzi's Mac

以上为学习golang数据类型笔记


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:xunk1900

查看原文:Golang学习笔记-1.4 数据类型

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

665 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传