202006-30 go匿名函数 NEW 匿名函数1.1.1. 匿名函数匿名函数是指不需要定义函数名的一种函数实现方式。1958年LISP首先采用匿名函数。在Go里面,函数可以像普通变量一样被传递或使用,Go语言支持随时在代码里定义匿名函数。匿名函数由一个不带函数名的函数声明和函数体组成。匿名函数的优越性在于可以直接使用函数内的变量,不必申明。package mainimport ( "fmt" &nb... Read More >
202006-29 go返回值 NEW 返回值1.1.1. 函数返回值"_"标识符,用来忽略函数的某个返回值Go 的返回值可以被命名,并且就像在函数体开头声明的变量那样使用。返回值的名称应当具有一定的意义,可以作为文档使用。没有参数的 return 语句返回各个返回变量的当前值。这种用法被称作“裸”返回。直接返回语句仅应当用在像下面这样的短函数中。在长的函数中它们会影响代码的可读性。package mainimport ( &... Read More >
202006-28 go函数定义 NEW 函数定义1.1.1. golang函数特点: • 无需声明原型。 • 支持不定 变参。 • 支持多返回值。 • 支持命名返回参数。 • 支持匿名函数和闭包。 &... Read More >
202006-28 go参数 参数1.1.1. 函数参数函数定义时指出,函数定义时有参数,该变量可称为函数的形参。形参就像定义在函数体内的局部变量。但当调用函数,传递过来的变量就是函数的实参,函数可以通过两种方式来传递参数:值传递:指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。func swap(x, y int) int { &... Read More >
202006-27 go循环控制Goto、Break、Continue 循环控制语句循环控制语句可以控制循环体内语句的执行过程。GO 语言支持以下几种循环控制语句:1.1.1. Goto、Break、Continue 1.三个语句都可以配合标签(label)使用 2.标签名区分大小写,定以后若不使用会造成编译错误 3.continue、break配合标签(label)可用于多层循环跳出 &... Read More >
202006-26 go循环语句range Golang range类似迭代器操作,返回 (索引, 值) 或 (键, 值)。for 循环的 range 格式可以对 slice、map、数组、字符串等进行迭代循环。格式如下:for key, value := range oldMap { newMap[key] = value}1st value2nd valuestringindexs[in... Read More >
202006-25 go语言for的三种形式 循环语句for1.1.1. Golang for支持三种循环方式,包括类似 while 的语法。for循环是一个循环控制结构,可以执行指定次数的循环。语法Go语言的For循环有3中形式,只有其中的一种使用分号。 for init; condition; post { } for condition { ... Read More >
202006-24 go条件语句select 条件语句select1.1.1. select 语句select 语句类似于 switch 语句,但是select会随机执行一个可运行的case。如果没有case可运行,它将阻塞,直到有case可运行。select 是Go中的一个控制结构,类似于用于通信的switch语句。每个case必须是一个通信操作,要么是发送要么是接收。 select 随机执行一个可运行的case。如果没有case可运行,它将阻塞,直到有case可运行。一个默认的子句应该总是可运行的。语法Go 编程语... Read More >
202006-23 go语言switch语句用法 条件语句switch1.1.1. switch 语句switch 语句用于基于不同条件执行不同动作,每一个 case 分支都是唯一的,从上直下逐一测试,直到匹配为止。 Golang switch 分支表达式可以是任意类型,不限于常量。可省略 break,默认自动终止。语法Go 编程语言中 switch 语句的语法如下:switch var1 { case val1: &... Read More >
202006-22 go语言if/else语句用法 条件语句if1.1.1. Go 语言条件语句:条件语句需要开发者通过指定一个或多个条件,并通过测试条件是否为 true 来决定是否执行指定语句,并在条件为 false 的情况在执行另外的语句。Go 语言提供了以下几种条件判断语句:1.1.2. if 语句 if 语句 由一个布尔表达式后紧跟一个或多个语句组成。Go 编程语言中 if 语句的语法如下: • 可省略条件表达式括号。 &nb... Read More >
202006-21 go结构体 结构体Go语言中没有“类”的概念,也不支持“类”的继承等面向对象的概念。Go语言中通过结构体的内嵌再配合接口比面向对象具有更高的扩展性和灵活性。1.1. 类型别名和自定义类型1.1.1. 自定义类型在Go语言中有一些基本的数据类型,如string、整型、浮点型、布尔等数据类型,Go语言中可以使用type关键字来定义自定义类型。自定义类型是定义了一个全新的类型。我们可以基于内置的基本类型定义,也可以通过struct定义。例如: //... Read More >
202006-20 go-Map实现原理 Map实现原理本章不属于基础部分但是面试经常会问到建议学学1.1.1. 什么是Mapkey,value存储最通俗的话说Map是一种通过key来获取value的一个数据结构,其底层存储方式为数组,在存储时key不能重复,当key重复时,value进行覆盖,我们通过key进行hash运算(可以简单理解为把key转化为一个整形数字)然后对数组的长度取余,得到key存储在数组的哪个下标位置,最后将key和value组装为一个结构体,放入数组下标处,看下图: &n... Read More >
202006-19 go-Map Mapmap是一种无序的基于key-value的数据结构,Go语言中的map是引用类型,必须初始化才能使用。1.1.1. map定义Go语言中 map的定义语法如下 map[KeyType]ValueType其中, KeyType:表示键的类型。 ValueType:表示键对应的值的类型。map类型的变量默认初始值为nil,需要使用... Read More >
202006-18 go指针 指针区别于C/C++中的指针,Go语言中的指针不能进行偏移和运算,是安全指针。要搞明白Go语言中的指针需要先知道3个概念:指针地址、指针类型和指针取值。1.1. Go语言中的指针Go语言中的函数传参都是值拷贝,当我们想要修改某个变量的时候,我们可以创建一个指向该变量地址的指针变量。传递数据使用指针,而无须拷贝数据。类型指针不能进行偏移和运算。Go语言中的指针操作非常简单,只需要记住两个符号:&(取地址)和*(根据地址取值)。1.1.1. 指针地址和指针类型每个变量在运... Read More >
202006-17 go切片slice底层实现 本章不属于基础部分但是面试经常会问到建议学学切片是 Go 中的一种基本的数据结构,使用这种结构可以用来管理数据集合。切片的设计想法是由动态数组概念而来,为了开发者可以更加方便的使一个数据结构可以自动增加和减少。但是切片本身并不是动态数据或者数组指针。切片常见的操作有 reslice、append、copy。与此同时,切片还具有可索引,可迭代的优秀特性。1.1.1. 切片和数组关于切片和数组怎么选择?接下来好好讨论讨论这个问题。在 Go 中,与 C 数组变量隐式作为指针... Read More >
202006-16 go切片slice 需要说明,slice 并不是数组或数组指针。它通过内部指针和相关属性引用数组片段,以实现变长方案。 1. 切片:切片是数组的一个引用,因此切片是引用类型。但自身是结构体,值拷贝传递。 2. 切片的长度可以改变,因此,切片是一个可变的数组。 3. 切片遍历方式和数组一样,可以用len()求长度。表示可用元... Read More >
202006-16 go数组array Golang Array和以往认知的数组有很大不同。 1. 数组:是同一种数据类型的固定长度的序列。 2. 数组定义:var a [len]int,比如:var a [5]int,数组长度必须是常量,且是类型的组成部分。一旦定义,长度不能变。 3. 长度是数组类型... Read More >
202006-15 go基本类型 基本类型介绍Golang 更明确的数字类型命名,支持 Unicode,支持常用数据结构。类型长度(字节)默认值说明bool1falsebyte10uint8rune40Unicode Code Point, int32int, uint4或8032 或 64 位int8, uint810-128 ~ 127, 0 ~ 255,byte是uint8 的别名int16, uint1620-32768 ~ 32767, 0 ~ 65535int32, uint3240-21亿~ 2... Read More >
202006-14 go变量和常量 变量1.1.1. 变量的来历程序运行过程中的数据都是保存在内存中,我们想要在代码中操作某个数据时就需要去内存上找到这个变量,但是如果我们直接在代码中通过内存地址去操作变量的话,代码的可读性会非常差而且还容易出错,所以我们就利用变量将这个数据的内存地址保存起来,以后直接通过这个变量就能找到内存上对应的数据了。1.1.2. 变量类型变量(Variable)的功能是存储数据。不同的变量保存的数据类型可能会不一样。经过半个多世纪的发展,编程语言已经基本形成了一套固定的类型,常见变量的... Read More >
202006-13 go下划线 “_”是特殊标识符,用来忽略结果。1.1.1. 下划线在import中 在Golang里,import的作用是导入其他package。 import 下划线(如:import hello/imp)的作用:当导入一个包时,该包下的文件里所有init()函数都会被执行,然而,有些时候我们并不需要把整个包都导入进来,仅仅是是希望它执行init()函数而已。这个时候就可以使用 import 引用该包。即使用【import _ 包路径】只是引用该包,仅仅是为了调用in... Read More >