今天是第一天正式学习go语言,感觉go语言有着C/c++一样的代码既视感,也有着像python一样众多的“库”,之前写过一些C/C++代码的上手应该会很快。
本堂课重点内容
个人感觉,本节课的重点应该是Go 语言基础语言详细讲解的部分以及三个go语言的实战项目,对于一门没有接触过的语言来说,将其与之前学过的东西联系起来,力求达到触类旁通的效果,同时用一些有趣的项目对新学的一些知识进行巩固拓展,才是快速而又快乐的学习方式。
详细知识点介绍
由于我此前已经配置好go语言的开发环境,所以此处不再赘述相关的操作
1.变量
变量声明
(go中的变量声明后必须使用)
1.var name string
2.批量声明
var(
name string,
age int,
)
变量的初始化(3种)
(整形和浮点型变量的默认值**0 。字符串变量的默认值为空字符串 "" 。布尔型变量默认为false 。切片,函数,指针变量的默认值为nil**)
go
复制代码
1.var name string = "小明"
var num1,num2 int = 1,2
2.var name = "小明" //类型推导
3.name:="小明" //短变量声明初始化不能用作全局变量
匿名变量
(如果我们接受到多个变量,有一些变量使用不到,可以使用下划线 "_``" 表示变量名称,这种变量叫做匿名变量。)例如
func main{
name,_:=getNameAndAge()
fmt.Printf("name:%v\n",name)
}
func getNameAndAge()(string,int){
return "小明",20
}
2.常量
常量使用const定义声明
1.const PI = 3.14//类型推导
2.const{
PI=3.14,
KR=1
}
3.go的数据类型
注意:
1.string类型和int类型的变量不能用Println去拼接Println只能拼接同类型
2.基本数据类型和数组都是值类型(值传递,改变副本不影响本身的值)
3.引用类型(地址传递,改变副本影响本身的值):切片,map,指针,结构体,接口, channel
- 布尔:bool
- 数字:int int32 int64 float32 float64
- 字符:string(utf-8代码)
- 派生:指针 数组 切片 map 结构体 接口 管道
4.go的语言运算符
基本运算符
+ - * / ++(后自增) --(后自减)
++ -- 在go种只能单独使用
赋值运算符
ini
复制代码
+ += -= * *= / /=
关系运算符
复制代码
== > >= < <= !=
逻辑运算符
css
复制代码
"&&"与 "||"或 "!"非
|| 如果a和b有一个为真,则结果为真,二者都为假,结果为假
&& 如果a和b有一个为假,则结果为假,二者都为真,结果为真
注意:1.单目运算符是只有一个变量的 双目运算符是只有2个变量
2.Println是开发种常用 Printf和Print是调试中常用
5.go语言的if else switch for for range语句
if
1.if 判断条件{
代码块
}
2.if 判断条件{
代码块
}else if 判断条件{
代码块
}else{
代码块
}
3.if flag:=true;判断条件{
//这里的flag只属于这一个if语句里面的 如果上面有一样的flag那么上面的那个不在这个if语句里起作用只有这个if里的起作用
//如果if里和其他地方都有相同的变量 那么if里的变量只在if里起作用 其他地方的变量不在if里起作用 同时这个变量也不影响其他地方的变量
代码块
}else{
代码块
}
for
1.for 初始化变量;判断条件;修正变量{
代码块
}
2.for{代码块}//循环
for range 循环
for rang遍历数组,切片,字符串,map以及通道(channel)。通过for range遍历的返回值有以下规律:
1.数组,切片,字符串返回索引(index)和值(value)
2.map返回键(key)和值(value)
3.通道(channel)只返回通道内的值(value)
//遍历数组
func main(){
var a = [...]int{1, 2, 3}
for i, v := range a {//rang后是要遍历的数组或者切片或者通道
fmt.Printf("索引:%v,值:%v", i, v)//如果不想要索引或者键 可以把i/k 换成_
}
}
//遍历切片
func main(){
var s = []int{1, 2, 3}
for i, v := range s {
fmt.Printf("索引:%v 值:%v", i, v)
}
}
//遍历map
func main(){
m := make(map[string]string, 0)//k的类型 v的类型 map的容量
m["姓名"] = "小明"
m["年龄"] = "20"
m["邮箱"] = "qi1029817@163.com"
for k, v := range m {
fmt.Printf("%v:%v", k, v)
}
}
switch相关
go语言中的switch语句,可以非常容易判断多个值的情况
csharp
复制代码
模板:
switch var{
case val1:
...
case val2:
...
case val3:
...
default:
...
}
switch
func main(){
num := 1
switch num {
case 1:
fmt.Println("是1")
case 2:
fmt.Println("是2")
case 3:
fmt.Println("是3")
default:
fmt.Println("什么都不是")
}
}
同时跟着老师简单实现了一个带有auth的socket5服务器,对于socket5原理的理解更加深刻,这种能够get到新知识的感觉非常nice。
课后个人总结
第一天正式学习go语言,在一些基础的语法和写法的理解方面出现了一些错误,今后还要勤加练习。