【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
fmt
- %+v: 打印当前对象的所有参数的详细信息
- %#v: 打印当前对象包括对象类型和参数名称及值的详细信息
- %T: 打印当前对象的类型信息
- %d: 用于格式化整数
- %5d: 格式化整数,并保证其占用的位数至少为5个,如果多于5个则按实际长度延伸
- %x: 以小写的形式格式化整数为十六进制表示
- %X: 以大写的形式格式化整数为十六进制表示
- %g: 用于格式化浮点数
- %f: 输出浮点数
- %e: 用科学计数法表示浮点数
- %n.mg: 用于表示数字n并精确到小数点后m位,同样的还可以使用e或者f
- %t: 用于输出布尔类型变量
- %b: 将整数以二进制位的形式打印
- %c: 用于字符类型数据的输出,这里注意,对于字符类型数据,%d和%v只会输出该字符对应的整数值
- %p: 用于指针地址的输出
go程序的一般结构
- 在完成包的import后,开始对常量、变量和类型的定义或声明;
- 如果存在init函数,则对该函数进行定义(这是一个特殊的函数,每个含有该函数的包都会首先执行这个函数);
- 如果当前包是main包,则定义main函数;
- 然后定义其余函数,首先是类型的方法,接着是按照main函数中先后调用的顺序来定义相关函数,如果有很多函数,则可以按照字母顺序来进行排序。
go程序的执行顺序
- 按顺序导入所有被main包引用的其他包,然后在每个包中执行如下流程:
- 如果该包又导入了其他的包,则从第一步开始递归执行,但是每个包只会被导入一次;
- 然后以相反的顺序在每个包中初始化常量和变量,如果该包含有init函数的话,则调用该函数;
- 在完成这一切之后,main也执行同样的过程,最后调用main函数开始执行程序。
类型转换
// 类型B的值 = 类型B(类型A的值)
a := 5.0
b := int(a)
// IZ是int的别名
var a IZ = 5
c := int(a)
d := IZ(c)
常量
- 常量使用关键字const定义,用于存储不会改变的数据;
- 存储在常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型;
- 常量的定义格式如下:
const identifier [type] = value
const Pi = 3.14159
- 常量的值必须是在编译时就能够确定的,你可以在赋值表达式中涉及计算过程,但是所有用于计算的值必须是在编译期间就能获得的;
- 常量表达式中不可以使用自定义函数,因为其是在运行期才确定的,但是可以使用内置函数,如:len();
- 常量可以用于表示枚举,在枚举中可以使用iota用来表示一个从0开始的自增量,需要注意的是,iota从0开始,并且每个常量值都对应了一个值,如果当前iota赋值的不是第一个,那么其得到的值是该常量在常量块(用括号括起来的部分)中的常量索引;
const (
Monday = 10
Tuesday = iota // 1
Wednesday // 2
Thursday // 3
)
- 关于iota使用需要注意的一个点是,下一个枚举值对应的数据是延续上一个枚举值表达式的结果,而不单单是iota的结果,如:
type ByteSize float64
const (
KB ByteSize = 1 << (10 * iota)
MB // 1 << (10 * iota)
GB // 1 << (10 * iota)
TB // 1 << (10 * iota)
// ...
)
变量
- 变量的语法:
var identifier type
var a int
var b bool
var str string
- 变量块的用法:
var (
a int
b bool
str string
)
- 对于变量的赋值,可以使用多个变量连接的形式,如:
a, b, c, d := 1, 5, true, "abc"
- 变量的交换的简便表达形式:
a, b = b, a
- 空白标识符,也即
_,主要用于一些将要被丢弃的变量,例如方法的返回值
值类型和引用类型
- 值类型:int、float、bool、string、数组和结构
- 引用类型:slice、map和channel
基本数据类型
- int和uint在32位操作系统是,它们均使用32位(4个字节),在64位操作系统上,它们均使用64位(8个字节);
- uintptr的长度被设定为足够存放一个指针即可;
- float32精确到小数点后7位,float64精确到小数点后15位,在使用
==或!=来比较浮点数时应当非常小心,最好在正式使用前测试对精确度要求较高的运算; - 复数的表现形式:
var c1 complex64 = 5 + 10i
fmt.Printf("The value is: %v", c1)
- 位运算
- 按位与
&表示对应位置上的值进行与操作,都为1时结果位才为1; - 按位或
|表示对应位置上的值进行或操作,只要有一个为1时结果就为1; - 按位异或
^表示对应位置上的值不同时结果才为1,否则为0 - 按位清除
&^表示当第二个数的对应位为1时,返回值对应位就为0,否则返回值的对应位于第一个数的对应位相同 - 按位补足
^是一个一元操作符,如果修饰的是一个无符号整数,则结果为将其全部位都进行取反操作,如果修饰的是一个有符号整数x,则结果为将其与-1进行异或操作,即-1 ^ x - 按位左移
<<用法为bitP << n,表示将bitP所有位向左移动n位,右侧空出的部分用0填充,其结果相当于将bitP与2的n次方相乘的结果; - 按位右移
>>用法为bitP >> n,表示将bitP所有位向右移动n位,左侧空出的部分用0填充,其结果相当于将bitP除以2的n次方的结果;
- 按位与
类型别名
- 类型别名得到的新类型与原类型不完全相同,新类型不会拥有原类型所附带的方法
字符串
- 字符串的内容可以通过标准索引法来获取,即在中括号
[]中写入索引,索引从0开始计数,如:
str[0]
str[i - 1]
str[len(str) - 1]
- 需要注意的是,使用标准索引法来获取字符串中的内容只对ASCII码字符串有效;另外,尝试获取字符串中某个字节的地址是非法的,如:&str[i]
- 两个字符串可以通过
+进行拼接,如:s := s1 + s2 - 在进行多行操作时,如下面的示例,需要注意操作符要写在前一行的末尾,这是因为编译器在行尾自动添加分号:
str := "Beginning of the string " +
"second part of the string"
- 在循环中使用加号
+拼接字符串并不是高效的做法,更好的办法是使用函数strings.Join(),或者使用字节缓冲bytes.Buffer拼接更加有效 - 前缀和后缀
strings.HasPrefix(s, prefix string) bool // 前缀判断
strings.HasSuffix(s, suffix string) bool // 后缀判断
- 包含
strings.Contains(s, substr string) bool
- 索引
// 找到了则返回该子串第一次出现的索引位置,没找到则返回-1
strings.Index(s, str string) int
// 返回指定字符串在目标字符串中最后一次出现的文职,没找到则返回-1
strings.LastIndex(s, str string) int
// 返回非ASCII字符在父字符串中的位置
strings.IndexRune(s string, r rune) int
- 替换
// 将字符串str中前n个old替换为new,并返回替换后的字符串,如果n为-1,则将所有的old替换为new
strings.Replace(str, old, new, n) string
- 计数
// 统计字符串s中出现str的次数
strings.Count(s, str string) int
- 重复
// 将字符串s重复count次之后返回
strings.Repeat(s, count int) string
- 大小写转换
// 将指定字符串转换为小写
strings.ToLower(s) string
// 将指定字符串转换为大写
strings.ToUpper(s) string
- trim字符串
// 剔除字符串两边的空格
strings.TrimSpace(s) string
// 剔除字符串两边的指定字符串
strings.Trim(s, str string) string
// 剔除字符串左侧的指定字符串
strings.TrimLeft(s, str string) string
// 剔除字符串右侧的指定字符串
strings.TrimRight(s, str string) string
- 字符串分割
// 按照一个或多个连续的空格将字符串s进行分割,分割之后的子串存入一个slice中
strings.Fields(s) []string
// 按照指定字符串将目标字符串进行分割,分割后的子串存入一个slice中
strings.Split(s, seq string) []string
- 拼接slice到字符串
// 将字符串slice进行拼接,并且连接处使用sep进行填充
strings.Join(s1 []string, sep string) string
- 从字符串中读取内容
// 生成一个可以用于读取字符串str内容的Reader对象
strings.NewReader(str) Reader
- 数字转字符串
// 将整型数字i转换为其字符串表示形式
strconv.Itoa(i int) string
// 将64位浮点型数字转换为字符串,其中fmt表示格式,其值可以是'b'、'e'、'f'、'g',prec表示精度,
// bitSize则使用32表示float32,用64表示float64
strconv.FormatFloat(f float64, fmt byte, prec int, bitSize int) string
- 字符串转数字
// 将字符串s转换为一个整数,转换结果使用i存储,如果转换失败,则将失败信息存储在err中
strconv.Atoi(s string) (i int, err error)
// 将字符串s转换为float64型数字
strconv.ParseFloat(s string, bitSize int) (f float64, err error)
时间
- 当前时间
time.Now()
- 获取时间的一部分
t.Year()
t.Day()
t.Minute()
- Duration类型表示两个连续时刻所相差的纳秒数,类型为int64;Location类型映射某个时区的时间,UTC表示通用协调世界时间;
- 时区格式化
// 需要注意的是,时间的格式化基准一定要以time包中所提供的时间为准,否则格式化的时间可能就不是当前时间了
t.Format(time.ANSIC)
指针
- 指针变量的声明方式如:
var ptr *type - 通过
&可以取得一个变量的地址,通过*ptr使用指针ptr所指向的地址数据 - 需要注意的是,常量的地址不能使用
&获取,因而指针也无法指向常量并修改其值
本文深入探讨Go语言的基础语法,包括类型转换、常量、变量定义,以及字符串和数字的处理方法。此外,还详细介绍了Go语言的高级特性,如位运算、字符串操作和时间处理等。

被折叠的 条评论
为什么被折叠?



