#### Go 变量及基本数据类型(三)
今天学习一下剩下的两个基本数据类型(布尔类型,字符串类型)以及基本数据类型的相互转换
##### 布尔类型
布尔类型也称为bool 类型, bool 类型只允许取值true 和 false;
布尔类型占1个字节;
bool 类型适用于***逻辑运算***, 一般用于流程控制:
if 条件控制语句;
for 循环控制语句;
package main
import (
"fmt"
"unsafe"
)
func main(){
var a bool
fmt.Println(unsafe.Siaeof(a)) //1 占用内存大小
fmt.Println(a) // false 默认值为 false
}

  


##### 字符串类型
字符串就是一串固定长度的字符连接在一起的字符序列,Go 中的字符串是由单个字节连接起来的. Go 语言的字符串的字节使用UTF-8 编码标识的unicode 文本;
***string*** 占用内存大小为16字节;
案例:
package main
import
"fmt"
"unsafe"
)
func main(){
var str string
fmt.Println(unsafe.Siaeof(str)) // 16
fmt.Println(str) // 为空字符串
}

  


字符串使用注意事项与细节
1. Go 语言的字符串使用UTF-8编码标识的unicode 文本,不会出现乱码的问题;
2. 字符串一旦赋值后,字符串就不能再更改,Go 中字符串是不可变的;
3. 字符串的两种表示形式:
3.1 双引号,可以识别转义字符;
3.2 反引号,以字符串原生形式输出,不会转义字符, 包括不会转义换行符和特殊字符;
4. 字符串拼接使用+ 号;
5. 一行中字符串太长,需要使用多行字符串;
package main
import "fmt"
func main(){
var str = "yes"
str[0] = 'h' // 错误, 字符串可以索引,但是不可更改
var str1 = `
#!/usr/bin/env python
#coding: utf-8
def login():
print("yes\n")
print("hello,world")
if __name__ == "__main__":
login()
`
fmt.Println(str1)
// 字符串的拼接
str = "hello" + " world"
fmt.Println(str)
// 多行处理,分行需要将 + 保留在上一行;
str = "hello " + "world" + "hello " + "world" + "hello " + "world" +
"hello " + "world" + "hello " + "world" + "hello " + "world" +
fmt.Println(str)
}

  


##### 基本数据类型的默认值
前几篇文章中已经提到过,在这里再总结一下, 加深印象;
在Go 中数据类型都有一个默认值,当程序未给变量赋值时,将使用默认值, 默认值也称为零值;
基本数据类型的默认值如下:
1. 整型 = 0 ;
2. 浮点型 = 0 ;
3. 字符串 = "" ;
4. bool = false ;
package main
import "fmt"
func main(){
var a int //0
var b float32 //0
var c string //""
var d bool //false
fmt.Println(a,b,c,d)
}

  


##### 基本数据类型的转换
Go 与Java/C 不同, 不同的数据类型变量之间赋值需要***显示转换***, 不能自动转换;
1. 语法: T(v) 将值转换为类型T,T 是数据类型比如: int32,int,float32 等;
2. v: 需要转换的变量;
package main
import "fmt"
func main(){
var i int32 = 10
// 将i 转换为float
var i1 float32 = float32(i)
var i2 int8 = int8(i)
var i3 int64 = int64(i)
fmt.Println(i,i1,i2,i3)
}

  


基本数据相互转换注意事项
1. Go 数据类型转换可以是从 表示范围小--> 表示范围大;也可以表示范围大--> 表示范围小;
2. 被转换的变量的值,本身数据类型没有变化;
3. 在转换过程中,表示范围大--> 表示范围小时,编译不会报错, 如果超过范围小的值范围(参考上一篇文章),按溢出处理,结果可能不正确,所以在转换时需要考虑范围;
package main
import "fmt"
func main(){
var i int32 = 10
var i1 float32 = float32(i)
// 格式化输出,%v 表示值, 可以输出string,int 等基本类型;
fmt.Printf("i=%v,i1=%v\n",i,i1)
// 被转换的变量本身类型没有变化
fmt.Printf("i type is %T\n",i)
}

  


##### 基本数据类型与string 的转换
在开发中我们经常需要将基本数据类型转换成string, 或者将string 转换成基本数据类型
基本数据类型转string 类型
1. fmt.Sprintf("%v",vars)(推荐使用这个,比较灵活)
2. 使用strconv 包中的函数
//Sprintf formats according to a format specifier and returns the resulting string.
// Sprintf 根据格式化参数生成格式化后的字符串并返回该字符串
func Sprintf(format string,a ...interface{}) string

  


