南宁网站推广v1,微信app下载安装官方免费下载,惠城中山网站建设,wordpress网站从零系列文章目录
【Go语言学习】ide安装与配置 【GO语言基础】前言 【GO语言基础】变量常量 【GO语言基础】数据类型 文章目录 系列文章目录数据类型数值型#xff1a;整数类型#xff1a;浮点数类型#xff1a; 字符型-布尔型-字符串零值转义字符 常用类型转换运算符总结 数据…系列文章目录
【Go语言学习】ide安装与配置 【GO语言基础】前言 【GO语言基础】变量常量 【GO语言基础】数据类型 文章目录 系列文章目录数据类型数值型整数类型浮点数类型 字符型-布尔型-字符串零值转义字符 常用类型转换运算符总结 数据类型 数值型
整数类型
注意u开头为无符号数在C语言中例如有 unsigned int无符号整型和 unsigned short无符号短整型等类型它们都以 u 或 unsigned 开头。无符号数只能表示正数和零不能表示负数。
类型取值范围大小字节int根据平台变化32或64int8-128到1271int16-32768到327672int32-2147483648到21474836474int64-9223372036854775808到92233720368547758078uint根据平台变化32或64uint80到2551uint160到655352uint320到42949672954uint640到184467440737095516158
package mainimport (fmtunsafe
)func main() {var New1 int 1var New2 int8 1var New3 int16 1var New4 int32 1var New5 int64 1//无符号数var New6 uint 1var New7 uint8 1var New8 uint16 1var New9 uint32 1var New10 uint64 1fmt.Println(New1, New2, New3, New4, New5, New6, New7, New8, New9, New10)//unsage.Sizeof输出数据类型存储的大小fmt.Println(unsafe.Sizeof(New1))fmt.Println(unsafe.Sizeof(New2))fmt.Println(unsafe.Sizeof(New3))fmt.Println(unsafe.Sizeof(New4))fmt.Println(unsafe.Sizeof(New5))fmt.Println(无符号数)fmt.Println(unsafe.Sizeof(New6))fmt.Println(unsafe.Sizeof(New7))fmt.Println(unsafe.Sizeof(New8))fmt.Println(unsafe.Sizeof(New9))fmt.Println(unsafe.Sizeof(New10))
}浮点数类型
类型取值范围大小字节float32±1.18e-38 to ±3.4e384float64±2.23e-308 to ±1.8e3088
package mainimport (fmtunsafe
)func main() {//浮点数类型var New1 float32 3.14var New2 float64 3.1415926fmt.Println(New1, New2)//unsage.Sizeof输出数据类型存储的大小fmt.Println(unsafe.Sizeof(New1))fmt.Println(unsafe.Sizeof(New2))
} 字符型-布尔型-字符串
类型取值范围大小字节字符byteuint8 类型代表一个ASCII字符1字节布尔型booltrue 或 false1字节通常字符串string由多个字符组成的序列以空字符‘\0’结尾变长取决于字符串的长度
package mainimport (fmtunsafe
)func main() {// 字符型bytevar b byte afmt.Printf(Byte: %c\n, b)// 布尔型var boolVar bool truefmt.Println(Bool:, boolVar)// 字符串技巧使用反引号括起来的字符串可以原样输出var strVar string Hello, Go!fmt.Println(String:, strVar)//unsage.Sizeof输出数据类型存储的大小fmt.Println(unsafe.Sizeof(b))fmt.Println(unsafe.Sizeof(boolVar))fmt.Println(unsafe.Sizeof(strVar))
}零值
在Go中所有声明的变量都会被赋予一个零值例如int类型的零值是0string类型的零值是空字符串。
package mainimport fmtfunc main() {var New1 intvar New2 stringfmt.Println(New1)fmt.Println(New2)
}转义字符
转义字符描述\n换行符表示一个新的行开始。\r回车符表示回到当前行的开头。\t制表符表示一个制表位Tab。\双引号用于表示包含在字符串中的双引号。\单引号用于表示包含在字符串中的单引号。\\反斜杠用于表示包含在字符串中的反斜杠本身。\0空字符表示一个空字符。\xHH十六进制转义字符用于表示一个两位十六进制数表示的字节。例如\x0A表示换行符ASCII码为10。\uHHHHUnicode转义字符用于表示一个四位十六进制数表示的Unicode字符。例如\u0020表示空格字符Unicode码为U0020。\UHHHHHHHH大写Unicode转义字符用于表示一个八位十六进制数表示的Unicode字符。例如\U00000020表示空格字符Unicode码为U0020。
常用类型转换
自定义类型之间的转换 自定义类型之间的转换取决于它们的底层类型。如果底层类型相同那么它们可以相互转换。 如float64转换为int
package mainimport (fmtreflect
)func main() {var a int 42var b float64 float64(a) // 将整数转换为浮点数//输出数据fmt.Println(b)//输出数据类型fmt.Println(b 的类型:, reflect.TypeOf(b))
}数值类型
可以将整数类型转换为浮点数类型例如int转换为float64。可以将浮点数类型转换为整数类型但会丢失小数部分例如float64转换为int。不同大小的整数类型之间可以相互转换但注意可能会导致溢出或数据丢失。
package mainimport (fmtreflect
)func main() {var x int 42var y float64 float64(x) // int到float64的显式转换fmt.Println(x)fmt.Println(y 的类型, reflect.TypeOf(y))fmt.Println()//float64转换int后精度丢失var f float64 58.0022var z int int(f)fmt.Println(f)fmt.Println(f 的类型(转换前), reflect.TypeOf(f))fmt.Println(z)fmt.Println(z 的类型(转换后), reflect.TypeOf(z))
} 字符串类型
可以将字符串转换为字节数组或切片例如string转换为[]byte。可以将字节数组或切片转换为字符串例如[]byte转换为string。可以将一些数值类型转换为字符串例如int转换为string。在字符类型转换中常用strconv包点我跳转中文网。
package mainimport (fmtreflectstrconv
)func main() {var New1 int 555fmt.Println(New1)fmt.Println(New1的数据类型是, reflect.TypeOf(New1))// 将整数转换为字符串var New2 string strconv.Itoa(New1)fmt.Println(New2)fmt.Println(New2的数据类型是, reflect.TypeOf(New2))// 将浮点数转换字符串var New3 float64 3.14fmt.Println(New3)fmt.Println(New3的数据类型是, reflect.TypeOf(New3))var New4 string strconv.FormatFloat(New3, f, -1, 64)//第一个参数是要转换的浮点数。//第二个参数是格式标记其中f表示使用普通的浮点数格式。//第三个参数是精度-1表示使用尽可能多的精度。//第四个参数是浮点数的位数通常使用64表示float64类型。fmt.Println(New4)fmt.Println(New4的数据类型是, reflect.TypeOf(New4))} 布尔类型 布尔类型不能直接转换为其他数据类型也不能从其他类型直接转换为布尔类型需要使用条件语句来进行转换。
package mainimport (fmtreflectstrconv
)func main() {var b1 bool truevar b2 bool false// 不能直接将b1转换为b2或反之需要使用条件语句或逻辑运算符来转换b1 !b2 // 使用逻辑非来转换fmt.Println(b1)fmt.Println(b1数据类型是, reflect.TypeOf(b1))//布尔转换为字符串\var New1 string strconv.FormatBool(b1)fmt.Println(New1)fmt.Println(New1数据类型是, reflect.TypeOf(New1))
}运算符
运算符描述加法-减法*乘法/除法%取余自增前置–自减前置自增后置–自减后置取地址运算符^按位取反运算符^按位异或运算符|按位或运算符左移位运算符右移位运算符等于运算符!不等于运算符大于运算符小于运算符大于等于运算符小于等于运算符逻辑与运算符||逻辑或运算符!逻辑非运算符低位位移运算符高位位移运算符加等于运算符-减等于运算符*乘等于运算符/除等于运算符%取模等于运算符按位与等于运算符^按位异或等于运算符|按位或等于运算符低位左移位等于运算符低位右移位等于运算符
package mainimport fmtfunc main() {//算术运算符var a, b int 10, 5fmt.Println(a b) // 加法fmt.Println(a - b) // 减法fmt.Println(a * b) // 乘法fmt.Println(a / b) // 除法fmt.Println(a % b) // 取余//赋值运算符var c intc 100fmt.Println(c)c 50 // 简写加法赋值等于cc50fmt.Println(c)c - 20 // 简写减法赋值等于cc-20fmt.Println(c)c * 3 // 简写乘法赋值cc*20fmt.Println(c)c / 10 // 简写除法赋值cc/20fmt.Println(c)//比较运算符var d, e int 50, 75fmt.Println(d e) // 等于输出 falsefmt.Println(d ! e) // 不等于输出 truefmt.Println(d e) // 小于输出 truefmt.Println(d e) // 大于输出 falsefmt.Println(d e) // 小于等于输出 truefmt.Println(d e) // 大于等于输出 false//位运算符var f, g uint8 5, 3fmt.Println(f g) // 按位与输出 1fmt.Println(f | g) // 按位或输出 7fmt.Println(f ^ g) // 按位异或输出 6fmt.Println(f 2) // 左移输出 20fmt.Println(f 2) // 右移输出 1//其他运算符var h bool truevar i int 42fmt.Println(!h) // 取反输出 falsefmt.Println(i) // 取正输出 42正数fmt.Println(-i) // 取负输出 -42负数fmt.Println(i 3) // 无符号左移输出 168无符号8位数的正数
}非布尔数据类型不能使用取反 总结
需要根据数据类型之间的关系选择合适的方法。需要特别注意的是不支持任意类型的隐式转换必须使用显式类型转换来完成转换操作并且在一些情况下可能会引起精度丢失或运行时错误。因此在进行数据类型转换时务必小心谨慎。