go笔记-1

大部分资料来自于这里

关于变量

声明方式

1
2
3
4
5
6
7
var a int = 1
var b, c int = 2, 3
d, e := 4, 5
var (
f = 6
g int = 7
)

关于常量

对于没有设定类型的常量,是没有类型的
比如说const i = 1
可以有var a int = i或者var b int8=i
在需要的地方它才会转化类型,就像是字面常量一样

关于函数

函数可以有多个输出(此时需要用括号括起来),下划线_可用来抛弃一些函数的返回值

1
2
3
4
5
6
7
func f(a,b int)(c,d int){
c=a
d=b
return
}

_,c = f(1,3)

此时c为3

1
2
3
4
5
6
7
8

## 关于包
只有首字母大写的函数和变量才能够在被其他包引用时调用
包内可以声明
```go
func init(){
//do something
}

进行包的初始化,init()函数会在包内变量初始化完毕后执行
一个包可以有多个init(),不管是在同一个文件内还是放在包内的不同文件中
即使被import多次,init()也只会执行一次,

可以在包前面加入下划线,代表我们需要这个包的init(),但是不一定在代码里用上这个包

1
import _ "github.com/go-sql-driver/mysql"

用下划线_赋值包内函数或变量,则可以在开发时暂时禁用未使用包的错误,等真的使用的时候再删除

关于if

else和花括号必须在同一行,除非你用了分号

1
2
3
4
5
if {
//do something
}else{
//do something
}


1
2
3
4
5
6
if {
//do something
};
else{
//do something
}

if内可以塞语句,语句会在条件判断前执行

1
2
3
if x:=10;x>=10{
//do something
}

关于循环

for 内可以只塞条件,类似其他语言的while一样使用
没有条件代表无限循环

1
2
3
4
5
6
7
for x==1 {
//break when x==1
}

for {
//infinite
}

关于switch

switch内可以塞语句,语句会在条件判断前执行
case中会自动在结尾加上break(对于不想自动添加break的,可以在那一段case内末尾加入fallthrough关键字)

1
2
3
4
5
6
7
switch x:=1; x{
case 1,2,3:
//x is 1 or 2 or 3
fallthrough
default:
//do something
}

显式下厨break也不会报错,但是只会跳出switch判断,如

1
2
3
4
5
6
7
x:=1
for{
switch x{
case:1
break
}
}

只会跳出break而不是for,依旧会无限循环下去
要跳出for,可以这样

1
2
3
4
5
6
7
x:=1
myloop: for{
switch x{
case 1:
break myloop
}
}

case条件 不一定 是常量,switch为空的时候,匹配条件为true的

1
2
3
4
5
6
switch {
case x<2:
//x is less than 2
case x<3:
//x is in range [2,3)
}

文章目录
  1. 1. 关于变量
  2. 2. 关于常量
  3. 3. 关于函数
  4. 4. 关于if
  5. 5. 关于循环
  6. 6. 关于switch
|