Go 基本数据类型
程序员文章站
2023-11-28 14:01:40
[TOC] Go基础语法 注意点: 花括号的左侧"{"不能另起一行,否则编译错误 if...else语句中的else必须和if的"}"在同一行,否则编译错误 必须在源文件中非注释的第一行声明包名,如package main main()函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执 ......
go基础语法
package main import "fmt" func main(){ fmt.println("hello world") }
注意点:
- 花括号的左侧"{"不能另起一行,否则编译错误
- if...else语句中的else必须和if的"}"在同一行,否则编译错误
- 必须在源文件中非注释的第一行声明包名,如package main
- main()函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数
- 声明变量必须使用,否则编译错误
go数据类型
整型
整型分为两位,有符号和无符号两种类型
有符号类型可以存储任何整数,无符号类型只能存储自然数
在保证程序正确运行下,尽量使用占用空间小的数据类型
fmt.printf("%t", var_name)输出变量类型
unsafe.sizeof(var_name)查看变量占用字节
类型 | 描述 |
---|---|
uint8 | 无符号8位整型(0 到 255) |
uint16 | 无符号16位整型(0 到 65535) |
uint32 | 无符号32位整型(0 到 4294967295) |
uint64 | 无符号32位整型(0 到 18446744073709551615) |
int8 | 有符号8位整型(-128 到 127) |
uint16 | 有符号8位整型(-32768 到 32767) |
uint32 | 有符号8位整型(-2147483648 到 2147483647) |
uint64 | 有符号8位整型(-9223372036854775808 到 9223372036854775807) |
浮点型
浮点型也就是小数类型,可以存放小数。比如6.6,-12.34
- 关于浮点数在机器中存放形式的简单说明,浮点数=符号位+指数位+尾数位
- 尾数部分可能丢失,造成精度损失。-123.0000901
- golang的浮点型默认为float64类型,因为它比float32更精确
类型 | 描述 |
---|---|
float32 | ieee-754 32位浮点型数 |
float64 | ieee-754 64位浮点型数 |
complex64 | 32 位实数和虚数 |
complex128 | 64 位实数和虚数 |
字符和字符串
字符串就是一串固定长度的字符连接起来的字符序列。go的字符串是由单个字节连接起来的,go 语言的字符串的字节使用 utf-8 编码标识 unicode 文本。
go语言的字符使用utf-8编码,英文字母占一个字符,汉字占三个字符。字符可以进行运算,也就是对应的ascii相加
package main import "fmt" func main(){ // 单引号内只能包裹单个字符 c := 'a' // <==> var c byte = 'a' str := "yven" // <==> var str string = "yven" fmt.printf("c : %v\n",c) //打印的是字符a对应的ascii码值 fmt.printf("c : %c\n",c) //打印c : a fmt.printf("str : %v\n",str) // 打印 str : yven }
字符串的两种标识形式
- 双引号,会识别字符串中的转义字符
var str = "yven \n law" //识别其中的换行符,并换行显示
- 反引号,以字符串的原生形式输出,包括换号和特殊字符,可以实现防止攻击、输出源代码等
var str = `yven \n lae` //原样输出
字符串拼接使用"+"
布尔型
布尔类型也叫bool类型,bool类型数据只允许取值true或false
bool类型占一个字节
使用与逻辑判断
指针
- 基本数据类型,变量存的就是值,也叫值类型
- 获取变量的地址,go语言的取地址符是&,放到一个变量前使用就会返回相应变量的内存地址
- 指针变量存的是一个地址,这个地址指向的空间存的才是值,如:
var num int = 10 var ptr *int = &int
- 获取指针变量所指向的值,使用:* ,如:
//答应上方ptr对应的值 fmt.println(*ptr)
详细请见:
基本数据类型默认值
数据类型 | 默认值 |
---|---|
整型 | 0 |
浮点型 | 0 |
字符串 | "" |
字符 | 0 |
基本数据类型互相转换
go在不同类型的变量之间需要显式转换,也就是go的数据类型不能自动转换。
var num1 int = 777 var num2 float64 = float64(num1) var num3 uint8 = uint8(num2) fmt.println(num1,num2,num3)
注意点:
- go数据类型的转换可以是范围小转到范围大,也可以是范围大转到范围小。
- 被转换的是变量存储的数据,变量本身的数据类型并没有变化
其他类型转string类型
方式一:
func sprintf(format string,a ...interface{}) string
sprintf根据format参数生成格式化的字符串并返回字符串。
var num1 int = 99; var num2 float64 = 23.456 var istrue bool = true var char byte = 'a' var str string str = fmt.sprintf("%d", num1) fmt.printf("str类型为 %t str = %q\n",str, str) str = fmt.sprintf("%f", num2) fmt.printf("str类型为 %t str = %q\n",str, str) str = fmt.sprintf("%t", istrue) fmt.printf("str类型为 %t str = %q\n",str, str) str = fmt.sprintf("%d", char) fmt.printf("str类型为 %t str = %q\n",str, str)
输出结果为
str类型为 string str = "99" str类型为 string str = "23.456000" str类型为 string str = "true" str类型为 string str = "65"
方式二:
使用strconv包的函数
var num1 int = 99; var num2 float64 = 23.456 var istrue bool = true var str string str = strconv.formatint(int64(num1), 10) str = strconv.itoa(num1) fmt.printf("str类型为 %t str = %q\n",str, str) str = strconv.formatfloat(num2, 'f', 10, 64) fmt.printf("str类型为 %t str = %q\n",str, str) str = strconv.formatbool(istrue) fmt.printf("str类型为 %t str = %q\n",str, str)
输出结果:
str类型为 string str = "99" str类型为 string str = "23.4560000000" str类型为 string str = "true"
string类型转其他类型
使用strconv包的函数
package main import ( "fmt" "strconv" ) func main() { var str string = "true" var str1 string = "123456" var str2 string = "123.456" var istrue bool var num int64 var num2 float64 istrue, _ = strconv.parsebool(str) fmt.printf("str类型为 %t str = %v\n",istrue, istrue) num, _ = strconv.parseint(str1, 10, 64) fmt.printf("str类型为 %t str = %v\n",num, num) num2, _ = strconv.parsefloat(str2, 64) fmt.printf("str类型为 %t str = %v\n",num2, num2) }
输出结果为:
str类型为 bool str = true str类型为 int64 str = 123456 str类型为 float64 str = 123.456