目录
一、整型
package main
import "fmt"
/*
整型:有符号、无符号
无符号整型:uint8、uint16、uint32
有符号整型:int8、int16、int32
*/
var a int8
var b uint8
var c uint8
func main(){
//整型
a = 100
fmt.Printf("a is %v, type of a is %T\n", a, a)
//无符号位8位整型在计算时注意溢出
b = 1
c = 2
fmt.Println("b - c =", b-c)
//进制表示:0b--二进制;0o--八进制;0x--十六进制
bin_num := 0b11
oct_num := 0o11
hex_num := 0x11
fmt.Println("二进制11的十进制为", bin_num)
fmt.Println("八进制11的十进制为", oct_num)
fmt.Println("十六进制11的十进制为", hex_num)
}
运行结果:
二、浮点型
package main
import (
"fmt"
"github.com/shopspring/decimal"
)
func main(){
//浮点数:float32、float64 --相比float32,float64更精确
var f1 float32 = 0.111111
var f2 float32 = 0.222222
var f3 float32 = 0.333333
if f1 + f2 == f3{
fmt.Println("0.111111 + 0.222222 = 0.333333")
}else{
fmt.Println("0.111111 + 0.222222 != 0.333333")
}
//精确的浮点数:decimal
x := decimal.NewFromFloat(0.111111)
y := decimal.NewFromFloat(0.222222)
z := decimal.NewFromFloat(0.333333)
if x.Add(y).Equal(z) {
fmt.Println("0.111111 + 0.222222 = 0.333333")
}else{
fmt.Println("0.111111 + 0.222222 != 0.333333")
}
}
运行结果:
三、字符类型
package main
import "fmt"
func main(){
//字符类型:byte、rune --编码:人类语言与机器语言的翻译工具
//byte相当于uint8
//rune相当于int32
var c1 byte
c1 = 97
fmt.Printf("编码为%v,对应的字符为%v\n", c1, string(c1))
//字符串的遍历
//range获取的是rune类型,range返回两个值:index(索引)和value(值)
for _, v := range "abcxyz"{
fmt.Printf("v的编码为%v,字符为%c,类型为%T\n", v, v, v)
}
}
运行结果:
四、字符串
字符串的格式化
%v -- 按值本身输出
%T -- 输出值的类型
%b -- 整型以二进制方式显示
%o -- 整型以八进制方式显示
%x -- 整型以十六进制方式显示
%X -- 整型以十六进制方式显示,字母显示为大写
%f -- 浮点数
%s -- 字符串
%c -- 字符
package main
import "fmt"
func main(){
//把格式化好的字符赋值给另一个变量
format_str1 := fmt.Sprintf("name is %s", "sumeng")
fmt.Println(format_str1)
name := "sumeng"
format_str2 := fmt.Sprintf("my name is %s", name)
fmt.Println(format_str2)
}
运行结果:
统计字符串的长度
len()函数统计的是字符串所占用字节数,其中中文字符占3个字节
package main
import "fmt"
func main(){
str1 := "xxyy"
str2 := "中国"
fmt.Println("字符串xxyy的长度为", len(str1))
fmt.Println("字符串中国的长度为", len(str2))
}
运行结果:
循环输出每个字节
package main
import "fmt"
func main(){
str1 := "xxyy中国"
//该循环获取的是一个个字节(byte类型)表示,中文会被拆分输出
for i := 0; i < len(str1); i++{
fmt.Printf("%v(%c), type is %T\n", str1[i], str1[i], str1[i])
}
//该循环获取的是一个个字符,中文不会被拆分
for _, v := range str1{
fmt.Printf("%v(%c), type is %T\n", v, v, v)
}
}
运行结果:
转义字符
\t:表示一个制表符
\n:表示一个换行符
\\:表示反斜杠本身
\r:表示一个回车(从当前的最前面开始输出,覆盖前面的内容)
注意:使用反引号定义字符串时,字符串会原样输出,不进行转义
package main
import "fmt"
func main(){
str1 := "a\tb"
fmt.Println(str1)
//不进行转义
str2 := `a\tb`
fmt.Println(str2)
}
运行结果:
字符串的转换--strconv包
package main
import (
"fmt"
"strconv"
)
func main(){
number1 := 10
//int --> str
str1 := strconv.Itoa(number1)
fmt.Printf("str1 is %s, type is %T\n", str1, str1)
//str --> int
//返回两个值,若输入的值不能转换的话,e会拿到错误信息
v, e := strconv.Atoi("10")
fmt.Printf("v is %v, type is %T, error is %s", v, v, e)
}
运行结果:
string的常用方法--strings包
package main
import (
"fmt"
"strings"
)
func main(){
str1 := "xixihaha"
//strings.HasPrefix()用于检测字符串是否以指定的前缀开头
if strings.HasPrefix(str1, "x"){
fmt.Println("str1 start with x")
}
//strings.Count()计算字符串中指定字符的个数
fmt.Println("字符h在字符串str1中的个数为", strings.Count(str1, "h"))
//strings.Replace()返回将字符x替换为*的字符串
//-1表示全部替换
fmt.Println(strings.Replace(str1, "x", "*", -1))
}
运行结果:
字符串的截取
截取格式:str[start:end]
package main
import "fmt"
func main(){
str1 := "abcdefg"
//左闭右开,没有负下标
fmt.Println("截取字符串第3~5个字符:", str1[2:5])
}
运行结果:
五、布尔类型
各类型的默认值
package main
import "fmt"
func main(){
//布尔类型默认值为false
var a bool
fmt.Println("布尔类型的默认值为", a)
//int类型默认值为0
var num int
fmt.Println("整型的默认值为", num)
//string类型默认值为空
var str string
fmt.Println("字符串类型的默认值为", str)
}
运行结果: