go语言学习(二)
1.go语言基本数据类型
2.变量的定义
3.多重复制,匿名变量
4.常量的定义,使用
5.类型转化
6.条件结构,循环结构
一、go语言基本数据类型
1.整型
rune 类型是 Unicode 字符类型,和 int32 类型等价,通常用于表示一个 Unicode 码点。rune 和 int32 可以互换使用。
byte 是uint8类型的等价类型,byte类型一般用于强调数值是一个原始的数据而不是 一个小的整数。
其中常用的就是int。
2.浮点型
Go语言提供了两种精度的浮点数,float32和float64。它们的算术规范由IEEE754浮点数国际标准定义, 该浮点数规范被所有现代的CPU支持。
3.布尔型
一个布尔类型的值只有两种:true和false。if和for语句的条件部分都是布尔类型的值,并且==和<等比 较操作也会产生布尔型的值。
4.字符串
一个字符串是一个不可改变的字节序列。字符串可以包含任意的数据,包括byte值0,但是通常是用来包 含人类可读的文本。
5.此外还有枚举型,复数类型
二、变量的定义
1.go语言中定义变量语法与其他语言不同 var 变量名 类型 = 值
package main
import "fmt"
func main() {
var i int = 5 //声明一个整型并赋值 var 变量名 类型 = 值
fmt.Println("i = ", i)
var b bool = false //申明一个布尔型并赋值
fmt.Println("b = ", b)
var f float64 = 3.14 //申明一个浮点型并赋值
fmt.Println("f = ", f)
var s string = "2018年5月2日" //申明一个浮点型并赋值
fmt.Println("s = ", s)
var c byte = 'c' //申明一个字符型并赋值
fmt.Println("c = ", c)
fmt.Printf("c = %c \n", c) //使用fmt.Printf 格式化输出打印字母c
//基本数据类型默认值
var i_1 int
fmt.Println("i_1 = ", i_1) //0
var b_1 bool
fmt.Println("b_1 = ", b_1) //false
var f_1 float64
fmt.Println("f_1 = ", f_1) //0
var s_1 string
fmt.Println("s_1 = ", s_1) //空字符串
var c_1 byte
fmt.Println("c_1 = ", c_1) //0
}
2.变量的其他赋值方式
package main
import "fmt"
func main() {
//连续赋值
var a, b, c, d int = 1, 2, 3, 4
fmt.Printf("a = %d\nb = %d\nc = %d\nd = %d\n", a, b, c, d)
//多重赋值
var (
a0 int
f0 float64
b0 bool
s0 string
c0 byte
)
fmt.Printf("a0 = %v\nf0 = %v\nb0 = %v\ns0 = %v\nc0 = %v\n", a0, f0, b0, s0, c0) //%v 可自动匹配类型
// := 自动推到类型,声明变量的同时赋值
x := 11
y := 3.1415926
z := "Hello Go"
fmt.Printf("x = %v\ny = %v\nz = %v\n", x, y, z)
fmt.Printf("x = %T\ny = %T\nz = %T\n", x, y, z) //%T 打印数据类型
}
三、类型转换
package main
import (
"fmt"
"strconv"
)
func main() {
f := 3.14
i := int(f)
fmt.Println(i)
b := true //定义一个布尔型变量b
fmt.Printf("b = %v\n", b)
//%d 匹配类型为整形,打印结果为b = %!d(bool=true)
// fmt.Printf("b = %d\n", b)
//布尔类型与整型不能相互转换
// fmt.Printf("b = %d\n", int(b)) //cannot convert b (type bool) to type int
s := "2018"
//func Atoi(s string) (i int, err error)
//使用_匿名变量,忽略第二个返回值
x, _ := strconv.Atoi(s) //i声明为整型,使用strconv.Atoi函数将字符串转换为int
fmt.Printf("x = %d\n", x)
// ParseFloat 将字符串转换为浮点数
// s:要转换的字符串
// bitSize:指定浮点类型(32:float32、64:float64)
// 如果 s 是合法的格式,而且接近一个浮点值,
// 则返回浮点数的四舍五入值(依据 IEEE754 的四舍五入标准)
// 如果 s 不是合法的格式,则返回“语法错误”
// 如果转换结果超出 bitSize 范围,则返回“超出范围”
//func ParseFloat(s string, bitSize int) (f float64, err error)
f1, _ := strconv.ParseFloat("0.321646843164131647697", 64)
fmt.Println("f1 = ", f1)
}
strconv 用法:https://studygolang.com/articles/5003
四、类型别名
package main
import "fmt"
func main() {
type long int64
var l long = 123 //就相当于 var l int64 = 123
fmt.Printf("l = %T\n", l) //打印结果 l = main.long
}
给int64取了一个别名long,之后用long声明变量类型就相当于int64.
五、变量的输入
获取用户键盘输入数据,并赋值给变量
package main
import "fmt"
func main() {
var a int //定义一个整数用来保存用户输入
fmt.Println("请输入一个整数:")
fmt.Scan(&a) //取a的地址将用户输入赋值给a
fmt.Println("您输入的是:", a)
}
运行结果为:
六、if else 条件结构
package main
import "fmt"
func main() {
i := 1
if i == 1 {
fmt.Println("i等于1")
} else {
fmt.Println("i不等于1")
}
}
条件结构基本一样
七、循环结构
go语言中没有while关键字,所以go语言只存在for 循环。
package main
import "fmt"
func main() {
//使用for循环10次,打印i的值
for i := 0; i < 10; i++ {
fmt.Println("Hello i = ", i)
}
var a int
//
for {
fmt.Println("Hello a = ", a)
a++
if a == 10 {
break //跳出循环,否则程序一直循环下去
}
}
}
两种for循环打印的结果相同
八、goto 的使用
package main
import "fmt"
func main() {
fmt.Println("1111111111111111111111")
goto End
fmt.Println("2222222222222222222222")
End:
fmt.Println("33333333333333333333333")
}
不使用goto的情况下,程序会1,2,3都打印,而使用goto后,程序会跳过goto之后的程序,执行用户定义的标签的地方,因此程序打印结果只有1和3。