小数类型/浮点型
// Golang的浮点型默认声明为float64 var num5 = 1.1 fmt.Printf("num5 的数据类型是 %T ", num5) // 浮点型声明:十进制形式 如:5.12 .123 num6 := 5.12 num7 := .123 // =>0.123 fmt.Println("num6 = ", num6, "num7 = ", num7) // 浮点型声明:科学计数法形式,e与E一样 num8 := 5.1234e2 // =>5.1234 * 10的2次方 num9 := 5.1234E-2 // =>5.1234 / 10的2次方 fmt.Println("num8 = ", num8, "num9 = ", num9)
字符(char)
// 演示Golang中字符类型的使用 func main() { var c1 byte = 'a' var c2 byte = '0' // 当我们直接输出byte值,就是输出了对应字符的ASCII码值 // a==> 97 0==>48 fmt.Println("c1 = ", c1) fmt.Println("c2 = ", c2) // 如果我们希望输出对应的字符,需要使用格式化输出 fmt.Printf("c1 = %c c2 = %c ", c1, c2) // var c3 byte = '黄' // 会报错:./main.go:19:16: constant 40644 overflows byte // 因为byte范围是0~255,所以换一个范围大的类型即可 var c3 int = '黄' fmt.Printf("c3 = %c c3对应的ASCII码值 = %d ", c3, c3) }
// 可以直接给某个变量赋一个数字,然后按格式输出%c,会输出数字对应的Unicode字符 var c4 int = 22269 //22269->国 fmt.Printf("c4 = %c ", c4) //字符类型可以直接进行运算,相当于一个整数,运算时按ASCII码值运算 var n1 = 10 + 'a' //10 + 97 = 107 fmt.Println("n1 = ", n1)
string
package main import ( "fmt" ) // 演示Golang中string类型的使用 func main() { // string的基本使用 var address string = "北京长城!" fmt.Println(address) // string的注意事项 var str string = "hello world!!!" // str[0] = 'y' // 报错:./main.go:14:9: cannot assign to str[0] 不能修改 fmt.Println(str) // 字符串的两种表现形式(1)双引号,(2)反引号,在esc下面那个键 str2 := "abc abc" //双引号会转意 fmt.Println(str2) // 使用反引号``,以字符串的原生形式输出,包括换行和特殊字符,可以防止攻击 str3 := ` package main import "fmt" func main() { // golang的变量使用方式1 // 第一种:指定变量类型,声明后若不赋值,使用默认值 // int 的默认值是0 其它数据 var age int age = 20 fmt.Println("age = ", age) // 第二种:根据值自行判断变量类型(类型推导) var num = 10.11 fmt.Println("num = ", num) // 第三种:省略var,注意 := 左侧的变量不应该是已经声明过的,否则编译报错 // 下面的方式等价于 var name string name = "tom" name := "tom" fmt.Println("name = ", name) } ` fmt.Println(str3) // 字符串拼接方式 var str4 = "hello" + "world" str4 += " hhhha!" fmt.Println(str4) }
基础数据类型与string的转换
// 演示Golang中基本数据类型转成string func main() { var num1 int = 99 var num2 float64 = 23.456 var b bool = true var myChar byte = 'h' var str string //空的string // 使用第一种方式转换 fmt.Sprintf方法 // 前面的%参数详情:https://studygolang.com/pkgdoc 下的fmt str = fmt.Sprintf("%d", num1) fmt.Printf("str type is %T str = %q ", str, str) str = fmt.Sprintf("%f", num2) fmt.Printf("str type is %T str = %q ", str, str) str = fmt.Sprintf("%t", b) fmt.Printf("str type is %T str = %q ", str, str) str = fmt.Sprintf("%c", myChar) fmt.Printf("str type is %T str = %q ", str, str) }
使用strconv包
1) 基础数据类型转string
package main import ( "fmt" "strconv" ) // 演示Golang中基本数据类型转成string func main() { // 使用第二种方式转换 使用 strconv 包的函数 // 详情:https://studygolang.com/pkgdoc 下的strconv var num3 int = 99 var num4 float64 = 23.456 var b2 bool = true var str string //空的string str = strconv.FormatInt(int64(num3), 10) fmt.Printf("str type is %T str = %q ", str, str) // 说明: 'f'--格式;10--表示小数位保留10位;64--表示这个小数是float64 str = strconv.FormatFloat(num4, 'f', 10, 64) fmt.Printf("str type is %T str = %q ", str, str) str = strconv.FormatBool(b2) fmt.Printf("str type is %T str = %q ", str, str) }
2) String转基础数据类型
package main import ( "fmt" "strconv" ) // 演示Golang中string转成基本数据类型 func main() { var str string = "true" var b bool // strconv.ParseBool(str)函数会返回两个值 (value bool, err error) // 因为只想获取value,不想获取err,所以使用‘_’忽略 b, _ = strconv.ParseBool(str) fmt.Printf("b type is %T b = %v ", b, b) var str2 string = "1234560" var num1 int64 //将str2转成10进制的;转成64位的;使用‘_’忽略err num1, _ = strconv.ParseInt(str2 ,10, 64) fmt.Printf("num1 type is %T num1 = %v ", num1, num1) // 因为go默认转换回来的都是64位,不论是int还是float,如果我们不想要那么大,只能自己转 var num2 int num2 = int(num1) fmt.Printf("num2 type is %T num2 = %v ", num2, num2) var str3 string = "123.456" var f1 float64 //将str3转成转成64位的;使用‘_’忽略err f1, _ = strconv.ParseFloat(str3 , 64) fmt.Printf("f1 type is %T f1 = %v ", f1, f1) }
指针类型
注意事项:
获取用户端输入:使用 fmt.Scanln()
package main import ( "fmt" ) // 要求:可以从控制台接收用户信息【姓名,年龄,薪水,是否通过考试】 func main() { // 声明变量 var name string var age byte var sal float32 var isPass bool // 方式1:fmt.Scanln() fmt.Println("请输入姓名 ") // 当程序执行到 fmt.Scanln(&name) 时,程序会停止在这,等待用户输入并回车 fmt.Scanln(&name) fmt.Println("请输入年龄 ") fmt.Scanln(&age) fmt.Println("请输入薪水 ") fmt.Scanln(&sal) fmt.Println("请输入是否通过考试 ") fmt.Scanln(&isPass) fmt.Printf("姓名是 %v 年龄是 %v 薪水是 %v 是否通过考试 %v ", name, age, sal, isPass) }
使用 fmt.Scanf()
package main import ( "fmt" ) // 要求:可以从控制台接收用户信息【姓名,年龄,薪水,是否通过考试】func main() { // 声明变量var name stringvar age bytevar sal float32 var isPass bool fmt.Println("请输入您的姓名,年龄,薪水,是否通过考试;使用空格隔开! ") fmt.Scanf("%s %d %f %t",&name, &age, &sal, &isPass ) fmt.Printf("姓名是 %v 年龄是 %v 薪水是 %v 是否通过考试 %v ", name, age, sal, isPass) }
Type Switch:switch 语句还可以被用于 type-switch 来判断某个 interface 变量中实际指向的变量类型
// 可以直接给某个变量赋一个数字,然后按格式输出%c,会输出数字对应的Unicode字符var c4 int = 22269//22269->国 fmt.Printf("c4 = %c ", c4) //字符类型可以直接进行运算,相当于一个整数,运算时按ASCII码值运算var n1 = 10 + 'a'//10 + 97 = 107 fmt.Println("n1 = ", n1)