案例:
package main
import (
"fmt"
"strconv"
)
func main() {
var a int = 1
var b float64 = 1.1
var c bool = true
var d byte = 'a'
var str string
// 格式化int 类型
str = fmt.Sprintf("%d",a)
fmt.Printf("str type is %T, str value is %q\n",str,str)
// 格式化float64
str = fmt.Sprintf("%f",b)
fmt.Printf("str type is %T, str value is %q\n",str,str)
// 格式化bool
str = fmt.Sprintf("%t",c)
fmt.Printf("str type is %T, str value is %q\n",str,str)
// 格式化byte
str = fmt.Sprintf("%c",d)
fmt.Printf("str type is %T, str value is %q\n",str,str)
//第二种方式使用 strconv 包中的函数
// 第一个参数为int64类型, 第二个参数为目标进制
str = strconv.FormatInt(int64(a),10)
fmt.Printf("str type is %T, str value is %q\n",str,str)
// 第一个参数为float64类型,第二个参数为格式, 第三个参数为小数据保留10位,64表示第一个参数为原类型float64
var f float64 = 111.12345678
//str = strconv.FormatFloat(f,'f',10,32) // 111.1234588623
str = strconv.FormatFloat(f,'f',10,64) // 111.1234567800
fmt.Printf("str type is %T, str value is %q\n",str,str) str = strconv.FormatBool(c)
fmt.Printf("str type is %T, str value is %q\n",str,str)
}

  


##### string 类型转基本数据类型
使用strconv 包中的函数
func ParseBool(str string)(value bool,err error)
func ParseFloat(s string,bitSize int)(f float64,err error)
func ParseFloat(s string,base int, bitSize int) (i int64,err error)
func ParseUint(s string,b int,bitSize int)(n uint,err error)

  


案例:
package main

import (
"fmt"
"strconv"
) func main(){
var str = "true"
var b bool
// ParseBool 返回两个值,value ,err
// 在Go 中如果不需要函数返回的值可以使用_忽略, _ 不占用内存,作用类似于垃圾筒
// 一般情况下错误不建议忽略,这里是因为知道不会出错***
b,_ = strconv.ParseBool(str)
fmt.Printf("b type is %T, b value is %v\n",b,b) str = "123"
// 第一个参数为需要转换的字符串, 第二个参数为字符串代表的数字的进制,第三个参数为原字符串代表数字的类型,这里是int64
n,_ := strconv.ParseInt(str,10,64)
fmt.Printf("n type is %T, n value is %v\n",n,n) str = "12.123456789"
// 第一个参数为需要转换的字符串, 第二个参数为字符串代表的浮点数的类型,这里是float64
// 如果将64 改成32 会造成浮点数精度丢失,参考 strconv.FormatFloat()
f,_ := strconv.ParseFloat(str,64)
fmt.Printf("f type is %T,f value is %v\n",f,f)
}

  


string 转基本数据类型的注意事项
在将string 类型转换成基本数据类型时,要确保string 类型能够转成有效的数据,比如: 可以将"11" 转换成一个整数,但是不能将"aaa" 转换成一个整数,如果这样处理,将会返回错误,同时返回目标类型的零值(int=0,float = 0,bool=false)

-------最近在同步更新微信公众号:"开胃咸菜", 最新文章以公众号为准,感谢关注

