类型转换
其他类型转字符串类型
通过fmt.Sprintf("%v",要转换的变量)
var num1 int = 90
var num2 float64 = 23.456
var mychar byte= 'a'
var isB bool =true
var str string
var str2 string
str = fmt.Sprintf("%v", num1)
fmt.Printf("类型是%T值为%v\n", str, str)
str2 = fmt.Sprintf("%v", num2)
fmt.Printf("类型是%T值为%v\n", str2, str2)
str2=fmt.Sprintf("%v",mychar)
fmt.Printf("类型是%T值为%v\n",str2,str2)
str2=fmt.Sprintf("%v",isB)
fmt.Printf("类型是%T值为%v",str2,str2)
字符串转换成其他类型
bool转字符串
var str string="true"
var b bool
b,_=strconv.ParseBool(str)
int转字符串
strconv.ParseInt 参数1:字符串 参数2:几进制 参数三:要分配的空间数 0 8 16 32 64 返回出来的值是int64类型的 所以必须要用int64来接收
注意(分配的空间要大于传入字符传的值 不然会被截断到空间最大值)
var n int64
var str = "1234567890"
n=strconv.ParseInt(str,10,8) // 分配了8个空间给他 显然分配的不够
fmt.Printf("类型是%T,值为%v\n",n1,n1) // 类型为int64 值为127
因为分配的是8个空间 不够存放字符串的值 所以被截断到127了
float转字符串
strconv.ParseFloat 参数1:字符串 参数二:要分配的空间数 转换出来的值是float64类型
var str3 string="123.1111"
var n2 float64
n2,_ = strconv.ParseFloat(str3,64)
fmt.Printf("类型是%T,值为%v\n",n2,n2)
注意
1.字符串转数字的时候 只有纯数字的字符串才会转换成功 其他的带任何非数字除了正负号都会转换为0 包括" -123456" 也会转换为0
2.字符串转换bool类型的时候 1和true会转true 其他任意字符串都会转成false
遍历字符串
str := "abcdefg呵呵呵"
for i=0;i<len(str);i++{
// 遍历带中文字符的字符串 使用原始方法会打印出现乱码 原因是使用原始遍历是无法解析utf8的
fmt.Printf("%c\n",str[i])
}
// 如果想正确遍历出字符串 可以使用for range
for i,v := range str{
fmt.Printf("%c\n",v)
}
指针
var i int=15
fmt.Printf("i的地址=%v\n",&i)
// ptr是一个指针变量
// ptr的类型是*int指向int的一个指针
// ptr是个指向地址的指针 要取得指针指向的值使用*ptr来取
var ptr *int = &i
// 使用*ptr访问i的值
// 也可以使用*ptr修改i的值
*ptr=999
fmt.Println(ptr,&ptr)
fmt.Printf("ptr指向的值%v",i)
键盘输入
var name string
var age byte
var sal float32
var isPass bool
fmt.Println("输入姓名:")
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)