标识符与关键字
标识符
在编程语言中标识符就是程序员定义的具有特殊意义的词。
关键字
关键字是指编程语言中预先定义好的具有特殊意义的字。
变量的来历
变量的类型
变量的声明
标准声明
声明变量
var str string;声明变量类型
package main
// 批量声明
import "fmt"
var (name string
age int
isOk bool)
func main(){
name = "小王"
age = 14
isOk = true
// Go语言中变量声明必须使用,不使用就编译不过去
fmt.Printf("name:%s",name)
fmt.Println();
fmt.Print(isOk)
fmt.Println();
fmt.Println(age)
}
变量声明赋值(代码段)
// 声明变量同时赋值
var baby string = "yan"
fmt.Println(baby)
// 类型推导(根据值的判断类型)
var s2 = "heiheihei"
fmt.Println(s2)
s3 := "heiheihei"
fmt.Println()
fmt.Print(s3)
fmt.Println()
常量
定义了常量之后就不可以修改
在程序运行期间不会改变的量
常量使用
package main
// 常量
const pi = 3
func main (){
}
常量默认声明
// 如果批量声明常量是,如果某一行没有赋值,默认就和上一行一致
const (
n1 = 100
n2
n3
)
iota
iota 是go语言的常量计数器,只能在在常量的表达式中使用。
iota在const关键字出现时将被重置为0.const中每新增一行常量将使iota计数增加一次。使用iota能简化定义,在定义枚举时很有用。
const (
s1 = iota
s2
s3
s4
)
func main (){
fmt.Println("s1:",s1)
fmt.Println("s2:",s2)
fmt.Println("s3:",s3)
}
Go语言之基本数据类型
常见数据类型
整型
整形分为以下两个大类:无符号和有符号
特殊类型
unint
int
uintptr 无符号整形,用于存放一个指针
八进制&十六进制
Go语言中无法直接定义,关于八进制和十六进制。
o 开头的就是八进制
0x开头的就是 16进制
浮点型
package main
import "fmt"
import "math"
func main(){
f1 := 12.45
fmt.Printf("%f\n",f1);
const f2 = math.MaxFloat32; // 最大的数
fmt.Printf("%f\n",f2);
f3 := 1.123456
fmt.Printf("%T\n",f3) // 默认Go 语言中的小数是float64类型
f4 := float32(1,234532)
fmt.Printf("%T\n",f4)
f5 = f4 // float32类型的值不能直接赋值给float64类型的变量
}
复数
complex64 和complex128
var c1 complex64
c1 = 1+ 2i
var c2 complex128
c2 = 2 + 3i
fmt.Println(c1)
fmt.Println(c2)
复数有实部和虚部,complex64的实部和虚部为33位,complex的实部和虚部为64位
布尔值
Go语言中以 bool 类型进行声明布尔型数据,布尔型数据只有true和false两个
package main
import "fmt"
// bool 默认是false
var (v bool)
func main(){
fmt.Println(v);
}
1.布尔值类型变量的默认值为false
2.Go语言中不允许将整型强制转换为布尔型
3.布尔型无法参与数值运算,也无法与其他类型转换
字符串类型
Go语言中的字符串已原生数据类型出现,使用字符串就像其他原生数据类型一样。
Go语言里面的字符串的内部事项使用UTF-8b编码。字符串的职位双引号中内容,可以在Go语言的源码里面加入ASCII码字符,例如:
s1 = "hello"
s3="你好"
// 字节 : 1 字节 = 8bit
1 个字符 “A” = 1 个字节
// 1个utf8编码的汉字‘沙’= 一般占3个字节
字符串如何拼接
name : = "hello"
w: = "world"
fmt.Println(ss);
ss1 := fmt.Sprintf("%s%s",name,world)
fmt.PrintF("%s%s",name,world)
fmt.Println(ss1)
ret := strings.Split(ss,"\\")
fmt.Println(ret)
字符串的方法
Split 按字符分割成新的数组
Contains 字符串是否包含某个字符
HasPrefix 字符串以什么开头
HasSuffix 字符串以什么结尾
name := "hello";
world :="world!";
ss := name + world
fmt.Println(ss)
ss1 := fmt.Sprintf("%s%s",name,world)
fmt.Println(ss1)
ret := strings.Split(ss,"\\")
fmt.Println(ret)
ret1 := strings.Contains(ss1,"world")
fmt.Println(ret1)
ret2 := strings.HasPrefix(ss1,"hello")
fmt.Println(ret2)
ret3 := strings.HasSuffix(ss1,"world")
fmt.Println(ret3)
ret4 := strings.Index(ss1,"or")
fmt.Println(ret4)
ret5 := strings.LastIndex(ss1,"or")
fmt.Println(ret5)
// ret6 := strings.Join(ss1," ")
// fmt.Println(ret6)
helloworld!
helloworld!
[helloworld!]
true
true
false
6
6
字符串修改及类型转换
byte 和 rune类型
Go语言中为处理非ASCII码类型的字符 定义了行的rune类型
package main
import "fmt"
func main(){
s:= "bsx"
// len() 求得是byte字节的数量
n := len(s) // 求得字符串s的长度,把长度保存到变量n中
fmt.Println(n);
// fmt.Println(n)
// for i := 0; i < len(s); i ++{
// fmt.Println(s[i])
// fmt.Printf("%c\n",s[i])// %c:字符
// }
for _,c :=range s{ // 字符串中拿出具体的字符
fmt.Printf("%c\n",c)// %c: 具体字符
}
}
Go语言的字符有以下两种:
uint8类型,或者叫byte类型,代表了ASCII码的一个字符。
runt类型,代表一个UTF-8字符
当需要处理中文、日文或者其他复合字符是,则需要用到rune类型,rune类型实际上是一个int32位
Go使用了特殊的rune类型来处理Unicode,让基于Unicode的文本处理更为方便,也可以使用byte类型进行默认处理,性能和扩展性都有照顾
for i := 0; i < len(s); i ++{
fmt.Println(s[i])
fmt.Printf("%c\n",s[i])// %c:字符
}
for _,c :=range s{ // 字符串中拿出具体的字符
fmt.Printf("%c\n",c)// %c: 具体字符
}
修改字符串
要修改字符创,需要先件其转换为[]rune或者[]byte,完成后再转换为string.无论哪种转换,都会重新分配内存,并复制字节 数组
package main
func main(){
s2 := "白萝卜"; // '白', '萝','卜'
s3 := []rune(s2);// 把字符串强制转换为一个rune切片
s3 [0] = '红';
fmt.Println(string(s3))// 把切片强制转换为字符串
}
// 这里的单引号和双引号是不同的
// 单引号是 int32位
// 双引号是string类型