Golang 入门学习笔记整理

奔三的柯基豪 · · 1088 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

Go语言:属于云计算时代的C语言,提高生产效率

代码包导入方法:                                     调用方法使用:

import str "strings"                                    str.方法()

import ."strings"                                          方法

import_ "strings"                                        无法调用任何方法

应用程序入口:

1,必须是main 包:package main

2,必须是main方法:func main()

3,文件名不一定是main.go

Test文件规定:

1,文件必须以**_test.go 

2,func  Test*** (t *testing.T){}命名

基本类型:

bool,string  

int  int8 int16 int 32 int64

uint  uint8  uint16 uint32 uint64  uintptr

byte

rune

float32 float 64

complex64  complex128

与其他主要编程语言的差异:

   1,go语言不允许隐式类型转换

    2,别名和原有类型也不能隐士类型转换

    3,不支持指针运算

    4,string 是值类型,不是引用类型,其默认是初始化为空,不是nil 也不是null

运算符:

算术运算符

+,-,*,/,%,++,--

注意:

1,% 取模时,可以等价 A%B = A-A/B*B 

2,/ 时,整数之间是是保留整数,不是四舍五入

3,golang中++ 只能当作独立语句,不能 if i++ >0{}

4,go 语言没有前置的++,--  类似 : ++a

赋值运算符

逻辑运算符:

&&,||,!

关系运算符

==,!=,>,<,>=,<=

位运算符

&^  按位置:若右边为0,则按照左边的值输出,若右边为1则输出0

其他运算符:

&  返回变量存储地址

* 指针变量

运算符优先级:


创建变量:

1,var name  type  :  

2,多个变量声明:


3.name := value / name,age:=value1,value2:


4,声明一个指针变量:

数组的声明  :

    var a[3] int 

   b:=[3]int{1,2,3} |

   c:=[2][2]int{{1,2},{3,4}}

    a:= [...]int{0,1,2,3,4}

数组截取:  a[开始的索引(包含):结束索引(不包含)]

eg: a[:3](a[0:3]) ==  {0,1,2}   a[1:] (a[1:len])=={1,2,3,4}  a[1,3] = ={1,2}

切片Slice 的声明:

是 切片 包括:ptr  len (长度) cap(容量)

1,var s0 []int    s0.append(s0,1)

2,s :=[]int{}

3,s:=[]int{1,2,3}

4,s:=make([]int,2,4)    make(type,长度len,容量cap) 仅能访问len个元素,因为只有len元素被初始化。

append 方法是往切片里添加数据,若cap>len  此时len+1, 但cap 不会改变

若cap==len后 ,cap会乘2 增长


切片截取:

    通过截取后,len是截取的长度,但是cap是从截取位置开始,一直共享存储结构尾部,当修改一个后,会对共享的切片结构影响,改变共享的值

数组VS切片:  容量是可以进行伸缩,没有长度限制,


关键字:

go语言只支持for 循环关键字:

基本for循环:for  i:=1;i<n;i++{}

while条件循环: for  n<5 {} 

while 无限循环  for{}

类似java:foreach 的方法:

1,for index,e:=range 存储容器(数组,map){}

2,for _,e:=range 存储容器 {}  (由于go中没有被引用的参数会被报错,所以使用 “_ ” 替代不被用的参数)

swich 

1,条件表达式不限制常量或者整数

2,单个case  可以出现多个结果选项,使用逗号分隔

3,与C语言规则相反,不需要break

4,可以不设定switch 的条件表达式,类似if else 的逻辑

Map的声明

1,m := map[string]int{"one":1,"two":2}

2, m:=map[string]int{}   m["one"] =1

3,m:=make(map[string]int,10(cap))

注意:

map需要主动取判断 获取到的0值,是否是给定的值,还是默认初始化的值(如果业务上有需要)


Map 与工厂模式

Map 的Value 可以是一个方法:


   Set:

Go的内置集合没有Set实现,可以使用map[type]bool 实现


字符串

1,string是数据类型,不是引用或指针类型

2,string是只读的byte的切片 slice,len函数是指它所包含的byte数

3,string 的byte数组可以存放任何数据


函数:

go的函数是一等公民:

1,可以有多个返回值

    

2,所有参数都是值传递:slice map channel 会有传引用的错觉

3,函数可以作为变量的值

4,函数可以作为参数和返回值


5,可变参数


defer 函数

类似java中的finally  代码最终会被执行。

panic 程序异常中断,之后的代码 不会被执行,但是defer 的代码会被执行


面向对象:

封装:实例创建



两种传值参数,带*指针的对象,指向的是相同的对象,不会进行值复制,消耗内存。

接口:

与其他语言的差异:接口非入侵性,实现不依赖接口定义,接口的定义可以包含在接口使用者包内

自定义类型:

扩展与复用:

1.使用这种指针的标记,调用Pet 内的方法,需要:

2,直接填写Pet 可以直接调用pet 内的方法


多态:

接口对应的只能是指针类型。goProg := & (符号必须存在,代表指针类型)

   


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:奔三的柯基豪

查看原文:Golang 入门学习笔记整理

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1088 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传