注意事项
- Go程序的入口是main()函数
- 每个句子后面不需要添加分毫,语句是一句句进行编译的
- 定义的变量或者import导入的包没用,代码编译就不会通过
- 其注释:
//
或者/* */
块注释中不允许有注释嵌套 - 快捷键
tab键,整体右移;shift+tab整体左移
- API:application program interface,应用程序接口,即各个包函数
go build 源码 ---->生成一个二进制可执行文件
和go run 源码--->直接执行,未编译
- 使用变量的方式
变量 = 变量名 + 值 + 数据类型 a. var 变量名 类型 变量名 = 值 b. var 变量名 = 值 //这里省略数据类型,系统会自动判定数据类型 c. 省略var 如; name := "tom" 等价于 var name string name = "tom"
- 一次声明多个变量,如: n1, name, n3 := 100, “tom”, 88(自动赋类型)
- 定义全局变量
var(
n3 = 300
n4 = 20
name = "may"
)
- 数据类型 尽量使用占用空间小的数据类型(保小不保大原则)
- 如何在程序中查看变量的占用字节大小和数据类型
unsafe.Sizeof(变量名)
- bit: 计算机中的最小存储单位 byte: 计算机中基本存储单元
- 浮点型默认声明float64
- Mac : shift + option + 向下箭头 复制当前行,并在下一行显示
- go中没有设置单个字符类型,存储单个字符,一般用byte。字符串是一串固定长度的字符,连接起来的字符序列,但go中的字符串是由字节组成的
- 格式化输出https://blog.csdn.net/qq_22660775/article/details/89487263
- UTF-8编码 字符本身是整数;英文字母 1个字节;汉字 3个字节
- 字符串存储:字符->对应码值->二进制->存储
字符串读取:二进制->码值->字符->读取 - 字符串一旦被赋值后,字符串就不能修改了
- 字符串的两种表示形式
a. " "双引号:会识别转义字符
b. ` `反引号:以字符串原生形式输出,包括换行和特殊字符 `内容`
- 数据类型的转换
var 变量名 T = T (V) 将V转换成T类型的数据
,这里需要注意⚠️,高低精度之间不能相互转化。在精度进行转换时,数据本身并未发生数据类型变化,而是将存储的数据(即值)发生变化,而V自己本身的数据类型没变化 - 和Java不同的是:go中的数据类型是可以将大小精度数据来回转换,但是Java中只能将低精度传给高精度
- 指针变量中存放的是地址
- 值类型:基本数据类型,变量存的就是值。获取变量的地址,用&
指针类型:指针变量存的是一个地址,这个地址指向的空间存的才是值。获取指针类型所指向的值,用*
var ptr *int = &num 将num的地址存放在ptr指针中,则这个指针指向的地址就是num的地址,这个地址中存放的值是num的值
- 指针的使用细节:
- 下划线
"_"
空标识符,可以代表其他的标识符,但它对应的值会被忽略 不可以作为标识符使用 - %的使用 :
a%b = a - a / b * b
i++和i--
只能作为独立的语句使用,不存在--i、++i
- 涉及到二进制
c << = 2 左移 c = c << 2
c >> = 2 右移 c = c >> 2
c &= 2 按位与 c = c&2
c ^= 2 按位异或 c = c ^ 2
c |= 2 按位或 c = c | 2
^ : 异或符号 左移n位,是乘 2^n 右移n位,是除2^n
- 交换,但不使用中间变量
a = a + b
b = a - b
a = a - b
- go 不支持三目运算, go没有while 和do…while
- 输入语句
fmt.Scanln
和fmt.Scanln
两者之间的区别:前者只能一个一个的输入, 而后者可以识别一串输入 - 负数反码是在原码的基础上,除符号位后各位取反;负数补码在反码的基础上加1。计算机运算时,都是以补码的形式来运算的,最后需要将结果转换为原来的原码
- Golang中的两个移位运算符
右移运算符 >> :低位溢出,符号位不变,并用符号位补溢出的高位
左移运算符 << :符号位不变,低位补0
- Golang支持在if中,直接定义一个变量,如:
if age := 20; age > 18 {}. //这里没有加括号 for也不加括号
同时也需要注意与java的区别:
if n >= 9{
...
}else if n > 6 && n < 9{//这里的n<9不能省略!!!
...
}else{...}
- switch分支控制 匹配项后不需要再加break; switch 穿透 fallthrough 在case语句块后增加fallthrough后,则会继续增加执行下一个case(默认不加的情况下,找到相应的case代码块后执行完即结束)
Type switch: interface() - for 的使用:
a. for int i = 1; i < 10; i++ { ... }
b. for 循环判断条件 { ... }
c. for { ... } 无限循环,需要配合break语句使用
- 字符串的遍历方式: 配合切片使用
只含有字符的: for — range
for index,val := range str{ ... }
(含中文)的字符串: var str string = "hello,北京"
str2 = []rune(str);//就是将str 转为切片 []rune
- break语句出现在多层嵌套的语句块中,可以通过标签指向要终止的那一层语句块
- 跳转控制语句: goto 一般不推荐使用
- 函数的基本语句:
func 函数名 (形参列表)(返回值列表){
...
return 返回值列表
}
如: func Cal(n1 float64, n2 byte) float64 { ... }