go语言基础知识-数据类型、变量和常量

本文将介绍go语言基本数据类型(整型、浮点型、字符串、布尔型等)、常量、变量,下文通过实例和文字描述上述内容。
go语言基础知识-数据类型、变量和常量

1 基本数据类型

1.1 整型

整型分为无符号整型和有符号整型
uint8 无符号8位整型 (取值范围:0到255)
uint16 无符号16位整型 (取值范围:0到65535)
uint32 无符号32位整型 (取值范围:0到4294967295 约43亿)
uint64 无符号64位整型 (取值范围:0到18446744073709551615)

int8 有符号8位整型 (取值范围:-128到127)
int16 有符号16位整型 (取值范围:-32768到32767)
int32 有符号32位整型 (取值范围:-2147483648到2147483647 约43亿)
int64 有符号64位整型 (取值范围:-9223372036854775808 到9223372036854775807)

提示:
如果是64位操作系统, int默认是int64;32位操作系统默认是int32

1.2 浮点型

浮点型分为浮点数、实数和虚数
float32 32位浮点数
float64 64位浮点数
complex64 32位实数和虚数
complex128 64位实数和虚数

提示:
float不存在这个类型

1.3 字符串

字符串为一串固定长度的字符组合起来的字符序列。GO语言的字节使用UTF-8编码标识Unicode文本

1.4 布尔型

布尔型的值为常量true或false

1.5 其它派生类型

指针类型 (pointer)
数组类型 (array)
结构体类型(struct)
函数类型 (func)
切片类型 (slice)
集合类型 (set)
通道类型 (channel)
接口类型 (interface)

2 变量和常量

2.1 变量

三种声明方式

(1)指定变量类型,使用默认值(不赋值)
如: var v_val int (v_val默认为0)
提示:

  • bool型默认为false;
  • int 型默认为0;
  • float型默认为0;
  • pointer型默认为nil;

(2)根据值自动判定变量类型
如: var v_val = 10 (v_val默认为int型)

(3)省略var,自动判定变量及类型
如: v_val := 10 (v_val默认为int型)
提示: v_val不能是已经申明的变量,不能是全局变量

例子: 三种变量声明方式


  1. package main
  2. import . "fmt"
  3. func main() {
  4. var v_val1 int
  5. var v_val2 = 10
  6. v_val3 := 10
  7. Println(v_val1)
  8. Println(v_val2)
  9. Println(v_val3)
  10. }
  11. [[email protected] ex]# go run ./ex.go
  12. 0
  13. 10
  14. 10

例子:整型、浮点型、bool型和指针的默认值


  1. package main
  2. import . "fmt"
  3. func main() {
  4. var val1 int
  5. var val2 float32
  6. var val3 bool
  7. var val4 *int
  8. Println(val1)
  9. Println(val2)
  10. Println(val3)
  11. Println(val4)
  12. }
  13. [[email protected] ex]# go run ./ex.go
  14. 0
  15. 0
  16. false
  17. <nil>

全局和局部变量

全局变量:在函数体之外,可以被当前文件以及其他文件访问的变量
局部变量:在函数体之内,作用范围是该函数体的变量

多个变量声明

声明方式1,一般用于局部变量
var val1, val2, val3 int
val1, val2 val3 = 10, 11, 12

声明方式2,一般用于局部变量
var val1, val2, val3 = 10, 11.1, true

声明方式3,用于局部变量,不能用于全局变量
val1, val2, val3 := 10, 11.1, true

声明方式4,一般用于全局变量
var (
val1 int
val2 bool
)

例子


  1. package main
  2. import . "fmt"
  3. var (
  4. val1 int
  5. val2 bool
  6. )
  7. var val3, val4 int
  8. var val5, val6, val7 = 10, "cc", 1.1 /* 不能直接忽略某个元素*/
  9. func main(){
  10. val5 = 100 /* 全局定义重赋值, 使用val5 = 1.1报错,类型一致*/
  11. Println(val1, val2, val3, val4, val5, val6, val7)
  12. val5, val6 := 1.2, "cerry" /* 重新申明val5、val6的类型*/
  13. Println(val5, val6)
  14. }
  15. [[email protected] ex]# go run ./ex.go
  16. 0 false 0 0 100 cc 1.1
  17. 1.2 cerry

提示: 声明的变量必须被使用,否则报错

2.2 常量

一般常量

(1)显式类型定义
const str1 string = “hello”
(2) 隐式类型定义
const str2 = “hello”
(3)多个相同类型的声明
const str1, val1, val2 = “abc”, 4, 5.1
(4) 常量枚举
const (
default = 0
apple = 1
banana = 2
)

扩展知识: 使用unsafe包,计算所占字节大小


  1. package main
  2. import . "fmt"
  3. import "unsafe"
  4. const (
  5. a = "hello"
  6. b = len(a)
  7. c = unsafe.Sizeof(a)
  8. )
  9. func main(){
  10. Println(a, b, c)
  11. }
  12. [[email protected] ex]# go run ./ex.go
  13. hello 5 16

特殊常量iota

iota 表示默认从 0 开始自动加 1


  1. package main
  2. import . "fmt"
  3. func test() {
  4. const (
  5. a = iota //0
  6. b //1
  7. c //2
  8. d = "cc" //独立值,iota += 1
  9. e //继承d, "cc" iota += 1
  10. f = 100 //iota +=1
  11. g //继承f, 100 iota +=1
  12. h //继承f, 100 iota +=1
  13. i = iota //7,恢复计数
  14. j //8
  15. )
  16. Println(a,b,c,d,e,f,g,h,i,j)
  17. }
  18. const (
  19. i=1<<iota // 1 << 0 = 1
  20. j=3<<iota // 3 << 1 = 6
  21. k // 3 << 2 = 12
  22. l // 3 << 3 = 24
  23. )
  24. func main() {
  25. Println("i=",i)
  26. Println("j=",j)
  27. Println("k=",k)
  28. Println("l=",l)
  29. test()
  30. }
  31. [[email protected] ex]# go run ./iota.go
  32. i= 1
  33. j= 6
  34. k= 12
  35. l= 24
  36. 0 1 2 cc cc 100 100 100 8 9

版权声明:B链网原创,严禁修改。转载请注明作者和原文链接
http://www.360bchain.com/article/141.html