GoLang
雷司仁
不定期学习,不定期温故,不定期写笔记。
展开
-
GoLang学习笔记(三十七)错误、异常的处理
在C语言中,默认采用一个证书类型的errno来表达错误,这样就可以根据需要定义多种错误类型。在Go语言中,syscall.Errno就是对应C语言中errno类型的错误。在syscall包中的接口,如果有返回错误的话,底层也是syscall.Errno错误类型。通过syscall包的接口来修改文件的模型时,如果遇到错误可以通过将err强制断言为syscall.Errno错误类型来处理。还可...原创 2019-09-13 15:00:21 · 847 阅读 · 0 评论 -
GoLang学习笔记(三十六)接口对象的转型
接口对象转型方式一:instance,ok:=接口对象.(实际类型)如果该接口对象是对应的实际类型,那么instance就是转型之后对象,ok的值为true配合if...else if...使用方式二:接口对象.(type)配合switch...case语句使用type shape interface { perimeter() float64 area() float64...原创 2019-08-24 14:48:02 · 755 阅读 · 0 评论 -
GoLang学习笔记(三十五)接口的多态
事物的多种形态Go中的多态性是在接口的帮助下实现的。定义接口类型,创建实现该接口的结构体对象。定义接口类型的对象,可以保存实现该接口的任何类型的值。Go语言接口变量的这个特性实现了Go语言中的多态性。接口类型的对象,不能访问其实现类中的属性字段。从原始的项目上来看,一个项目例子:type income interface { calculate() float64 //计算收入...原创 2019-08-24 14:43:39 · 245 阅读 · 0 评论 -
GoLang学习笔记(三十四)接口及空接口
面向对象语言中,接口用于定义对象的行为。接口只指定对象应该做什么,实现这种行为的方法是由对象来决定的。在Go语言中,接口是一组方法签名。接口只指定了类型应该具备有的方法,类型决定了如何实现这些方法。当某个类型为了接口中的所有方法提供了具体的实现细节时,这个类型就被称为实现了该接口。接口定义了一组方法,如果某个对象实现了该接口的所有方法,则此对象就实现了该接口。Go语言的类型都是隐式实现接...原创 2019-08-24 14:36:07 · 375 阅读 · 0 评论 -
GoLang学习笔记(三十三)结构体中的方法及方法的继承和重写
Go语言同时有函数和方法,方法的本质是函数,但是方法和函数又具有不同点。函数function是一段具有独立功能的代码,可以被重复多次调用,从而实现代码复用方法method是一个类的行为功能,只有该类的对象才能调用。Go语言的方法method是一种作用于特定类型变量的函数。这种特定类型的函数叫做Receiver(接收者、接收者、接收器)接收者的概念类似于传动面向对象语言中的this或者sel...原创 2019-08-23 16:18:41 · 2118 阅读 · 0 评论 -
GoLang学习笔记(三十二)结构体嵌套聚合关系和结构体嵌套继承关系
将一个结构体作为另一个结构体的属性,这种结构体就是结构体嵌套。结构体嵌套可以模拟面向对象中的两种关系:聚合关系,一个类作为另一个类的属性继承关系,一个类作为另一个类的子类结构体嵌套聚合关系:type work struct { typeOfWork string}type person struct { name string age int ...原创 2019-08-23 16:12:27 · 3302 阅读 · 0 评论 -
GoLang学习笔记(二十五)map的声明、赋值、遍历、删除键值对
map是Go语言中的内置类型,它将一个值与一个键关联起来,可以使用相应的检索。有翻译成地图、映射或字典(python),更多的翻译为集合(java)map是一种无序的键值对(key-value pair)的集合,map通过key来快速检索数据,key类似于索引,指向乡音的value值。map是一种集合,可以向遍历数组和切片一样去遍历它,不过map是无序的,所以无法决定它展示的顺序,这是因为m...原创 2019-04-01 10:24:18 · 1927 阅读 · 0 评论 -
GoLang学习笔记(二十四)strconv包内常用函数
一、字符串解析类1、ParseInt函数func ParseInt(s string, base int, bitSize int) (i int64, err error)返回字符串表示的整数值,接受正负号。base指定进制(2到36),如果base为0,则会从字符串前置判断,"0x"是16进制,"0"是8进制,否则是10进制;bitSize指定结果必须能无溢出赋值的整数类型,0、8...原创 2019-04-01 10:14:54 · 505 阅读 · 0 评论 -
GoLang各种库(转)
原文出处:https://www.jianshu.com/p/6a147fc00721golang用于创建和发送电子邮件的库douceur - HTML 邮件中的内联 CSSemail - 一个健壮的、灵活的 email 库Go-dkim - DKIM 库,用于对 email 进行签名和验证Go-imap - IMAP 库,用于客户端和服务器Go-message - 用于触雷...转载 2019-03-11 13:07:45 · 4636 阅读 · 0 评论 -
GoLang学习笔记 :字符串的遍历
字符串可以理解成特殊的slice(切片)切片是引用类型,字符串是值类型。func stringRange1() { str := "天天向上,Day Day Up!" //for...range遍历字符串,获取后,下标i显示,每个中文字占三个下标 for i, ch := range str { fmt.Printf("%d : %c \n", i, ch) } fmt.P...原创 2019-03-07 10:13:02 · 811 阅读 · 0 评论 -
GoLang学习笔记(二十六)list的声明、遍历及常用方法
list是列表,一种非连续存储的容器,由多个节点组成,节点通过一些变量记录彼此之间的关系。list有多种实现方法,如单向链表、双向链表等。Go语言中的list的实现原理是双向链表,list能高效地进行任意位置的元素插入和删除操作。Golang的标准库提供了高级的数据结构List,具体在包container/list。container/list包里主要有两个数据结构类型:“Element”、...原创 2019-08-21 14:57:53 · 13451 阅读 · 3 评论 -
GoLang学习笔记(二十七)time包的常用函数及方法
time包提供了时间的显示和测量用的函数,日历计算采用的是公历。为了等下的代码能更好的理解,先写一个print函数func printTime(i string, t time.Time) { fmt.Println(i, t)}time包的函数及方法:基础用法:t1 := time.Now()printTime("当前时间:", t1)printTime("将时间...原创 2019-08-21 15:29:55 · 793 阅读 · 0 评论 -
GoLang学习笔记:随机数游戏
结合先前的学习笔记,制作一个小的游戏。1、输入一个最小值(整数)2、输入一个最大值(整数)3、自动产生一个区间内的随机数4、输入一个你猜想的数字,给出三种答案:大了、对了、小了。5、如果没猜对,则继续猜,直到猜对为止。func randGamePlay() { rand.Seed(time.Now().UnixNano()) var min, max int fmt...原创 2019-08-23 15:45:42 · 180 阅读 · 0 评论 -
Golang学习笔记:函数的defer
在函数中,经常需要创建资源,比如数据库连接、文件句柄、锁等,为了在函数执行完后,及时的释放资源,Go的设计者提供defer关键字,当执行到defer时,不会执行该行语句,将defer压入到独立的defer栈中,当函数执行完毕后,再从的defer栈中,按照先入后出的方式出栈,执行。func main() { defer fmt.Println("00001") defer fmt.Prin...原创 2019-09-12 15:44:51 · 188 阅读 · 0 评论 -
Golang学习笔记:init函数
每一个源文件都可以包函一个init函数,该函数会再main函数执行前被Go运行框架调用,也就是说init会在main函数前被调用。如果一个文件同时包函全局变量定义,init函数和main函数,则执行的流程为:全局变量定义---->init函数---->main函数 init函数最主要的作用,就是完成一些初始化的工作。用一个例子来说明一下:func init() { fm...原创 2019-09-12 14:37:18 · 243 阅读 · 0 评论 -
Golang学习笔记:递归函数
接前面java写的递归例子,还是计算一个数递减相乘。func test01(n int) int { result := 0 if n <= 1 { return 1 } else { result = test01(n-1) * n return result }}执行一个函数时,就创建一个新的受保护的独立控件(新的函数栈)函数的局部变量时独立的,不会相...原创 2019-09-12 11:29:13 · 285 阅读 · 0 评论 -
Golang学习笔记:包
貌似再函数前,忘记写下包的内容了,现在补充一下。go的每一个文件都是属于一个包的,也就是说go是通过包的形式来管理文件和项目目录结构的。包的作用:区分相同名字的函数、变量等标识符。 当程序文件很多时,可以很好的管理项目。 控制函数、变量等访问范围,即作用域。包的打包基本语法:package 包名一般情况下,包名对应的是一个文件夹,与文件夹名相同,也可以不同,没有硬性要求...原创 2019-09-12 10:18:12 · 177 阅读 · 0 评论 -
GoLang学习笔记:常用转义字符
\t 制表符fmt.Print("hello\tworld")//hello world\n 换行符fmt.Print("hello\nworld")//hello //world\r 回车符fmt.Print("yoni是帅哥\rnike")//nike是帅哥\\ 表示一个斜杠fmt.Print("hello\\tworld")//hello...原创 2019-09-04 15:18:51 · 827 阅读 · 0 评论 -
GoLang学习笔记(三十)键盘输入
Scan函数func Scan(a ...interface{}) (n int, err error)Scan从标准输入扫描文本,将成功读取的空白分隔的值保存进成功传递给本函数的参数。换行视为空白。返回成功扫描的条目个数和遇到的任何错误。如果读取的条目比提供的参数少,会返回一个错误报告原因。func testScan() { name1 := "" age1 := 0 fm...原创 2019-08-23 12:16:42 · 578 阅读 · 0 评论 -
GoLang学习笔记(二十九)rand包生成随机数
math/rand包实现了伪随机数生成器。随机数从资源生成。包水平的函数都使用的默认的公共资源。该资源会在程序每次运行时都产生确定的序列。如果需要每次运行产生不同的序列,应使用Seed函数进行初始化。默认资源可以安全的用于多go程并发。随机数需要通过随机数种子获取随机数。默认情况下随机数的种子都是1,所以如果直接调用默认随机数种子,出现的随机数都是一样的一般常用时间搓来生成动态种...原创 2019-08-23 12:14:49 · 1767 阅读 · 0 评论 -
GoLang学习笔记(二十八)math包的常用函数
math包提供了基本的数学常数和数学函数。常数如下: E = 2.71828182845904523536028747135266249775724709369995957496696763 // A001113 Pi = 3.14159265358979323846264338327950288419716939937510582097494459 // A000796...原创 2019-08-23 12:10:00 · 1755 阅读 · 0 评论 -
GoLang学习笔记(三十一)结构体及匿名结构体、匿名字段
结构体数组可以存储同一类的数据,但在结构体中,我们可以为不同项定义不同的数据类型。结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。结构体的定义格式:type 类型名 struct { 成员属性1 类型1 成员属性2 类型2 成员属性3 成员属性4 类型3 ...}类型名,表示结构体的名称,在同一个包内不能重复。结构体中的属性,也叫字段必须...原创 2019-08-23 16:00:39 · 1453 阅读 · 0 评论 -
GoLang学习笔记 :冒泡排序
func bubbleSort(arr []int) { lastExchangeIndex := 0 sortBorder := len(arr) - 1 for i := 0; i < len(arr); i++ { isSorted := true for j := 0; j < sortBorder; j++ { if arr[j] > arr[j+...原创 2019-03-07 10:11:09 · 145 阅读 · 0 评论 -
GoLang学习笔记(二十三)strings包内函数
一、检索字符串:1、Contains函数:func Contains(s, substr string) boolsubstr 是否在 s 之内。func testContains() { fmt.Println(strings.Contains("seafood", "foo")) //true fmt.Println(strings.Contains("seafood"...原创 2019-03-07 10:07:42 · 875 阅读 · 0 评论 -
Golang学习笔记(十)函数申明及变量作用域
标准函数格式:func 函数名 (参数列表) (返回值列表)func funcName (parametername1 type1,parametername2 type2...) (output1 type1,output2 type2...)1、可以使用可变参数:func funcName(arg ...int)表示接受不定数量的int类型参数。2、Golang的参数列表,如果相邻的两个...原创 2018-11-07 09:53:55 · 446 阅读 · 0 评论 -
Golang学习笔记(九)for循环语句
Golang的for相较于java,并不需要使用()括起来,基础for循环格式为for 变量赋值;循环控制条件;变量增量或减量。第一种基础形式,在for中申明变量,这种变量仅仅作用与该循环。for i := 0; i < 10; i++ { fmt.Printf("%d ", i)}第二种基础形式,在for循环前申明变量,该变量作用于该函数内。该变量可以不写在for关键字后...原创 2018-11-02 14:24:34 · 27997 阅读 · 0 评论 -
Golang学习笔记(八)switch分支语句
Golang的switch可以不用在每个case里写一个break,Golang会自动加入。default关键字可以带,也可以不带,不是必须要有的。首先是一个最基础的示例,在switch后面带一个变量。func ScoreGrade1() { gradel := "B" switch gradel { case "A": fmt.Println("优秀") case "B...原创 2018-11-01 15:49:47 · 587 阅读 · 0 评论 -
Golang学习笔记(七)if判断语句
golang的判断语句,不再需要用()来括起条件,但{必须跟if在一行。和java一样,也有else关键字。基础例子,判断奇偶数,给出一个值30,让程序来判断。func EvenOdd(){ num := 30 if num % 2 == 0 { fmt.Println(num,"这是个偶数") } else { fmt.Println(num,"这是个奇数") }}...原创 2018-11-01 15:35:34 · 1031 阅读 · 0 评论 -
Golang学习笔记(六)运算符及源码、反码、补码
实在是没有什么好写的,写几个函数来体现几个运算符。新建一个go file,添加三个变量var a = 21.0var b = 5.0var c float64建一个函数来体现算术运算符func Arithmetic() { c = a + b fmt.Printf("第1行 - c 的值为 %f\n", c) c = a - b fmt.Printf("第2行 - ...原创 2018-11-01 15:28:06 · 370 阅读 · 0 评论 -
Golang学习笔记(三)打印格式化
通用打印格式化:str1 := "yoni"fmt.Printf("%T,%v \n", str1, str1)var a rune = '一'fmt.Printf("%T,%v \n", a, a)p := point{1,2}fmt.Printf("%T,%v \n",p,p)布尔值格式化:fmt.Printf("%T,%t \n",true,true)整数型格式...原创 2018-10-30 11:39:04 · 1057 阅读 · 0 评论 -
Golang学习笔记(二)数据类型
Go的数据类型与Java等语言的数据类型几乎一致//byte其实就是uint8的别名var aaa byte = 100// rune其实就是int32的别名var bbb rune = 200//可以给一个字符,计算ascll码var ddd byte = 'a'var ccc rune = '我'特殊的byte、rune已经在上面的例子中展示。2019年9月18日补...原创 2018-10-30 11:12:29 · 178 阅读 · 0 评论 -
Golang学习笔记(一)变量申明
第一种:指定变量类型,声明后若不赋值,使用默认值。var aaa intaaa = 10第二种:根据值自行判定变量类型。var aaa = "string"第三种:用代码块批量生成变量。var ( a int b string c float32 d bool e []int f [3]string)第四种:在函数中使用简短申明变量,仅能在函数中使用...原创 2018-10-30 10:59:45 · 204 阅读 · 0 评论 -
Golang学习笔记(五)常量及iota
Golang语言申明常量,需要用到一个关键字const。const STR1 string = "hello"大家习惯性的将常量设置为全大写,但在Golang里面是没有private、public等权限设置的,这些权限仅靠方法、函数、变量等的首字母大小写来设置,所以如果全大写,将会是一个public的常量。建议大家可以将私有的常量前面加个小写的c,就是const关键字的首字母,如下:...原创 2018-10-31 21:31:23 · 278 阅读 · 0 评论 -
Golang学习笔记(十一)函数变量,将函数作为值使用
Golang中,函数也可以作为一个变量来使用。写一个普通函数来让一段字符串,实现大小写交替显示:func processCase1(str string) string { result := "" for i, value := range str { if i%2 == 0 { result += strings.ToUpper(string(value)) } el...原创 2018-11-07 10:41:45 · 3282 阅读 · 0 评论 -
GoLang学习笔记(十二)匿名函数及回调用法
Go语言支持匿名函数,即在需要使用函数时,再定义函数。匿名函数没有函数名,只有函数体,函数可以被作为一种类型被赋值给变量,匿名函数也往往以变量的方式被传递。匿名函数经常被用于实现回调函数、闭包等。定义格式:func(参数列表)(返回参数列表){ //函数体}方式一,在定义时调用匿名函数func anonymousFunc1() { func(data int) { ...原创 2018-11-16 14:01:40 · 1783 阅读 · 0 评论 -
GoLang学习笔记(十三)闭包的定义及用法
其实匿名函数就是闭包写一个不使用闭包的实现的计数器func add1() { val := 0 for i := 0; i < 10; i++ { fmt.Printf("i=%d \t", i) val += add2(i) fmt.Println(val) } fmt.Println("总和为:", val)}func add2(x int) int ...原创 2018-11-16 16:16:57 · 299 阅读 · 0 评论 -
GoLang学习笔记(二十二)切片的append()和copy()
首先新建一个切片:var numbers []int然后通过append()函数来为numbers添加一个元素0:numbers = append(numbers, 0)也可以通过append()函数来为numbers添加多个元素:numbers = append(numbers, 1, 2, 3, 4, 5, 6, 7)还可以为numbers做切片的合并:s1...原创 2019-03-06 18:42:08 · 3857 阅读 · 0 评论 -
GoLang学习笔记(二十一)切片的长度和容量
切片的长度是切片中元素的数量切片的容量是从创建切片的索引开始的底层数组中元素的数量切片是可索引的,并且可以由len()方法获取长度,切片提供了计算容量的方法cap(),可以测量切片最长可以达到多少。切片实际的是获取数组的某一部分,len切片<=cap切片<=len数组cap()的结果决定了切片截取的注意细节var sTest01 []intfunc sliceTest0...原创 2019-01-29 09:42:48 · 5332 阅读 · 2 评论 -
GoLang学习笔记(二十)切片的声明及遍历
Go语言的切片是对数组的抽象。Go中的数组的长度不可以改变,Go中就提供了一个灵活、功能强悍的内置类型切片:动态数组。与数组相比切片的长度是不固定的,可以追加元素。切片本身没有任何数据,他们只是对现有数组的引用。切片与数组相比,不需要设定长度,在[]中不用设置值。从概念上来说,切片slice像一个结构体,这个结构体包含了三个元素:1、指针,只想数组中slice指定的开始位置2、长度,...原创 2019-01-29 09:28:41 · 3776 阅读 · 0 评论 -
GoLang学习笔记(十九)数组的声明及遍历
要了解数组,必须先了解一下Go的数据类型的另一种分类(上一种是非引用数据类型和引用数据类型,可以参考上一篇文章)1、基本数据类型:整形、浮点、不二、字符串、字符2、复合数据类型:函数与指针、数组、切片、map、list、结构体、通道数组:素组元素可以通过索引下标来读取或者修改元素数据,索引从0开始以此类推。素组初始化以后,大小不能更改。声明数组的语法格式:var 变量名 [数组长...原创 2019-01-15 19:21:21 · 13373 阅读 · 0 评论