
Go学习之旅
文章平均质量分 62
一个weber学习Go语言,将学习笔记记录于此,与大家一起学习探讨
2024路在何方
某行业全球top1企业的前端主管
展开
-
Go学习——13.接口
接口1.duck typing描述事物的外部行为而非内部结构严格来说,go属于结构化类型系统,类似duck typing,我们就当做go语言是duck typing2. go语言的接口 使用者 ------------------> 实现者download retriever实现一个download方法,传入retriever实现者,调用download,让传入的retriever去实现下载,然后返回从上面的描述可以看出:接口 由 使用者原创 2021-02-25 16:37:56 · 245 阅读 · 0 评论 -
Go学习——12.GOPATH以及目录结构
GOPATH以及目录结构GOPATH环境变量默认在~/go(unix,linux),%USERPROFILE%\gp(windows)官方推荐:所有项目和第三方库都放在同一个GOPATH下其实也可以将每个项目放在不同的GOPATH下查询GOPATH命令echo $GOPATHgo get获取第三方库go get + 包地址由于很多包在国外,无法下载,所以可以使用gopmgopmgo get -v github.com/gpmgo/gopm来下载go原创 2021-02-24 11:32:25 · 1075 阅读 · 0 评论 -
Go学习——11.包和封装
封装名字一般使用CamelCase首字母大写代表public首字母小写代表private这里的公有和私有是针对包来说的包记住:一个文件夹就是一个包一个包里的所有文件的开头都是一样的package 包名包名一般就是文件名,main函数所在的包除外,当然也可以不一样大写字母开头的元素可以导出到其它包中使用。一个包里的文件之间相互引用导出的属性、变量、函数等,是不需要import的引用别的包导出的内容需要import这个包结构体定义的方法,可以在不同文件,原创 2021-02-23 16:55:50 · 313 阅读 · 0 评论 -
Go学习——10.字符和字符串
字符和字符串处理rune相当于go的charpackage mainimport ( "fmt" "utf8")func main() { s := "Yes我爱慕课网!" fmt.Printf("%s\n", []byte(s)) // 查看s的字符串内容,结果为"Yes我爱慕课网!" fmt.Printf("%X\n", []byte(s)) // 查看s的原始的字节,结果为"596573E68891E788B1E68595E8AFBEE7BD9121" // 打印下每个字符的原始原创 2021-02-22 16:22:49 · 296 阅读 · 0 评论 -
Go学习——9.Map
Map1.Map的定义使用make定义m := make(map[string]string)特别注意:默认值不是nil,是empty map,但是在运算中,nil和empty map是可以互用的 m := make(map[string]string) fmt.Println(m) // map[]非make定义只定义,不赋值(也就是赋默认值)var m map[string]string特别注意:默认值是nil,不是empty map,但是在运算中,nil和e原创 2021-02-22 14:11:28 · 387 阅读 · 0 评论 -
Go学习——9.文件读取
文件读取1. 学习内容把整个文件读进内存使用文件的绝对路径文件路径作为命令行参数传递将文件绑定到二进制文件中一小块一小块地读取文件一行一行地读取文件2.把整个文件读进内存最基本的文件操作就是把整个文件读进内存中。使用ioutil包下的ReadFile函数即可完成package mainimport ( "fmt" "io/ioutil")func main() { data, err := ioutil.ReadFile("./test.txt")原创 2021-02-21 16:54:42 · 655 阅读 · 0 评论 -
Go学习——8.方法
方法在func关键字和方法名之间存在接收者类型的那些函数,我们称之为方法。 ------------------接收者 | --------------接收者类型 | |func (t Type) methodName(parameter list) {}||--------------相当于给接受者t添加了函数methodName,类似于js中的面向对象,给类添加方法,只不过go没有面向对象,所以这么搞||--------------这样原创 2021-02-21 16:54:00 · 344 阅读 · 0 评论 -
Go学习——7.结构体
结构体1.创建结构体命名结构体(声明一个新的类型)定义type Employee struct { firstName, lastName string age, salary int}使用(2种)第一种:属性顺序可以乱emp1 := Employee{ firstName: "Sam", age: 18, salary: 100, lastName: "Anderson"}第二种:属性可以不写,但是值顺序不能乱emp2 := Employee原创 2021-02-21 16:53:26 · 222 阅读 · 0 评论 -
Go学习——6.指针
指针指针也是变量,用于存储变量的内存地址。a b 1560x1040a124 address - 0x1040a124上面的图就说明:b变量的值时156,被存储在内存地址是0x1040a124的位置上。变量a保存着b的地址。我们就说,a指向了b指针声明格式: var a *int = 一个地址值指针变量存放的是地址说明:原创 2021-02-21 16:52:51 · 224 阅读 · 0 评论 -
Go学习——5.package
main函数和main包每一个可执行的go程序都必须包含一个main函数。这个函数是程序运行的入口点。main函数应该驻留于main包里面。package packagename这行代码指定了某个特定的源文件从属于哪个包。它位于每个go文件的第一行。包在Go中,任何以大写字母开头的变量和函数都是被导出的名字。只有被导出的函数和变量才能在其他包中使用。每个包都可以(不必须)包含一个init函数,这个init函数没有任何的返回值类型和参数。init函数不能再代码中被显式调用,但在被引原创 2021-02-21 16:52:15 · 288 阅读 · 0 评论 -
Go学习——4.函数
函数函数返回值有命名,可以使用返回值命名做运算,并且返回时,只需要写一个return即可func rectProps(length, width float64)(area, perimeter float64) { area = length * width perimeter = (length + width) * 2 return //no explicit return value}可变参数函数注意点:形式:func fname(a int, b …原创 2021-02-21 16:51:09 · 253 阅读 · 0 评论 -
Go学习——3.切片slice
切片sliceslice自己并不存储数据,它仅仅是底层数组的一个标识。所以slice的任何修改都会影响到底层的数组slice的创建方式一:var names []string方式二:c := []int{6, 7, 8} //creates and array and returns a slice referencefmt.Println(c)方式三: make(类型, 长度, 容量(可选))i := make([]int, 5, 5)fmt.Println(i)原创 2021-02-21 16:50:30 · 276 阅读 · 0 评论 -
Go学习——2.数组
数组数组的长度是固定的,数组的每个元素的类型都是一样的在快捷方式:=定义一个数组时,不是所有的元素都要指定一个值:a := [3]int{12},这样默认没有值的元素就是0,也就是a为[12, 0, 0]数组的类型是 [数组长度]类型 , 这个整体才是数组的类型Go里面的数组是值类型而非引用类型,这意味着,当他们被赋值给一个新变量的时候,会把原始的数组拷贝给新变量。如果对新变量做出修改,不会影响到原来的数组。a := [...]string{"USA", "China", "India", "原创 2021-02-21 16:50:00 · 224 阅读 · 0 评论 -
Go学习——1.常量
const 定义常量,不能改值const 定义的变量不允许接收函数返回值,因为常量的值时在编译器可知的,函数调用只有再运行时发生。比如const a = math.Sqrt(4),这是不对的。字符串常量,const str = “hello world”,他们都是untyped,没有任何数据类型的。...原创 2021-02-21 16:49:30 · 227 阅读 · 1 评论 -
Go学习——0.type关键字
type关键字type a int 表示形成了一种新的类型叫a,这个类型a完全具备了int的特性如果在main中打印%T,a的类型就是main.atype a = int 表示给int类型取了一个别名叫a,a与int完全等价如果打印%T,a的类型就是int,并且这个a类型只会在代码中存在,编译完成后不会有a类型...原创 2021-02-21 16:48:23 · 399 阅读 · 0 评论 -
3.Go预备知识——高级数据类型(更新中)
数组数组的声明格式:type 变量名称 [数组长度]类型{数组元素}如果没有{数组元素},那么默认值就是零(或者该类型的默认值)数组长度可以用…来表示,这样无需数元素的个数了数组的初始化举例:var MyNumbers = [3]int{1, 2, 3} // MyNumber是数组{1, 2, 3}var MyNumbers = [3]int // MyNumber是数组{0, 0, 0}var MyNumbers = [...]init{1, 2, 3} // MyNum原创 2020-11-23 00:20:09 · 244 阅读 · 0 评论 -
2.Go预备知识——基本数据类型
变量和常量一般变量和常量的声明变量用 var + 变量名称 + 变量类型 , 初始可不赋值常量用 const + 变量名称 + 变量类型 , 初始必须赋值赋值格式: 关键字var/const + 变量名称 + 变量类型 + 赋值号= + 值形式形式一:一般形式var num int = 1;形式二:平行赋值var num1, num2 int = 1, 2;// 平行赋值形式三: 多行赋值var ( num1 int = 1 num2 int = 2原创 2020-11-23 00:18:02 · 294 阅读 · 0 评论 -
1.Go预备知识——基础命令
go run简介用于运行源码文件只能接收一个命令源码文件以及若干个库源码文件作为文件参数其内部操作步骤:先编译源码文件成临时文件,再运行临时文件,产出可执行文件和归档文件常用标记的使用-a: 强制编译相关代码,不论他们的编译结果是否已是最新的-n: 打印编译过程中所需运行的命令,但不真正执行他们-p n:并行编译,其中n为并行的数量,n的值最好是我们计算机的逻辑cpu的个数逻辑cpu:比如我们的计算机有2个cpu,每个cpu都有2个核,那么cpu的逻辑个数是4-v原创 2020-11-23 00:15:30 · 280 阅读 · 0 评论