Go语言学习第一课——语法基础
1. 一个go程序由以下几部分组成
a. 使用的包名,揭示了这个文件所在的包的名称 package main
b. 引用的库 import “fmt”’
c. 函数func main(){
函数的语句
}
一个helloworld的程序例子
//hellowor.go代码
注意func main(){中的{不可以单独放在一行,否则会报错
程序中的fmt.Println 类似于java中的System.out.println();将括号中的字符串或者变量输出在
控制台并且换行。fmt.Print类似于System.out.print();
如果想为您的代码添加注释,您可以使用//进行单行注释,使用一对/* */进行多行注释
2. 在go程序中,每一行代表着一个语句结束,如果你打算将多个语句写在同一行,它们则必须使用 ; 人为区分,但在实际开发中我们并不鼓励这种做法。
3. 变量的名字不可以用数字开头,不可以用go语言的关键字或者保留字来作为go语言的变量名,变量名中不可以出现运算符
4. 如果要连接字符串,可以通过 + 来进行连接fmt.Println(“Hello+ “ ” + “world!”) 输出结果为Hello world!
5. Go语言可以格式化字符串,与c语言不同的是,go语言的标识符可以在变量中使用
如”String=%s”,使用fmt.Sprintf(注意是Sprintf不是Sprint)或者fmt.Printf来格式化字符串。fmp.Sprintf()用于根据格式化参数生成格式化字符串并且返回参数,Printf根据格式化参数生成格式化字符串并直接输出
//格式化输出代码go1.go
6. golang中定义变量的方法:
var a = “value”
var b,c int= 1,2
var d = true
e := 100
var f float64
g :=float32(f)
7. goalng里面的if-else
if 表达式{
语句
}else if 表达式{
}else{
...
}
8. golang里的for循环
死循环for后面直接大括号不加条件,然后加执行语句
for{
fmt.Println(“死循环”)
}
条件循环for后面空格加for循环条件
for i:=0;i<10;i++ {
Fmt.Println(“hello world”)
}
for循环中可以用continue和break来控制循环的运行
9. golang里面的switch
switch a{//a是一个常量
case 1:
...
case 2:
...
case 3:
...
default:
..
}
switch跑到符合条件的那个语句之后会自己跳出整个switch,不需要break来跳出
10. 数组
用var 名字[长度]数据类型 定义数组
如var a[10]int
然后可以指定位置添加数组的值a[0]=0
其他数组定义方法:b:=[6]int{0,1,2,3,4,5}
var 名字[行数][列数]数据类型 定义二维数组
var c[2][3]int
11. 切片
是动态数组
可以声明一个未指定大小的数组来定义切片
var i []int或者i := []int{1,2,3}
或者用make()来创建切片
Make(数组名字,数组长度,数组容量)
S :=make([]int,3)
S[0]=1
S[1]=2
S[2]=3
可以用len(切片名)返回切片元素个数
可以用append(切片名,值)增加切片元素
在此之后要将它赋值给原数组
即以下:s = append(s,4,5,6,7)//s=就是将更新的结果赋值给原数组 的过程
Append()是更新的过程
可以取出切片中任意一段连续的部分
S[:3]//取0到3位,即1234
S[2:3]//取2-3位,就是34
12. Map
可以用make创建一个空map
m:=make(map[string]int)
M[“one”]=1
M[“two”]=2
Map是储存键值对的map的string是它的键而后面的int是他的值
其他创建map的方法
M2 :=map[string]int{“one”:1,”two”:2}
Var m3=map[string]int
13. Range
一个关键字可以用于简化代码,用于遍历动态数组
会返回两个值,一个是键,另一个是键对应的值
如便历上面的map
For s,n:= range m{
Fmt.Println(s,“:”,n)
}
输出的就是one:1
two:2
不需要键的话可以下划线忽略
14. golang自定义函数
Go语言自定义函数支持返回多个值
事件业务逻辑代码中一般返回两个值,一个是需要返回的值,另一个是错误信息
写法
Func 函数名(参数 参数类型,参数2 参数2类型)(返回值 返回类型,返回值 返回类型){
...
Return a,b
}
Func add(a int ,b int)int{
Return a+b
}
15. 指针
可用于参数的修改,可以在函数中直接修改参数的值而不用借助返回值
Func add2(n *int){
*n+=2
}
这样直接对变量的指针对应的值进行自增
调用时为了类型匹配加个取址符add2(&n)
16. Json处理
如果一个结构体的所有字段都是公开的就可以将他变成一个json字符串
结构体type userinfo struct{
Name string
Age int
}
a:=userinfo{Name :”liang”,Age:20}
buf,err:=json.Marshal(a)//方法返回两个值,buf是json字符串,err是错误信息
If err!=nil{
panic(err)//抛出异常
}
Fmt.Println(buf)
Fmt.Println(string(buf))//没问题正常打印