基础
- go文件后缀为.go
- package main 表示文件所在的包是main,每个文件都必须属于一个包
- import 引入一个包,其中包含fmt中的各种函数
- func main() main()是主函数,func表示一个函数
- 在码代码时在$gopath\src下开始码
编译与运行
- go build -> 可执行文件->执行
- go run -> 直接运行)(需要编译环境)
写代码注意事项
- Go会在每行末尾自动加分号
- 一行一条语句,多了报错
- Go引入的包必须被使用,不然编译报错
Go语言的转义字符)(escapechar)
- \t一个制表符tab 用于排版
- \n,经典换行符
- \,输出一个""
Go的编程规范
大致与c相同,但有着gofmt -w <filename>这种快速排版命令
也能通过Shift+Tab键集体左移和右移
-
运算符两边尽量加空格
-
Go语言的大括号是需要紧挨函数的
-
一行最长不超过80个字符,超过试着换行
Println("helloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworldhelloworld")
Println("helloworldhelloworldhelloworld",
"helloworldhelloworldhelloworldhelloworldhelloworld")这两行代码是等价的,但第二行可读性更高且更美观
变量的定义和申明
变量的地址可以通过&<变量名>来访问,这点和C一样。
var i <变量类型> //指定变量类型
var i1,i2,i3 <变量类型>//多变量声明
var i1,i2,i3 <变量类型> <i1值>,<i2值>,<i3值>//多变量声明与赋值
var i = <值>//根据值自行判定变量类型(类型推导)
i := <值>//省略var的用法,前面的冒号是为了与赋值语句相区分,这是go的特色,同样用了类型推导,只能用于局部变量的赋值
i1,i2,i3 = <i1值>,<i2值>,<i3值>//
>上述第三种方式等价于``var i <变量类型> <br> i = <值>``
全局变量使用如下方式生成会比较方便和优雅~
var (
i1 = <i1值>
i2 = <i2值>
i3 = <i3值>
)
ps:golang变量的默认值一般为对应变量的null状态,且局部变量也可按照以上方式声明和赋值
若在一个函数体中出现了与全局变量同名的局部变量,局部变量将会被优先考虑
常量
声明:
const i [type] = <value>
const i1,i2,i3 = <i1value>,<i2value>,<i3value> //多常量的声明与赋值
const(
i1 = <value1>
i2 = <value2>
i3 = <value3>
)
//与全局变量的声明类似
特殊常量
##### iota 一种特殊常量,iota第一次被声明时的值为0,自iota第一次声明开始,在const中每增加一行常量声明都会让iota的值加1,可以理解为一个行索引。
const(
a = iota
b
c =3<<iota
)
此时abc的值分别为0 1 12.(有点搞不懂这种方式)
tips: "<<"的意思为该变量的值的二进制最后加两个0
举个栗子
x<<n==x*(2^n)
Go程序中运算符的使用
算术运算符
假设A=10 B=20
| 运算符 | 描述 | 栗子 | 输出 |
|---|---|---|---|
| + | 相加或者字符串链接(依照AB的Value type而定) | A+B | 30 |
| - | 相减 | A-B | -10 |
| * | 相乘 | A*B | 200 |
| / | 相除 | B/A | 2 |
| % | 求余 | A%B | 10 |
| ++ | 本身加1 | A++ | 11 |
| -- | 本身减1 | A-- | 9 |
关系运算符
和c相同不多做描述
位运算符
| 运算符 | 描述 | 功能 |
|---|---|---|
| & | 按位与运算 | 对参与运算的两数各对应的二进制相与 |
| | | 按位或运算 | 对参与运算的两数各对应的二进制相或 |
| 按位异或运算 | 对参与运算的两数各对应的二进制象异或 | |
| << | 左移运算符 | 乘以2的n次方。其功能为把"<<"左边的运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。 |
| >> | 右移运算符 | 除以2的n次方。功能是把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数。 |
以下为在内存中对2进制整数的运算结果
| p | q | p&q | p|q | p^q |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 | 1 |
| 1 | 1 | 1 | 1 | 0 |
| 1 | 0 | 0 | 1 | 1 |
赋值运算符
基础的只有一个等号,把右边的值赋给左边
但还有类似+=、*=等等等,这些都是先执行左边后执行右边的
例如A+=B等价于A=A+B,C/=B等价与C=C/B之类的