Go基本数据类型
前言
- 这是一篇看完tour(官方教程)第一部分的总结文
- 第一部分主要讲了基本数据类型还有一些注意点
基础知识
- 所有go程序都是由包(package)组成
//一个简单的例子
package main
import (
"fmt"
"math/rand"
)
func main() {
fmt.Println("My favorite number is", rand.Intn(10))
}
- 开头的package main表示程序从main包开始运行
- import关键词指出将要使用到的包,import还可以分开写
import "fmt"
import "math/rand"
- main函数是程序的开始,其中的fmt和rand对象都是import而来的
- import对象中的数据成员,要调用时通常需要大写,也就是exported names
package main
import (
"fmt"
"math"
)
func main() {
fmt.Println(math.Pi) //这里的Pi就是exported name
}
- 函数的声明和定义中,对于参数和返回值的类型是有别于其它编程语言的,go中的类型是放在后面的
package main
import "fmt"
func add(x int, y int) int {
return x + y
}
/*等价的写法,类型一致,只保留最右边的
func add(x, y int) int {
return x + y
}
*/
func main() {
fmt.Println(add(42, 13))
}
- 函数支持多个返回值
package main
import "fmt"
func swap(x, y string) (string, string) {
return y, x
}
func main() {
a, b := swap("hello", "world")
fmt.Println(a, b)
}
- 函数返回值还可以直接写在函数声明处,在定义中省略,官方文档称之为naked return
package main
import "fmt"
func split(sum int) (x, y int) {
x = sum * 4 / 9
y = sum - x
return
}
func main() {
fmt.Println(split(17))
}
基本数据类型
- bool
- string
- int int8 int16 int32 int64
- uint uint8 uint16 uint32 uint64 uintptr
- int uint uintptr这三个类型,在32位系统中为32位,而在63位系统中为64位
- byte
- byte和uint8等价
- rune
- rune和int32等价,用来表示一个unicode code point
- float32 float64
- complex64 complex128
关于基本数据的使用
- 通过基本数据的声明定义,初始化,类型转换等行为可以理解其使用
- 编程语言中有两类数据:变量和常量。基本数据类型也是围绕这两者而存在的
在声明函数时,也会用到基本类型作为参数和返回值,官方教程一开始没有过多解释参数和返回值,详细的内容需要看官方教程中讲解函数的部分
变量
- 变量的定义和初始化可以使用var关键字来达成,也可以使用符号:=来完成
//var的使用: var 变量名 变量类型 = 值 var i int = 1 var j int = 2 var k int = 3 //当定义的类型一样,可以简化为以下形式 var i, j, k int = 1, 2, 3 //还能一次性定义多个变量 var ( ToBe bool = false MaxInt uint64 = 1<<64 - 1 z complex128 = cmplx.Sqrt(-5 + 12i) ) //符号:=的用法:变量名 := 值 i := 1 j := 2 k := 3 //同样也可以简化,而且不再要求类型一致 i, j, k := true, false, "no!"
- 变量的定义和初始化可以在函数内也可以在函数外
package main import "fmt" var c, python, java bool //函数外 func main() { var i int //函数内 fmt.Println(i, c, python, java) }
- 变量如果没有初始化,那么将会赋予zero value
0 for numeric types, false for the boolean type, and "" (the empty string) for strings.
- 类型转换,在go的赋值过程中,如果两边的类型不同,是必须显式转换的
- 转换的写法可以简单记忆为“类型加括号”
package main import ( "fmt" "math" ) func main() { x, y := 3, 4 f := math.Sqrt(float64(x*x + y*y)) z := uint(f) fmt.Println(x, y, z) }
- 如果没有表明变量类型,但是作了初始化,那边其类型将由右边值决定
package main import "fmt" func main() { v := 3.142// change me! fmt.Printf("v is of type %T\n", v) }
常量
- 通常理解为一经定义初始化就不能改变的值,并且一定要初始化
- 使用到const关键字声明
- 常量不能使用符号:=来声明定义
package main import "fmt" const Pi = 3.14 //注意和var对比 func main() { const World = 5 + 2i fmt.Println("Hello", World) fmt.Println("Happy", Pi, "Day") const Truth = true fmt.Println("Go rules?", Truth) }
- 还能一次性定义多个常量
const ( Big = 1 << 100 Small = Big >> 99 )

更多精彩