Go语言-基本类型(int,float,bool,byte,string)
1 函数格式
定义格式:
func functionName(para1 para1Type, para2 para2Type) (ret1 ret1Type, ret2 ret2Type) {...
}
函数名用骆驼命名法。
main函数无参数无返回。
其他函数可以有多个返回值,跟Python一样。
每个包在被引入或者main包开始运行的时候,可以有一个首先运行的函数,类似于构造函数:
func init () {...
}
2 类型
Go语言的静态性,体现在类型上,需要显示定义,显示转换。
变量、常量,具有类型。
声明形式:
var varName varType
var varName varType = xxx
varName := xxxvar s string
var v int = 5
a := 5.0
类型转换:
valueOfTypeB = typeB(valueOfTypeA)a := 5.0
b := int(a)
2.1 基本类型
基本类型 |
---|
int |
float |
bool |
byte |
2.1.1 int
int | 范围 |
---|---|
int8 | (-128 -> 127) |
int16 | (-32768 -> 32767) |
int32 | (-2,147,483,648 -> 2,147,483,647) |
int64 | (-9,223,372,036,854,775,808 -> 9,223,372,036,854,775,807) |
uint8 | (0 -> 255) |
uint16 | (0 -> 65,535) |
uint32 | (0 -> 4,294,967,295) |
uint64 | (0 -> 18,446,744,073,709,551,615 |
从上面看不到int/uint类型,Go语言的int/uint类型,是不可移植的类型,其长度根据宿主机的机器字长决定,比如32位的架构,int/uint就是int32/uint32;64位架构,int/uint就是int64/uint64。
uintptr是宿主系统内足够存放一个指针的类型。
八进制:0777
十六进制:0xFF
格式化输出:%d %x %X
2.1.2 float
float | 精度 |
---|---|
float32(+- 1e-45 -> +- 3.4 * 1e38) | 精确位数小数点后7位 |
float64(+- 5 * 1e-324 -> 107 * 1e308) | 精确位数小数点后15位 |
格式化输出:%g %f %e
2.1.3 bool
true或者false。
比较运算表达式(==, !=),可以返回bool类型的结果。
bool类型可以参与到逻辑运算中(!, &&, ||),采用短路运算。
格式化输出用 %t 表示bool类型。
2.1.4 byte
byte其实是整型的特殊用例。byte是uint8的别名。
var ch byte = 'A'
var ch byte = 65
var ch byte = '\0x41' //0x后面必须跟2位的16进制数
如果是UTF-8,就不能用byte了,要用int:
var ch int = '\u0041'
var ch2 int = '\u03B2'
fmt.Printf("%d, %d", ch, ch2) //int
fmt.Printf("%c, %c", ch, ch2) //字符
fmt.Printf("%X, %X", ch, ch2) //UTF-8字节
fmt.Printf("%U, %U", ch, ch2) //UTF-8 code point65, 946
A, β
41, 3B2
U+0041, U+03B2
字符类型的一些判定函数,在系统包unicode里边:
unicode.IsLetter(ch)
unicode.IsDigit(ch)
unicode.IsSpace(ch)
2.2 字符串
其实是个字节类型的定常数组,但是一旦初始化后,内容不可变。
转义字符还是老样子:
转义字符 |
---|
\n |
\r |
\t |
\u \U Unicode字符 |
\\ |
新的东西是非解释字符串,里边的内容不解释,没有转义,用反括号(键盘1左边的那个键)括起来:
`This is a raw string \n`
This is a raw string \n
字符串的对比,可以通过:
字符串对比运算符 |
---|
== |
!= |
< |
<= |
> |
>= |
比较的方式是按照字节来对比。
2.2.1 长度
len(str)
2.2.2 字符
str[0]
str[1]
str[len(str) - 1]
2.2.3 拼接
s = s1 + s2
strings.Join()
bytes.Buffer
2.2.4 strings 包
前后缀
strings.HasPrefix(s, prefix string) bool //s是否以prefix开头
strings.HasSuffix(s, suffix string) bool //s是否以suffix结尾
包含
strings.Contains(s, substr string) bool //s是否包含substr
index位置
strings.Index(s, str string) int //str在s中的位置,-1表示不包含
strings.LastIndex(s, str string) int //s中最后一个str的位置,-1表示不包含
strings.IndexRune(s string, r rune) int //非ASCII字符的定位
替换
strings.Replace(str, old, new, n) string
//str中前n个old换成new,n=-1表示全部替换
//并不会改变str,返回一个新的string
统计个数
strings.Count(s, str string) int //str在s中出现的个数
重复字符串
strings.Repeat(s, count int) string //s重复count次,生成一个新的string
大小写
strings.ToLower(s) string //s里边全部Unicode字符变成小写
strings.ToUpper(s) string //s里边全部Unicode字符变成大写
字符串修剪
strings.TrimSpace(s) string //删除头尾两端的空白字符
strings.Trim(s, cutset) string //删除头尾两端的cutset字符串
strings.TrimLeft(s, cutset) string
strings.TrimRight(s, cutset) string
字符串分割
strings.Fields(s) []string //按照空白字符分割s,返回一个slice
strings.Split(s, sep) []string //按照指定字符分割s,返回slice
拼接slice
strings.Join(sl []string, sep string) string //用分割符把slice拼接到一起
从字符串中读取内容
strings.NewReader(str) *Reader //实例化一个Reader,可以用Reader的若干方法
.Len()
.Read(b []byte) (n int, err error) //把str的内容读入到一个[]byte中
关于Reader的Read,有个例子,反复Read到一个[]byte中:
func main() { s := "Hello World!" // 创建 Reader r := strings.NewReader(s) // 创建长度为 5 个字节的缓冲区 b := make([]byte, 5) // 循环读取 r 中的字符串 for n, _ := r.Read(b); n > 0; n, _ = r.Read(b) { fmt.Printf("%q, ", b[:n]) // "Hello", " Worl", "d!" } }
2.2.5 strconv 包
字符串和其他类型的转换
strconv.IntSize //当前平台int的字长
strconv.Itoa(i int) string //整数转字符串
strconv.FormatFloat(f float64, fmt byte, prec int, bitSize int) string //float64 转字符串, fmt可以是'b', 'e', 'f', 'g';prec表示精度;bitSize 32表示float32,64表示float64
strconv.Atoi(s string) (i int, err error) //字符串转整数
strconv.ParseFloat(s string, bitSize int) (f float64, err error) //字符串转float64
2.3 常量
const identifier [type] = valueconst b string = "abc"
const b = "abc"
const Pi = 3.14159
注意上面的常量定义,类型是可以省略的,但是不等于没有类型了,省略关键字的时候,类型是编译器自己判断出来并加上的。
常量的值必须在编译时可知,运行时才知道的值不能作为常量定义的右值。
const c1 = 2/3 // OK
const c2 = getNumber() // 引发构建错误: getNumber() used as value
2.4 枚举
枚举用的是常量,没有专门的枚举类型,奉行能少就少,能用别的代替就用别的代替的原则:
const (Unknown = 0Female = 1Male = 2
)
const (a = iotabc
)
// 每一个新行,iota都加1,所以a, b, c = 0, 1, 2
// 每遇到const,iota就归零
2.5 变量
名字在前,类型在后。
var a, b *int //a和b都是*int类型
var (a intb boolstr string
)
变量声明后就有零值了,所以都是经过初始化的:
- int 0
- float 0.0
- bool false
- string “”
- * nil
作用域:
1. 函数外,全局,包内甚至包外(首字母大写)可用
2. 函数内,代码块外,函数可用
3. 函数内,代码块内(if, for等含有{}的部分),代码块内可用
Go语言-基本类型(int,float,bool,byte,string)相关推荐
- TypeError: keys must be str, int, float, bool or None, not tuple,解决 python 中 json 保存不了字典键值为 元组 的问题
>>> a = {('0xFFFA', 11): 32, ('0x00F3', 1): 1, ('0xFFFA', 2): 42} {('0xFFFA', 1): 32, ('0x0 ...
- C 语言实例 - 计算 int, float, double 和 char 字节大小
C 语言实例 - 计算 int, float, double 和 char 字节大小C 语言实例 C 语言实例使用 sizeof 操作符计算int, float, double 和 char四种变量字 ...
- 一木.溪桥学Python-04: Python基础数据类型int ,float ,bool ,complex,None,str, 转义字符
一木.溪桥 在Logic Education跟Amy学Python 12期:Python基础课 一木.溪桥学Python-04: Python基础数据类型int ,float ,bool ,compl ...
- java中String与int/float/double/byte/数组
原文链接:小宁博客[添加链接描述](https://www.sunxiaoning.com/language/634.html) int转换为String(int i=100) 第一种方法:s=i+& ...
- string转int/float/double、int/float/double转string、转字符串数组的方法:stoi、stringstream、scanf、to_string、sprintf
一.string转化为数字 1.使用stoi #include <iostream> #include <string> using namespace std; int ma ...
- C/C++语言中计算int,float,double,char四种数据类型所能表示的数据范围
char 1字节 short 2字节 int 4字节 long 4字节 long long 8字节 float ...
- c语言变量类型int,C语言基础学习基本数据类型-int类型与int变量
C++学习笔记26:泛型编程概念 一.什么是泛型编程? 泛型就是通用的型式 编写不依赖数据对象型式的代码就是泛型编程 二.为什么需要泛型编程? 函数重载,相似类定义与型式兼容性 例如:设计函数,求两个 ...
- java+boolean+属性,java – 从属性中获取int,float,boolean和string
如果您有一类配置值,例如常量类,并且要从配置(属性)文件加载所有值,则可以创建一个小帮手类并使用反射: public class ConfigLoader { public static void l ...
- c语言算式中有double和int,C语言当中int,float,double,char这四个有什么区别?
区别在以下方面: 一.定义方面: 1.int为整数型,用于定义整数类型的数据 . 2.float为单精度浮点型,能准确到小数点后六位 . 3.double为双精度浮点型,能准确到小数点都十二位 . 4 ...
- java整数类型int字面值_JavaKotlinAndroidGuide
Java是一种强类型化的语言,每个变量都有一种类型,每个表达式也都有一种类型,并且每一种类型都是严格定义的.所有的赋值操作不管是显式的还是在方法中调用中通过参数传递的,都要经过类型兼容性检查 一.基本 ...
最新文章
- Linux简单的颜色设置
- 【ARM-Linux开发】【CUDA开发】【深度学习与神经网络】Jetson Tx2安装相关之二
- Windows 8.1 重复数据删除——规划部署(二)
- c语言x的2取模_c语言如何取模运算
- java------多线程通信
- 关于SQL Server数据库中的标识列
- Oracle查询转换之连接谓词推入
- 图像处理一些常用的网站
- [数论系列一]C Looooops,跳跳棋,The Luckiest number,CF906D Power Tower,Minimal Power of Prime,仪仗队,LCMSUM
- React开发(274):ant design 时间显示秒
- windows笔记-【内核对象线程同步】等待函数
- Spark SQL External DataSource外部数据源
- PHP怎么计算百分比?PHP计算百分比的写法
- 酒业头条信息流投放评估
- 服务器信息批量收集,如何批量导入或导出服务器信息
- Qt使用QImage裁剪图片
- App Designer中自建回调函数
- GGNN:GATED GRAPH SEQUENCE NEURAL NETWORKS
- Java 17 采用率增长 430%、Java 11 稳居第一,最新 Java 编程语言报告来了!
- 安徽财经大学431金融学综合考研历年真题库资料
热门文章
- 供应链金融业务如何脱颖而出?
- 毕业设计开题分析:MIPS指令集硬件化设计与实现
- 创业者应警惕可疑的成功
- Python 报错Process finished with exit code -1073740791 (0xC0000409)解决方法
- VS2008 水晶报表部署
- 古诗词学习-迢迢牵牛星+长歌行+小雅·采薇+敕勒歌+悯农(其一)+小儿垂钓+蝉+正月十五夜+望月怀远+十五夜望月寄杜郎中
- vue综合项目——悦听音乐播放器
- 如何利用新浪博客做外链
- 2018中科院计算所夏令营面试经历
- JavaScript基础语法