数据类型的详细介绍请查看李文周老师的博客
整型
package main
import (
"fmt"
)
func main() {
// 十进制
i1 := 10
fmt.Printf("%d\n", i1)
fmt.Printf("%o\n", i1) // 把10进制转换成八进制
fmt.Printf("%x\n", i1) // 把10进制转换成16进制
fmt.Printf("%b\n", i1) // 把10进制转换成二进制
// 八进制
i2 := 077
fmt.Printf("%d\n", i2)
// 十六进制
i3 := 0x1ff
fmt.Printf("%d\n", i3)
// %T查看变量类型
fmt.Printf("%T\n", i3)
// 声明int8类型的变量
i4 := int8(9)
fmt.Printf("%T\n", i4)
fmt.Printf("%o\n", i4)
}
浮点型
package main
import (
"fmt"
)
func main() {
f1 := 1.23456
fmt.Printf("%T\n", f1) // 默认Go语言中所有的小数都是float64类型
f2 := float32(1.23456)
fmt.Printf("%T\n", f2) // 显示声明float32类型
//f1 = f2 // float32类型的值不能直接赋值给float64类型的变量
}
布尔值
package main
import "fmt"
func main() {
b1 := true
var b2 bool // 默认值是flase
fmt.Printf("%T\n", b1)
fmt.Printf("%T\n value:%v\n", b2, b2) // %v是value值
}
字符串
Go语言中的字符串是用双引号包裹的!!!
Go语言中的单引号包裹的是字符!!!
其他的和PHP差不多
字符串中的转义和php一样也是通过\
转义
// 字符串
s := "Hello 北京"
// 单独的字母,汉子,符号表示一个字符
c1 := 'h'
c2 := '1'
c3 := '啥'
组成每个字符串的元素叫做“字符”,可以通过遍历或者单个获取字符串元素获得字符。 字符用单引号(’)包裹起来,如:
var a := '中'
var b := 'x'
Go 语言的字符有以下两种:
uint8类型,或者叫 byte 型,代表了ASCII码的一个字符。
rune类型,代表一个 UTF-8字符。
当需要处理中文、日文或者其他复合字符时,则需要用到rune类型。rune类型实际是一个int32。
Go 使用了特殊的 rune 类型来处理 Unicode,让基于 Unicode 的文本处理更为方便,也可以使用 byte 型进行默认字符串处理,性能和扩展性都有照顾。
也就是可以把字符串看成一个字符的集合,其中可能有数字字母,也可能有汉字,对应不同的字符,会保存为不同的类型,字母数字会保存成uint8(byte)类型,对于汉字这种复杂字符会保存成rune类型. 整体还是字符串.
package main
import (
"fmt"
"strings"
)
func main() {
// 反斜线转义
path := "http:\\www.baidu.com\\abc\\123"
// ``原样显示
path1 := `http:\www.baidu.com\abc\123`
fmt.Println(path)
fmt.Println(path1)
// 单行字符串
a := "I'm ok"
// 多行字符串
s := `
人之初
性本善
`
fmt.Println(a)
fmt.Println(s)
// 字符串相关操作,打印字符串长度
fmt.Println(len(path1))
fmt.Println(len(path))
//字符串拼接
name := "张三"
world := "哈哈哈"
// 两个字符串可以直接拼接成新的字符串
ss := name + world
fmt.Println(ss)
// Sprintf 格式化后的数据不舒服返回成字符串类型
ss1 := fmt.Sprintf("%v%v", name, world)
fmt.Println(ss1)
// 格式化输出两个需要拼接的字符串
fmt.Printf("%s%s", name, world)
// 分割
ret := strings.Split(path, "\\")
fmt.Println(ret) //[http: www.baidu.com abc 123]
// 包含
fmt.Println(strings.Contains(ss, "张三")) // true
fmt.Println(strings.Contains(ss, "李四")) // false
// 前缀
fmt.Println(strings.HasPrefix(ss, "张三")) // true
// 后缀
fmt.Println(strings.HasSuffix(ss, "张三")) // false
// 字符串出现的位置
s4 := "abcdeb"
fmt.Println(strings.Index(s4, "c")) // 2
// 字符串最后出现的位置
fmt.Println(strings.LastIndex(s4, "b")) // 5
// 拼接
fmt.Println(strings.Join(ret, "+")) // http:+www.baidu.com+abc+123
// 字符串的修改
s5 := "白萝卜" // => '白' '萝' '卜'
s6 := []rune(s5) // 把字符串强制转换成一个rune切片
s6[0] = '红' // 把第一个字符'白'修改成'红'
fmt.Printf(string(s6)) // 把rune切片强制转换成字符串输出
b := 65
fmt.Printf("%c\n", b) //%c 该值对应的unicode码值 输出 A
c := '中'
fmt.Printf("%v(%c)", c, c) // 20013(中)
d := 'a' // rune(int32)
e := "a" // string
fmt.Printf("d=%T,e=%T", d, e) // d=int32,e=string
fmt.Printf("d=%v,e=%v", d, e) // d=97,e=a
}
//
fmt的总结
package main
import "fmt"
func main() {
n := 100
fmt.Printf("%T\n", n) // 查看类型
fmt.Printf("%#v\n", n) // 查看类型的值
fmt.Printf("%b\n", n) // 二进制
fmt.Printf("%d\n", n) // 十进制
fmt.Printf("%o\n", n) // 八进制
fmt.Printf("%x\n", n) // 十六进制
s := "Hello"
fmt.Printf("%s\n", s) // 字符串类型
fmt.Printf("%v\n", s) //万能的可以打印所有的类型
fmt.Printf("%#v\n", s) //%#v 会打印出来对应的类型,字符串会带双引号
b := 65
fmt.Printf("%c\n", b) //%c 该值对应的unicode码值 输出 A
c := '中'
fmt.Printf("%v(%c)", c, c) // 20013(中)
}
类型转换
Go语言中只有强制类型转换,没有隐式类型转换。该语法只能在两个类型之间支持相互转换的时候使用。
强制类型转换的基本语法如下:
T(表达式)
和PHP语法一样, 比如说浮点转int就直接int(变量名)