记录精彩的程序人生

Day 18 - Go 语言学习 - 函数与闭包

函数与闭包 1.函数式编程 vs 函数指针函数是一等公民:参数,变量,返回值都可以是函数高阶函数(函数的参数可以是函数)函数-> 闭包“正统”函数式编程不可变性:不能有状态,只有常量和函数函数只能有一个参数 go 语言不做上述严格规定 import"fmt"//闭包函数,返回值是一个闭包,返回一个对自身的调用 funcadder()func(int)int{sum:=0returnfunc(vint)int{sum

Day 17 - Go 语言学习 - 接口的组合

接口的组合接口可以通过组合别的接口,来集成别的接口的能力 typeSeekerinterface{Seek(offsetint64,whenceint)(int64,error)}//ReadWriteristheinterfacethatgroupsthebasicReadandWritemethods.typeReadWriterinterface{ReaderWriter}//ReadClose

Day 16 - Go 语言学习 - 接口的值类型

接口的值类型接口变量实现者的类型实现者的指针-> 实现者接口变量自带指针接口变量同样采用值传递,几乎不需要使用接口的指针指针接收者实现智能以指针方式使用;值接收者都可查看接口变量表示任何类型:interface{}TypeAssertion(类型断言)TypeSwitch(case 类型判断)packageutil//支持任何类型 typeQueue[]interface{}func(q*Queue)Pu

Day 15 - Go 语言学习 - 接口的定义

接口的定义 1,使用者---> 实现者,ducktyping 只关注外部功能,而不关注内部实现接口由使用者定义 packagemainimport("fmt""ging/retriever/real")//使用者定义接口 typeRetrieverinterface{Get(urlstring)string}funcdownload(rRetriever)string{returnr.Get("https:/

Day 14 - Go 语言学习 - 接口的应用

接口的应用代码讲解首先定义一个包,Get 方法实现一个相当于 curl 的功能 packageinfraimport("io/ioutil""net/http")typeRetrieverstruct{}func(Retriever)Get(urlstring)string{resp,err:=http.Get(url)iferr!=nil{panic(err)}deferresp.Body.Close()

Day 13 - Go 语言学习 - 指针接收者扩展应用

指针接收者扩展应用指针应用可以直接修改或者扩充对象的值//示例函数包 packageutiltypeQueue[]intfunc(q*Queue)Push(vint){*q=append(*q,v)}func(q*Queue)Pop()int{head:=(*q)[0]*q=(*q)[1:]returnhead}func(q*Queue)IsEmpty()bool{returnlen(*q)==0}/

Day 12 - Go 语言学习 - 包和封装

包和封装名字一般使用驼峰法首字母大写:public 首字母小写:private 包的定义每个目录一个包 main 包包含可执行入口为结构定义的方法必须放在一个包内可以是不同的文件 5.示例代码 packagetreeimport("fmt")//定义结构体 typeNodestruct{ValueintLeft,Right*Node}//打印值 func(tree*Node)Print(){fmt.Println(

Day 11 - Go 语言学习 - 面向对象

面向对象 go 语言仅支持封装,不支持继承和多态 go 语言没有 class,只有 struct 值接收者和指针接收者要改变内容,必须使用指针接收者结构过大也考虑使用指针接收者 packagemainimport("fmt")//定义结构体 typetreeNodestruct{ValueintLeft,Right*treeNode}//打印值 func(tree*treeNode)print(){fmt.Printl

Day 10 - Go 语言学习 - 字符和字符串处理

字符和字符串处理字符串循环 a:="abcdef"s:="see,今天天气真好"//循环,byte 相当于 int8,,一个字符占 1 个字节,拿到字符串中的字符,字符串的底层就是切片 for_,v:=range[]byte(a){fmt.Printf("%c\n",v)}//utf8 的循环,rune 相当于 int32,一个字符占 4 个字节,能够满足 utf8 三个字节的需求 fori,v:=range[]rune(s)

Day 9 - Go 语言学习 - 数组、切片、容器

数组、切片、容器数组的定义和循环 vararr1[5]intarr2:=[3]int{1,3,5}arr3:=[...]int{2,4,6,8,10}//编译器自动识别数组元素个数 vargrid[4][5]int//二维数组 fmt.Println(arr1,arr2,arr3,grid)//数组循环 fori:=0;i<len(arr3);i++{fmt.Println(arr3[i])}//range