go - 内置基础类型

来源:互联网 发布:机械编程 编辑:程序博客网 时间:2024/06/06 08:27
Go 语言中包括以下内置基础类型:
布尔型:bool
整型:int int64 int32 int16 int8 uint8(byte) uint16 uint32 uint64 uint
浮点型:float32 float64
复数型:complex64 complex128
字符串:string
字符型:rune
错误型:error

1. bool类型
关键字: bool
可定义为: true 或者 false 或者 逻辑表达式
var bool1 bool = truevar bool2 bool = (2 == 2)
注:不能接受其他类型的赋值,包括(0, 1),也不支持自动或强制类型转换

2. 整型
分为有符号与无符号两种
值范围,如: int8 2^8 -128~127, uint8 0~255, 其他以此类推
int/uint 其值范围与平台有关,所以 int32 != int
支持强制类型转换,注意精度问题
变量2 = 类型(变量1)

3. 浮点型
即含小数点的数据
有两种: float32 float64(默认)
可相互转换,
注:比较大小时最好先确定比较精度, 再比较大小

4. 字符串
声明方式: var str string
值用 "" 或者 `` 包括, `` 可包含多行字符串
字符串的操作与数组相同
与如php等其他语言不同的是,字符串的内容在初始化后,不能被修改,但可重新完全赋值
s := "123"s[1] = "3" //compile error
$s = "123"; $s[1] = "3"; echo $s; //133

5. 字符型
两种字符类型: 
byte 对应 utf-8
rune 对应 unicode

6. 错误型
在 go 语言中,负责错误信息处理的是 error 接口,也可以使用 errors 包
var e error = errors.New("...")
在 go 语言中,函数支持多个返回值
可用下面的方式来处理错误
res, err := funName(param)if err != nil {    //处理错误} else {    //无错误}func funName(param) (res type, err error) {    if ... {        err = errors.New(...)        return    }    ...    return res, nil}

7. 复数

在此省略,有需要可再了解


note_type_1.go code list

package mainimport "fmt"import "errors" //引入 errors 包//声明 bool 型全局变量var (enable = truedisable = false)func main() {//预定义常量 iotaconst (c0 = iota //0c1 = iota //0+1c2        //会自动赋上一个定义常量的值或者表达式)const (c3 = iota //0c4)fmt.Println("c0, c1, c2 = ", c0, c1, c2)fmt.Println("c3, c4 = ", c3, c4)/*//这种写法编译时会报错,需要 if condition { 在同一行代码中//missing condition in if statement //enable == true not usedif enable == true {fmt.Println("error")}*/if enable == true {fmt.Println("enabled = ", enable)} else {fmt.Println("enabled = ", disable)}/*//编译时会出现以下错误:// cannot use 1 (type int) as type bool in assignmentenable = 1;// cannot convert 1 to type bool // cannot convert 1 (type int) to type bool // cannot use 1 (type int) as type bool in assignmentenable = bool(1)*/var (a int8 = 1b int  = 2)//invalid operation: a + b (mismatched types int8 and int)//c := a + b//需要做类型转换c := int(a) + bfmt.Println("c = a + b = ", c)//int32 与 int 是两种不同的类型,但是可用强制类型转换var d int32//d = b    // cannot use b (type int) as type int32 in assignmentd = int32(b)fmt.Println("d = ", d)var f1 float32 = 1.23456fmt.Printf("f1 = %.3f \n", f1) //1.235f2 := 1.111//compile error: invalid operation: f1 + f2 (mismatched types float32 and float64//f3 := f1 + f2b1 := (float64(f1) == f2)//该比较方式不严谨if b1 {fmt.Println("float64(f1) == f2")} else {fmt.Println("float64(f1) != f2")}//用 "" 括起来表示字符串//字符串的操作与数组一样var str string = "hello"fmt.Println("str = ", str)fmt.Println("str[1] = ", str[1])fmt.Printf("%c \n", str[1]) // s[i]取第i+1个字符//str = "hi"   //compile ok//str[0] = 'c' //compile error: cannot assign to str[0]//多行字符串,用 `` 包含str2 := `SELECT username, pwd FROM tb_user WHERE id = 123456`fmt.Println(str2)str3 := " world!"fmt.Println("str + str3 = ", str + str3)  // s1 + s2, 连接字符串//len(s)返回字符串的长度fmt.Printf("length of str2 = %d \n", len(str2))//s[m:n] 返回从m位开始到n结束之间的字符串,m, n可以省略, 此时m为0, n为len(s)s := "hello"s = "c" + s[1:]fmt.Println(s)      //cellofmt.Println(s[:3])  //celfmt.Println(s[1:3])//elfmt.Println(s[:])//cello//byte 用 '' 包括字符//var ch byte = "1" //compile error: cannot use "1" (type string) as type byte in assignmentvar ch1 byte = 'a'fmt.Printf("ch1 = %c \n", ch1)  //ch1 = afmt.Println(ch1)                //97//runevar ch2 rune = 'b'fmt.Printf("ch2 = %c \n", ch2)  //ch2 = bfmt.Println(ch2)                //98//errorerr := errors.New("error1")if err != nil {//错误处理...fmt.Println(err)}var e1 errorif e1 == nil {fmt.Println("no problem")}res, e := div(5, 0)//res, e := div(5, 1)if e != nil {//错误处理fmt.Println(e) //如果div(5, 0), 会输出: error: division by zero} else {//正确fmt.Println("res = ", res) //如果div(5, 1),会输出: res = 5}}//定义函数func div(a, b int) (res int, e error) {if b == 0 {e = errors.New("error: division by zero")return}return a /b , nil}

运行结果:



原创粉丝点击