var n3 bool = false var s3 string = strconv.FormatBool(n3) fmt.Printf("s3对应的类型是: %T , s3 = %q \n", s3, s3) //"false"
string类型转换成基本数据类型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
var s1 string = "true" var b bool b, _ = strconv.ParseBool(s1) fmt.Printf("b的类型是: %T , b = %v \n", b, b)
var s2 string = "19" var num1 int64 num1, _ = strconv.ParseInt(s2, 10, 64) //数值,十进制,int64 fmt.Printf("num1的类型是: %T , b = %v \n", num1, num1) var s3 string = "3.21" var f1 float64 f1, _ = strconv.ParseFloat(s3, 64) //数值,float64 fmt.Printf("f1的类型是: %T , b = %v \n", f1, f1)
指針
1 2 3 4 5 6 7 8 9 10
var age int = 18
// &age 獲取到的是內存指向的地址 // b是指針變量的名稱 // *int是指針類型 可以理解為指向int類型的指針 // 想要獲取指針指向地址的值使用*b var b *int = &age println(age, b, *b)
指針就是內存地址
&獲取內存地址
*根據內存地址取值
指针注意事项
1 2 3 4 5 6 7 8 9
var num int = 10 fmt.Println(num) //10 // *int要和num的类型相同 如果是其他类型会报错 例如*float32 var b *int = &num //指针变量一定是地址值,不加&会报错 *b = 20//通过指针改变内存里的值 fmt.Println(num) //20
//每个基本类型都有对应的指针类型
标识符
标识符就是变量名
1 2
var age int = 10//age就算标识符
流程控制
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
var count int = 20 if count < 30 { fmt.Printf("数量小于三十") }else{ fmt.Printf("数量大于三十") }
var score int = 99 switch score / 10 { case10: fmt.Println("等级为A级") case9: fmt.Println("等级为B级") fallthrough case8: fmt.Println("等级为C级") default: fmt.Println("不合格") }
for循环
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
var sum int = 0 for i := 1; i <= 5; i++ { sum += i } fmt.Println("sum的值:", sum)
//不可切片汉字 因为汉字占三个字节 var str string = "hello world" for i := 0; i < len(str); i++ { fmt.Printf("%c \n", str[i]) } //可以切片汉字 var str2 string = "hello world 你好" for i, value := range str2 { fmt.Printf("索引:%d,值:%c \n", i, value) }
关键字
break
continue
goto
defer
break
1 2 3 4 5 6 7 8
for i := 0; i < 10; i++ { if i == 5 { break } println(i) }
funcgetSum()func(int)int { var sum int = 0 returnfunc(n int)int { sum = sum + n return sum } } funcmain() { a := getSum() println(a(1)) //1 println(a(2)) //2 println(a(3)) //6 println(a(4)) //10 }
var age int println("请输入年龄") fmt.Scanln(&age) var name string println("请输入姓名") fmt.Scanln(&name) var score float32 println("请输入成绩") fmt.Scanln(&score) var isVIP bool println("请输入是否为VIP") fmt.Scanln(&isVIP) fmt.Printf("年龄:%v,姓名:%v,成绩:%v,是否VIP:%v", age, name, score, isVIP)
1 2 3 4 5 6 7 8 9 10
var ( age int name string score float32 isVIP bool ) println("请录入学生年龄 姓名 成绩 是否VIP") fmt.Scanf("%d %s %f %t", &age, &name, &score, &isVIP)
数组
定义一个数组并赋值
1 2 3 4 5 6 7 8 9 10 11 12 13
var arr [5]int arr[0] = 11 arr[1] = 22 arr[2] = 33 arr[3] = 44 arr[4] = 55 sum := 0 for i := 0; i < len(arr); i++ { sum += arr[i] } fmt.Printf("总数为:%v,平均数为:%v \n", sum, sum/len(arr))
数组循环
1 2 3 4 5 6 7 8 9 10 11 12 13 14
sum := 0 for i := 0; i < len(arr); i++ { sum += arr[i] } fmt.Printf("总数为:%v,平均数为:%v \n", sum, sum/len(arr)) for i := 0; i < len(arr); i++ { println("请输入学生成绩") fmt.Scanln(&arr[i]) } for key, val := range arr { println(key, val) }
var arr = [2][3]int16{{1, 2, 3}, {4, 5, 6}} for i := 0; i < len(arr); i++ { for j := 0; j < len(arr[i]); j++ { fmt.Println(arr[i][j]) } } for i, v := range arr { for j, w := range arr[i] { fmt.Println(i, v, j, w) } }
type Teacher struct { Name string } type Person struct { Name string } //1 funcmain() { var s Teacher var p Person s = Teacher(p) fmt.Println(s, p) } //2 funcmain() { var tea = Teacher{"张三"} var per = Person{"李四"} fmt.Println(tea, per) tea = Teacher(per) //转换 fmt.Println(tea) }
即是同一个结构体引出的别名也需要转换类型才能使用否则会报错
1 2 3 4 5 6 7 8 9 10
type Teacher struct { Name string } type Tea Teacher funcmain() { var s Teacher var p Tea s = Teacher(p) fmt.Println(s, p) }
// 创建一个结构体 type A struct { Name int } // 声明这个方法是 A结构体的方法 此处在方法名前面加一个括号绑定到结构体 func(a A) test() { fmt.Println("A结构体的方法") } funcmain() { //需要先实例化结构体 var t A //需要调用实例化后的方法 t.test() fmt.Println("程序执行结束") } //设置参数 方法内外隔离 不会产生影响 type A struct { Age int } func(a A) test() { a.Age = 30 fmt.Println(a.Age) //30 } funcmain() { var a A a.Age = 100 a.test() fmt.Println(a.Age) //100 }
//1 type A struct { Age int } func(a *A) test() { (*a).Age = 30//也可以a.Age = 30 fmt.Println(*a) } funcmain() { var a A a.Age = 100 (&a).test() //也可以a.test() fmt.Println(a) }
//2 type A int func(a *A) test() { *a = 30 fmt.Println(*a) //30 } funcmain() { var a A = 30 a = 100 a.test() fmt.Println(a) //30 }