工厂模式
摘要:背景:当结构体名的首字母为小写时,这时这个结构体只能在本包使用,而不能被其他包使用, 但是在别的包中又希望可以使用这个结构体。由于go语言中没有构造函数,可以使用工厂模式来解决这个问题。 举例:model包中student结构体首字母为小写,main包中需使用student结构体 student.g
阅读全文
posted @
2022-03-03 02:20
smile学子
阅读(28)
推荐(0) 编辑
struct
摘要:1、结构体声明 type 结构体名称 struct{ field type field type } 举例: type Dog struct { Name string Age int Color string } 2、结构体使用 2.1 直接声明 var dog Dog 2.2 {} type D
阅读全文
posted @
2022-03-03 02:13
smile学子
阅读(106)
推荐(0) 编辑
map
摘要:map是key-value数据结构,是一种无序的键值对的集合 1、基本语法 var 变量名 map[keytype]valuetype 注意:slice,map还有function不可以作为key,因为这几个没法用==来判断 var a map[string]string var b map[int
阅读全文
posted @
2022-03-03 01:56
smile学子
阅读(30)
推荐(0) 编辑
切片slice
摘要:1、切片 切片是数组的一个引用,因此切片是引用类型,在进行传递时,遵守引用类型的机制 切片的使用和数组类似,如遍历切片,访问切片的元素和求切片长度len(slice)都一样。 切片的长度是可以变化的,因此切片是一个可以动态变化的数组 2、切片的定义 var 切片名 []类型 比如: var a []
阅读全文
posted @
2022-03-03 01:16
smile学子
阅读(104)
推荐(0) 编辑
数组
摘要:数组可以存放多个同一类型数据,数组也是一种数据类型,在Go中,数组是值类型 1、数组的定义 var 数组名 [数组大小] 数据类型 例子: var a [3]int 数组的地址可以通过数组名来获取,如:&a 数组的第一个元素的地址就是数组的首地址 数组各个元素的地址大小间隔,是依据数组的类型来决定的
阅读全文
posted @
2022-03-03 00:57
smile学子
阅读(87)
推荐(0) 编辑
错误处理机制
摘要:1、Go中引入的处理方式为:defer,panic,recover Go中可以抛出一个panic异常,然后在defer中通过recover捕获这个异常。然后正常处理 func test() { defer func() { if err := recover(); err != nil { // r
阅读全文
posted @
2022-03-03 00:50
smile学子
阅读(12)
推荐(0) 编辑
内置函数
摘要:1、len() func len(v Type) int 函数len返回v的长度 数组:v中元素的数量 数组指针:*v中元素的数量(v为nil时panic) 切片、映射:v中元素的数量;若v为nil,len(v)即为零 字符串:v中字节的数量 通道:通道缓存中队列(未读取)元素的数量;若v为 nil
阅读全文
posted @
2022-03-03 00:23
smile学子
阅读(37)
推荐(0) 编辑
时间和日期
摘要:1、获取当前时间的方法 now := time.Now() // now的类型就是time.Time 2、获取到其他的日期信息 func main() { now := time.Now() // now的类型就是time.Time fmt.Println("当前年:", now.Year()) f
阅读全文
posted @
2022-03-03 00:14
smile学子
阅读(30)
推荐(0) 编辑
字符串函数
摘要:1、统计字符串的长度,按字节len(str) // golang的编码统一为utf-8,(ascli的字符(字母和数字)占一个字节,汉字占三个字节) str := "hello上海" fmt.Println("str len=", len(str)) 输出: str len= 11 2、字符串遍历,
阅读全文
posted @
2022-03-03 00:07
smile学子
阅读(99)
推荐(0) 编辑
defer语句
摘要:1、defer语句 延时机制,在函数中,经常需要创建资源(比如:数据库连接、文件句柄、锁等),为了在函数执行完毕后,及时释放资源,使用defer a. 当执行defer时,暂时不执行,会将defer后面的语句压入到独立的栈 b. 当函数执行完毕后,再从defer栈,按照先入后出的方式出栈,执行
阅读全文
posted @
2022-03-02 23:49
smile学子
阅读(23)
推荐(0) 编辑
闭包
摘要:1、闭包:一个函数和于其相关的引用环境组合的一个整体 func AddUpper() func(int) int { n := 10 return func(x int) int { n = n + x return n } } func main() { f := AddUpper() fmt.P
阅读全文
posted @
2022-03-02 23:44
smile学子
阅读(15)
推荐(0) 编辑
匿名函数
摘要:1、匿名函数 某个函数只希望执行一次,可以考虑使用匿名函数,匿名函数也可以实现多次调用 func main() { res := func(a int, b int) int { return a + b }(10, 20) fmt.Println("res=", res) } 2、将匿名函数赋给一
阅读全文
posted @
2022-03-02 23:37
smile学子
阅读(96)
推荐(0) 编辑
init函数
摘要:1、init函数 init函数会在main函数执行前调用 如果一个文件中同时包含全局变量定义,init函数和main函数,则执行流程是:全局变量定义->init函数->main函数
阅读全文
posted @
2022-03-02 23:31
smile学子
阅读(476)
推荐(0) 编辑
函数
摘要:1、函数语法 func 函数名 (形参列表) (返回值类型列表) { 执行语法... return 返回值列表 } 举例: // 函数返回两个数的最大值 func max(num1 int, num2 int) int { var result int if num1 > num2 { result
阅读全文
posted @
2022-03-02 23:26
smile学子
阅读(22)
推荐(0) 编辑
for循环
摘要:1、第一种,基本语法 for 循环变量初始化;循环条件;循环变量迭代 { 循环体 } 2、第二种,类似于Java的while for 循环条件 { 循环体 } 举例: func main() { i := 0 // 循环变量初始化 for i < 3 { // 循环变量条件 fmt.Println(
阅读全文
posted @
2022-03-02 20:49
smile学子
阅读(60)
推荐(0) 编辑
条件语句
摘要:1、if语句 if 条件表达式 { 执行语句块 } 注意:条件表达式那里允许声明一个变量,这个变量的作用域只在该条件逻辑块内 func main() { if age := 10; age > 9 { fmt.Println("Hello, World!") } } 2、if-else语句 if 条
阅读全文
posted @
2022-03-02 20:33
smile学子
阅读(117)
推荐(0) 编辑
指针
摘要:1、什么是指针 理解:指针 就是 地址 var a int = 10 var p *int = &a 注意:*p的值为10(a和*p指的同一块内存空间) &:获取变量的地址 *:获取指针类型变量所指向的值 空指针:未被初始化的指针,var p *int,这时候*p—>err 2、变量存储 等号左边的
阅读全文
posted @
2022-03-02 19:04
smile学子
阅读(67)
推荐(0) 编辑