Go 变量及基本数据类型3的更多相关文章

  1. 不可或缺 Windows Native (2) - C 语言: 常量,变量,基本数据类型

    [源码下载] 不可或缺 Windows Native (2) - C 语言: 常量,变量,基本数据类型 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 常量 变量 基本 ...

  2. Python编程从入门到实践笔记——变量和简单数据类型

    Python编程从入门到实践笔记——变量和简单数据类型 #coding=gbk #变量 message_1 = 'aAa fff' message_2 = 'hart' message_3 = &qu ...

  3. javaScript的注释、变量和基本数据类型

    上一级写了javaScript是用来操作文档对象元素的,这一次带大家看看javaScriput的注释.变量和基本数据类型. 1.注释:注释是什么呢?注释其实就是阻止浏览器解析某一行或者多行代码或描述的 ...

  4. Java 变量及基本数据类型

    1.Java变量 1.1 变量的概念 内存中开辟的一块存储空间,用于存放运算过程中需要用到的数据: 该区域有自己的名称(变量名)和类型(数据类型): 该区域的数据可以在同一类型范围内不断变化: 1) ...

  5. Flutter学习笔记(3)--Dart变量与基本数据类型

    一.变量 在Dart里面,变量的声明使用var.Object或Dynamic关键字,如下所示: var name = ‘张三’: 在Dart语言里一切皆为对象,所以如果没有将变量初始化,那么它的默认值 ...

  6. Python入门 .变量 常量 基础数据类型 用户输入 流程控制语句 小练习题

    # 2.name = input(“>>>”)通过代码来验证name变量是什么数据类型?--str name = input(">>>") pr ...

  7. Python变量与基本数据类型

    Python变量与基本数据类型 前言 好了,从本章开始将正式进入Python的学习阶段.本章主要介绍的是Python变量与基本数据类型的认识,这些都是最基本的知识并且必须要牢靠掌握在心中. 注释 学习 ...

  8. Go 变量及基本数据类型2

    #### Go 变量及基本数据类型(二)今天学习一下基本数据类型,包括整数类型,小数类型,字符类型##### 整数类型用来存放整数数值的, 如0,1,-10,2222等; 整数型的类型有: 类型 有无 ...

  9. Go 变量及基本数据类型1

    #### Go 变量及基本数据类型(一)今天主要学习一下Go 中的变量及基本数据类型: 如何申明,使用变量,以及基本数据类型的介绍和使用细节; ##### 变量的介绍1. 变量相当于内存中一个数据存储 ...

随机推荐

  1. JENKINS中创建全局变量并在JOB中使用

    配置了一个 "PASSWORD"的变量值 然后再脚本里面使用   注意这里必须要用双引号 不然不行

  2. vue的一些细节

    注意区别 //鼠标滚轮事件 @wheel = "demo"demo()注意执行顺序,用户滚动鼠标滚轮,触发事件执行demo()函数,函数执行完毕后,页面滚动条滚动所以,当demo( ...

  3. 【LeetCode】1466. 重新规划路线 Reorder Routes to Make All Paths Lead to the City Zero (Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 DFS BFS 日期 题目地址:https://lee ...

  4. anaconda 安装 torchvision

    conda install torchvision -c soumith 参考: pytorch--torchvision安装_tyl15827311279的博客-CSDN博客_torchvision ...

  5. APP打开(四)—Deeplink推广,打开率很低怎么排查

    在开始正文之前,先解释一下,这里提到的打开率指的是点击了Deeplink之后正常打开了APP和点击量的比值. 开始正文: 但凡做TOC业务的多多少少都会用到Deeplink,这是一个重要的运营手段.但 ...

  6. Java 8 的内存结构

    Java8内存结构图 虚拟机内存与本地内存的区别 Java虚拟机在执行的时候会把管理的内存分配成不同的区域,这些区域被称为虚拟机内存,同时,对于虚拟机没有直接管理的物理内存,也有一定的利用,这些被利用 ...

  7. [linux]ubuntu18.04 屏幕分辨率不适应问题

    今天换了新显示器,发现更大的屏幕不适应原有的屏幕分辨率,看起来特别变扭. 在设置处查看最高分辨率仅为1024*748,没有与屏幕相适应的1920*1080(16:9). 解决方式: 1. 终端输入命令 ...

  8. Linux进程管理之基本指令

    目录 基本介绍 显示系统执行的进程 指令 ps - aux 常用选项 每行栏目的含义 查看父进程 终止进程 相关指令 实用案例 踢掉某个非法登录用户 终止远程登录服务sshd,在适当的时候再次重启ss ...

  9. ECMA-262规范定义的七种错误类型

    第一种:Error    所有错误的基本类型,实际上不会被抛出.   第二种:EvalError   执行eval错误时抛出. 第三种:ReferenceError    对象不存在是抛出. 第四种: ...

  10. 编写Java程序,以继承和多态思想模拟饲养员喂养不同动物的不同行为

    返回本章节 返回作业目录 需求说明: 以继承和多态思想模拟饲养员喂养不同动物的不同行为 动物园有饲养员和动物,其中动物有老虎.马.猴子.羊.狼等. 饲养员对不同的动物有不同的喂养行为. 实现思路: 以 ...