学习一门新语言,难免少不了踩坑,很多坑都是因为上个语言遗留下来的习惯,在这里记录一下
- JetBrains GoLand 编写go语言的时候,不能直接写import,一般写main()的时候会自动导入
- go语言申明的变量必须使用,不然会编译报错
- go语言一行一句,不支持分行,不需要;,如果你想把多行语句并在一行,才需要用;隔开
- {不能单独放一行
- 关于包名和文件名的关系:文件名与包名没有直接关系,不一定要将文件名与包名定成同一个; 文件夹名与包名没有直接关系,并非需要一致;同一个文件夹下的文件只能有一个包名,否则编译报错。
- var c, d *int 是把c和d都声明为指针类型
- 初始化的标准写法:var a int = 100;var a = 100;var a float = 0.01
- const为常量
- 短变量声明:a := 100;b := 0.01 这种写法,a和b都必须是没有定义过的变量,另外标准写法和短变量写法的区别:例如
短变量 标准写法 conn, err := net.Dial("tcp","127.0.0.1:8080")
var conn net.Conn var err error conn, err = net.Dial("tcp", "127.0.0.1:8080")
如果a在外部被定义为全局变量,那么它可以在在局部变量上进行短变量声明,因为内部声明的a将屏蔽外部的声明
- 在多个短变量声明和赋值中,至少有一个新声明的变量出现在左值中,即便其他变量名可能是重复声明的,编译器也不会报错 ,例如a1,b1 = 10,10;a2,b1 = 10,10;b1相同也不会报错
- Golang位运算符的描述
符号 描述 实例 & 按位与运算符"&"是双目运算符。 其功能是参与运算的两数各对应的二进位相与。 (A & B) 结果为 12, 二进制为 0000 1100 | 按位或运算符"|"是双目运算符。 其功能是参与运算的两数各对应的二进位相或 (A | B) 结果为 61, 二进制为 0011 1101 ^ 按位异或运算符"^"是双目运算符。 其功能是参与运算的两数各对应的二进位相异或,当两对应的二进位相异时,结果为1。 (A ^ B) 结果为 49, 二进制为 0011 0001 << 左移运算符"<<"是双目运算符。左移n位就是乘以2的n次方。 其功能把"<<"左边的运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。 A << 2 结果为 240 ,二进制为 1111 0000 >> 右移运算符">>"是双目运算符。右移n位就是除以2的n次方。 其功能是把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数。 A >> 2 结果为 15 ,二进制为 -
fmt.print不能使用%d,%t之类的占位符,会自动换行;fmt.printf可以使用%d之类的
-
在输出指针的时候 指针a会输出地址,*a才输出变量,&a会输出变量的实际地址& 返回变量存储地址 &a; 将给出变量的实际地址。 * 指针变量。 *a; 是一个指针变量 - Printf里面的%占位符一览
%d 按十进制整型数据的实际长度输出。 %ld 输出长整型数据。 %md m 为指定的输出字段的宽度。如果数据的位数小于 m,则左端补以空格,若大于 m,则按实际位数输出。 %u 输出无符号整型(unsigned)。输出无符号整型时也可以用 %d,这时是将无符号转换成有符号数,然后输出。但编程的时候最好不要这么写,因为这样要进行一次转换,使 CPU 多做一次无用功。 %c 用来输出一个字符。 %f 用来输出实数,包括单精度和双精度,以小数形式输出。不指定字段宽度,由系统自动指定,整数部分全部输出,小数部分输出 6 位,超过 6 位的四舍五入。 %.mf 输出实数时小数点后保留 m 位,注意 m 前面有个点。 %o 以八进制整数形式输出,这个就用得很少了,了解一下就行了。 %s 用来输出字符串。用 %s 输出字符串同前面直接输出字符串是一样的。但是此时要先定义字符数组或字符指针存储或指向字符串,这个稍后再讲。 %x(或 %X 或 %#x 或 %#X) 以十六进制形式输出整数,这个很重要。 - os.Args的使用,类似于Java数组格式的Scanner,用于获取命令栏启动go语言时获取的参数
使用方式
package main import ( "fmt" "os" ) func main() { fmt.Println(os.Args) fmt.Println("aaaa") } 命令行启动时输入 go run xxxx.go 1 2 3
- range关键字用于迭代切片,使用方式
// 创建一个整型切片,并赋值 slice := []int{10, 20, 30, 40} // 迭代每一个元素,并显示其值 for index, value := range slice { fmt.Printf("Index: %d Value: %d\n", index, value) }
- 主要申明关键字:var变量,const常量,type类型,func函数
- :=意义为声明 =意义为赋值