go语言学习总结

时间:2019-10-28
本文章向大家介绍go语言学习总结,主要包括go语言学习总结使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

go语言学习总结:

1.关键字

break default func interface select
case defer go map struct
chan else goto package switch
const fallthrough if range type
continue for import return var

2.预留标识符

append bool byte cap close complex complex64 complex128 uint16
copy false float32 float64 imag int int8 int16 uint32
int32 int64 iota len make new nil panic uint64
print println real recover string true uint uint8 uintptr

3.派生类型

讲解链接:https://blog.csdn.net/travelerl/article/details/102558666

4.sizeof():

C中的sizeof("String"),返回字符串在内存中的占用空间;

go中的unsafe.sizeof(),{golang中的sring内部实现由两部分组成,一部分是指向字符串起始地址的指针,另一部分是字符串的长度,两部分各是8字节,所以一共16字节}

因为对Go的内存处理机制,所以对于sizeof的使用,暂时先放一放

5.iota:iota 在 const关键字出现时将被重置为 0(const 内部的第一行之前),const 中每新增一行常量声明将使 iota 计数一次(iota 可理解为 const 语句块中的行索引)。

6.go可以自加自减:但是不能    b:=a++

7.go拥有短路逻辑

8.运算符优先级:&a:内存地址(*a:定义指针变量) ;0&^0:异或运算 

优先级运算符
5 * / % << >> & &^
4 + - | ^
3 == != < <= > >=
2 &&
1 ||

9.Go语言select语句:随机的Swtich语句,随机运行case,有可执行case责运行,无则阻塞直到有可执行的case,再运行。

select 会循环检测条件,如果有满足则执行并退出,否则一直循环检测。

10.定义函数,如果输入参数必须指定类型;如果一个输入参数找不到类型,就会往后找:

 对:a,b int,c string ,a,b,c int;错:a,b int,c ;

func function_name( [parameter list] ) [return_types] {
   函数体
}

11.函数使用值传递,修改函数内的输入参数,其main()里无影响;

 如果使用引用传递,那么参数需要传入内存地址,即把”指针“当做一个值来传递。

12.go支持交叉复制:x,y=y,x

13.go不支持三目运算符:go的思想"一种事情有且只有一种方法完成”

14.Go语言闭包函数:

(函数里面套函数)

func getSequence() func() int {
   i:=0
   return func() int {
      i+=1
     return i  
   }
}

15.go语言函数和方法

  对于普通函数:接收者(函数参数)为值类型时,不能将指针类型的数据直接传递,反之亦然。

  func function_name([parameter list]) [return_types] {
  函数体
  }
  对于方法(如struct方法): 接收者为值类型时,可以直接用指针类型的变量调用方法,反之亦然。
  func (variable_name variable_data_type) function_name() [return_type]{
  /* 函数体*/
  }
  Go 语言中同时有函数和方法。一个方法就是一个包含了接受者的函数,接受者可以是命名类型或者结构体类型的一个值或者是一个指针。所有给定类型的方法属于该类型的方法集。

  因为GO语言没有面向对象,所以使用方法?

16.go语言”作用域“

定义的常量、变量、类型、接口、结构、函数等的名称是大写字母开头表示能被其它包访问或调用(相当于public),非大写开头就只能在包内使用(相当于private,变量或常量也可以下划线开头) 

17.针变量通常缩写为 ptr,空指针的值为nil

18.在main()外的函数和方法,无法获得内存地址,因为内存地址动态生成?

我在尝试创建一个数组,并将函数放进数组内;也可能是我调用的方法不对,之后再做尝试。

或者应该尝试用结构体?

19.数组Book,添加了book,修改book的值,Book里的book值不会被修改(append应该是复制内存)

原文地址:https://www.cnblogs.com/ygy1997/p/11752030.html