Go 入门指南(The way to Go)5.5 Break 与 continue 5.6 标签与 goto 第6章:函数(function) 6.1 介绍 6.2 函数参数与返回值 6.3 传递变长参数 6.4 defer 和追踪 6.5 内置函数 6.6 递归函数 6.7 将函数作为参数 6.8 闭包 6.9 应用闭包:将函数作为返回值 6.10 使用闭包调试 6.11 计算函数执行时间 6.12 通过内存缓存来提升性能 接口与动态类型 11.13 总结:Go 中的面向对象 11.14 结构体、集合和高阶函数 第12章:读写数据 12.1 读取用户的输入 12.2 文件读写 12.3 文件拷贝 12.4 从命令行读取参数 12.5 用 buffer 读取文件 - 4 - 本文档使用 书栈(BookStack.CN) 构建 12.6 用切片读写文件 12.7 用 defer 关闭文件 12.8 使用接口的实际例子:fmt 链接器:将项目代码链接到可执行的二进制文件(机器代码) (相关的 C 编译器名称为 6c、8c 和 5c,相关的汇编器名称为 6a、8a 和 5a) 标记(Flags) 是指可以通过命令行设置可选参数来影响编译器或链接器的构建过程或得到一个特殊的目标结 果。 可用的编译器标记如下: 1. flags: 2. -I 针对包的目录搜索 3. -d 打印声明信息 4. -e 不限制错误打印的个数0 码力 | 466 页 | 4.44 MB | 1 年前3
Go 1.18 中的泛型中的泛型 欧长坤 changkun.de/s/generics118 2022/03/30 1 语法和使用 2 什么时候需要泛型? 3 当使用接口作为函数的形参类型时,函数调用方传递的实际参数可以是完全不同的 类型: type T interface { Add(T) T } func Sum(elems ...T) (sum T) { // T 可以是任何实现 Add() = elems[0] for _, v := range elems[1:] { sum = sum.Add(v) } return } 当使用类型参数作为函数的形参类型时,函数调用方传递的实际参数必须是满足类型参数所约束的类型: func GenericSum[S ~int](elems ...S) (sum S) { // S 的底层类型必须底层类型为 int 约束的类型 使用泛型的根本目的是: 类型安全的参数传递,以及对实现的类型进行抽象 具有类型参数 (Type Parameter) 的签名 4 func F[T C](v T) (T, error) 普通参数列表 返回值列表 类型参数 类型集(约束) type S[T C]struct 类型参数 类型集(约束) 类型参数列表 类型参数的声明紧随:1)函数名之后,或者 2)类型名之后。类型参数通过类型集进行约束。0 码力 | 45 页 | 501.50 KB | 1 年前3
Go 入门指南(The way to Go)链接器:将项目代码链接到可执行的二进制文件(机器代码) (相关的 C 编译器名称为 6c、8c 和 5c,相关的汇编器名称为 6a、8a 和 5a) 标记(Flags) 是指可以通过命令行设置可选参数来影响编译器或链接器的构建过程或得到一个特殊的 目标结果。 可用的编译器标记如下: flags: -I 针对包的目录搜索 -d 打印声明信息 -e 不限制错误打印的个数 -f 打印栈结构 -h 性(操作系统与处理器架 Go入门指南 - 14 - 本文档使用 看云 构建 构)。 为了区分本地机器和目标机器,你可以使用 $GOHOSTOS 和 $GOHOSTARCH 设置目标机器的参数, 这两个变量只有在进行交叉编译的时候才会用到,如果你不进行显示设置,他们的值会和本地机器( $GOOS 和 $GOARCH )一样。 $GOPATH 默认采用和 $GOROOT 一样的值,但从 program.go 会格式化该源文件的代码然后将格式化后的代码覆盖原始内容 (如果不加参数 -w 则只会打印格式化后的结果而不重写文件); gofmt -w *.go 会格式化并重写所有 Go 源文件; gofmt map1 会格式化并重写 map1 目录及其子目录下的所有 Go 源文件。 gofmt 也可以通过在参数 -r 后面加入用双引号括起来的替换规则实现代码的简单重构,规则的格式: <原始内容>0 码力 | 380 页 | 2.97 MB | 1 年前3
Go 2 Generics? A (P)review注意: Go 语言中不允许同名函数 Add(1, 2) // 调用第一个 Add(1.0, 2.0) // 调用第二个 Add("1", "2") // 编译时不检查,运行时找不到实现,崩溃 参数化多态(Parametric Polymorphism)根据实参类型生成不同的版本 ,支持任意数量的 调用。即泛型 func Add(a, b T) T{ return a+b } Add(1, 时,a、b、返回值都可以在运行时表现为不同类型,取决于内部 实现如何对参数进行断言: type T interface { ... } func Max(a, b T) T { ... } // T 是接口 当使用泛型时,a、b、返回值必须为同一类型,类型参数施加了这一强制性保障: func Max(a, b T) T { ... } // T 是类型参数 泛型的总体目标就是:快且安全。在 这里: 快 17 return b 18 } 19 ... 动机 ● Max 是一个看似简单,实则复杂的例子 ● 能否将类型作为参数进行传递? ● 如何对类型参数的行为进行检查? ● 如何支持多个相同 类型的参数? ● 如何支持多个不同 类型的参数? ● …… 2020 © Changkun Ou · Go 夜读 · Go 2 Generics? A (P)review Type0 码力 | 41 页 | 770.62 KB | 1 年前3
Go Web编程get支持多数开源社区(例如: github、googlecode、bitbucket、Launchpad) go get github.com/astaxie/beedb go get -u 参数可以自动更新包,而且当go get的时候会自动获取该包依赖的其他第三方包 通过这个命令可以获取相应的源码,对应的开源平台采用不同的源码控制工具,例如github采用git、googlecode采 格式化功能,这个功能其实 在底层就是调用了go fmt。接下来的一节我将讲述两个工具,这两个工具都自带了保存文件时自动化go fmt功能。 使用go fmt命令,更多时候是用gofmt,而且需要参数-w,否则格式化结果不会写入文件。gofmt -w src,可以格式 化整个项目。 go get go get 这个命令是用来动态获取远程代码包的,目前支持的有BitBucket、GitHub、Google archive/tar 0.011s FAIL archive/zip 0.022s ok compress/gzip 0.033s ... 默认的情况下,不需要任何的参数,它会自动把你源码包下面所有test文件测试完毕,当然你也可以带上参数,详情 请参考go help testflag go doc go doc 很多人说go不需要任何的第三方文档,例如chm手册之类的(其实我已经做了一个了,chm手册),因为它内部就有一0 码力 | 295 页 | 5.91 MB | 1 年前3
Go基础语法宝典指针作为receiver method继承 method重写 interface 什么是interface interface类型 interface值 空interface interface函数参数 interface变量存储的类型 嵌入interface 反射 并发 goroutine channels Buffered Channels Range和Close Select 似,都是 通过 [] 来进行读取或赋值: 由于长度也是数组类型的一部分,因此 [3]int 与 [4]int 是不同的类型,数组也就不能改变长度。数组 之间的赋值是值的赋值,即当把一个数组作为参数传入函数的时候,传入的其实是该数组的副本,而不 是它的指针。如果要使用指针,那么就需要用到后面介绍的 slice 类型了。 数组可以使用另一种 := 来声明 Go支持嵌套数组,即多维数组。比如下面的代码就声明了一个二维数组: 2开始 slice 支持了三个参数的 slice ,之前一直采用这种方式在 slice 或者 array 基础上来获 取一个 slice 这个例子里面slice的容量是8,新版本里面可以指定这个容量 上面这个的容量就是 7-2 ,即5。这样这个产生的新的 slice 就没办法访问最后的三个元素。 如果 slice 是这样的形式 array[:i:j] ,即第一个参数为空,默认值就是0。 map0 码力 | 47 页 | 1020.34 KB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.a第16章:结构体 第17章:值部 - 为了更容易和更深刻地理解Go中的各种值 第18章:数组、切片和映射 - Go中的首要容器类型 第19章:字符串 第20章:函数 - 函数类型和函数值,以及变长参数个数函数 第21章:通道 - Go特色的并发同步方式 第22章:方法 第23章:接口 - 通过包裹不同具体类型的非接口值来实现反射和多态 第24章:类型内嵌 - 不同于继承的类型扩展方式 第25章:非类型安全指针 有什么其它值得一提吗? 本书不涵盖自定义泛型相关内容。 请阅读《Go自定义泛型101》 ? 一书来了 解使用自定义泛型。 另外,在阐述值类型转换、值赋值和值比较规则时,自定义泛型中频繁使用的 类型参数类型被特意忽略掉了。 也就是说,本书不考虑自定义泛型中的情 形。 本书由老貘 ? 历时三年写成。目前本书仍在不断改进和增容中。你的赞赏是 本书和Go101.org网站不断增容和维护的动力。 赞赏 example.com/program(现在已经被废弃而不再推荐被使用了)。 我们可以运行go help aSubCommand来查看一个子命令aSubCommand的帮助信 息。 运行不带参数的go命令将会列出所有支持的go子命令。 《Go语言101》系列文章将不再对各种go子命令做更多的解释。 请阅读官方文 档 ? (墙外版 ? )以获取更多信息。 查看Go代码库文档 我们可0 码力 | 821 页 | 956.82 KB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.a第15章:指针 第16章:结构体 第17章:值部 - 为了更容易和更深刻地理解Go中的各种值 第18章:数组、切片和映射 - Go中的首要容器类型 第19章:字符串 第20章:函数 - 函数类型和函数值,以及变长参数个数函数 第21章:通道 - Go特色的并发同步方式 第22章:方法 第23章:接口 - 通过包裹不同具体类型的非接口值来实现反射和多态 第24章:类型内嵌 - 不同于继承的类型扩展方式 第25章:非类型安全指针 有什么其它值得一提吗? 本书不涵盖自定义泛型相关内容。 请阅读《Go自定义泛型101》 一书来了解 使用自定义泛型。 另外,在阐述值类型转换、值赋值和值比较规则时,自定义泛型中频繁使用的 类型参数类型被特意忽略掉了。 也就是说,本书不考虑自定义泛型中的情形。 本书由老貘 历时三年写成。目前本书仍在不断改进和增容中。你的赞赏是本 书和Go101.org网站不断增容和维护的动力。 (请搜索关注微信公众号“Go -u example.com/program(现在已经被废弃而不再推荐被使用了)。 我们可以运行go help aSubCommand来查看一个子命令aSubCommand的帮助信息。 运行不带参数的go命令将会列出所有支持的go子命令。 《Go语言101》系列文章将不再对各种go子命令做更多的解释。 请阅读官方文 档 (墙外版 )以获取更多信息。 查看Go代码库文档 我们可以使用Go项目文档和代码阅读工具Golds0 码力 | 608 页 | 1.08 MB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.a第16章:结构体 第17章:值部 - 为了更容易和更深刻地理解Go中的各种值 第18章:数组、切片和映射 - Go中的首要容器类型 第19章:字符串 第20章:函数 - 函数类型和函数值,以及变长参数个数函数 第21章:通道 - Go特色的并发同步方式 第22章:方法 第23章:接口 - 通过包裹不同具体类型的非接口值来实现反射和多态 第24章:类型内嵌 - 不同于继承的类型扩展方式 第25章:非类型安全指针 请阅读《Go自定义泛型101》 (https://gfw.go101.org/generics/101.html)一书来了解使用自定义泛型。 另外,在阐述值类型转换、值赋值和值比较规则时,自定义泛型中频繁使用的类型 参数类型被特意忽略掉了。 也就是说,本书不考虑自定义泛型中的情形。 本书由老貘历时三年写成。目前本书仍在不断改进和增容中。你的赞赏是本书和 Go101.org网站不断增容和维护的动力。 赞赏 (请搜索关注微信公众号“Go example.com/program(现在已经被废弃而不再推荐被使用了)。 我们可以运行go help aSubCommand来查看一个子命令aSubCommand的帮助信 息。 运行不带参数的go命令将会列出所有支持的go子命令。 《Go语言101》系列文章将不再对各种go子命令做更多的解释。 请阅读官方文档 (https://golang.google.cn/cmd/go/) (墙外版0 码力 | 591 页 | 21.40 MB | 1 年前3
Golang 入门笔记基本数据类型和 string 的转换 介绍:开发过程中,我们经常需要将基本数据类型转换为 string , 或者讲 string 转换为基本数据类型 基本语法 1. fmt.Sprintf("%参数",表达式), 需要参数和表达式的类型匹配 2. strconv .. 返回转换后的字符串 测试案例 fmt.Sprintf strconv 函数 string 类型转换为基本类型 1. 使用 strconv 语言最少有个 main() 函数。 你可以通过函数来划分不同功能,逻辑上每个函数执行的是指定的任务。 函数声明(函数签名)告诉了编译器函数的名称,返回类型,和参数。 Go 语言标准库提供了多种可动用的内置的函数。例如,len() 函数可以接受不同类型参数并返回该类型的长度。 如果我们传入的是字符串则返回字符串的长度,如果传入的是数组,则返回数组中包含的元素个数。 定义 函数定义如下: fun function_name 函数返回多个值 函数参数 值传递 值传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。 例子 引用传递 引用传递是指在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。 例子 函数用法 函数作为一另外一个函数的实参 定义:函数定义后可作为另外一个函数的实参数传入 例子 闭包0 码力 | 2 页 | 511.29 KB | 1 年前3
共 36 条
- 1
- 2
- 3
- 4













