Go语言学习笔记(1)

开心一刻

       宿舍里有个室友喜欢早起锻炼,锻炼完买一屉小笼包,往桌子上一放,然后刷牙洗脸去了。回来一看,包子没了!他好生气。
       于是第二天买回包子就当着所有人的面儿把包子舔了一遍。刷完牙回来一看,包子还在,但馅儿没了…

变量定义

  1. 函数中可以不使用var,直接使用:=让编译器推导变量类型并定义
  2. 在包中,必须使用var来定义变量并赋值,类型可以不写,不能用:=
  3. 变量定义了以后必须使用,否则就会出现编译错误,这是go语言比较严格的一点
  4. 变量定义多个写在一行的时候,可以初始化不同类型的值,这个时候不需要写变量类型
  5. go语言定义了变量之后都会有默认的初始值,和c语言不同
  6. go语言变量有确定的类型之后,再进行计算的时候不会进行隐式转换,必须强制类型转换才可以。
  7. nil 可以用作 interface、function、pointer、map、slice 和 channel 的“空值”。其他类型均不可以。
  8. 在golang中,常量是无法取出地址的,因为字面量符号并没有地址而言。

分支语句

  1. if分支中判断条件不加括号
  2. if语句可以加上执行语句,然后再写判断条件,执行语句要加分号,这样的话执行语句中定义的变量都只在if语句中起作用
  3. switch case语句中不需要写break,switch可以没有条件,直接在case中判断条件

循环语句

  1. 用于循环语句中的关键字只有for,没有while,因为for完全可以替换while
  2. for中的初始条件、循环条件、递增条件都有的时候就和c语言中的for一样;没有初识条件的时候要有分号;只有循环条件的时候分号也可以不写,三个条件都省的时候是死循环。

函数

  1. 返回值类型写在最后面
  2. 可返回多个值
  3. 函数可以作为参数
  4. 没有默认参数,但有可选参数
  5. go中函数调用有一种表达式调用,这种调用指的是直接使用类型名调用函数,但是此时T类型只能调用T类型的接收者,*T类型能调用T类型的接收者和*T类型的接收者。
package main

type Data struct{}
func (Data) TestValue(){}
func (*Data) TestPointer() {}

func main() {
	var a Data = struct{}{}
	a.TestValue()//这种叫做值调用
	a.TestPointer()//这种叫做值调用,隐式转换成(&a).TestPointer()
	var b = &Data{}
	b.TestValue()//这种叫做值调用,隐式转换成(*b).TestValue()
	b.TestPointer()//这种叫做值调用
	
	Data.TestValue(a)//这种叫做表达式调用
	//Data.TestPointer(a)//这种表达式调用会出错
	(*Data).TestValue(&a)//正确,可以这样调用
	(*Data).TestPointer(&a)//正确,可以这样调用
}
  1. 在函数有多个返回值时,只要有一个返回值有指定命名,其他的也必须有命名。 如果返回值有有多个返回值必须加上括号; 如果只有一个返回值并且有命名也必须加上括号

结构体

  1. 结构体比较规则注意1:只有相同类型(相同类型指自定义类型名称一样)的结构体才可以比较,结构体是否相同不但与属性类型个数有关,还与属性顺序相关.
  2. 结构体比较规则注意2:自定义类型是相同的,但是结构体属性中有不可以比较的类型,如map,slice,则结构体也不能用==比较。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值