Go 入门指南(The way to Go)
String() 方法和格式化描述符 10.8 垃圾回收和 SetFinalizer 第11章:接口(interface)与反射(reflection) 11.1 接口是什么 11.2 接口嵌套接口 11.3 类型断言:如何检测和转换接口变量的类型 11.4 类型判断:type-switch 11.5 测试一个值是否实现了某个接口 11.6 使用方法集与接口 11.7 第一个例子:使用 godoc 来使用(第 3.6 节)。 单行注释是最常见的注释形式,你可以在任何地方使用以 // 开头的单行注释。多行注释也叫块注释,均已以 /* 开头,并以 */ 结尾,且不可以嵌套使用,多行注释一般用于包的文档描述或注释成块的代码片段。 每一个包应该有相关注释,在 package 语句之前的块注释将被默认认为是这个包的文档说明,其中应该提供一些相 关信息并对整体功能做简要 节),例如:0xf840000040(每次的地址都可能不一样)。 值类型的变量的值存储在栈中。 内存地址会根据机器的不同而有所不同,甚至相同的程序在不同的机器上执行后也会有不同的内存地址。因为每台机 器可能有不同的存储器布局,并且位置分配也可能不同。 更复杂的数据通常会需要使用多个字,这些数据一般使用引用类型保存。 一个引用类型的变量 r1 存储的是 r1 的值所在的内存地址(数字),或内存地址中第一个字所在的位置。0 码力 | 466 页 | 4.44 MB | 1 年前3Go 入门指南(The way to Go)
注释不会被编译,但可以通过 godoc 来使用(第 3.6 节)。 单行注释是最常见的注释形式,你可以在任何地方使用以 // 开头的单行注释。多行注释也叫块注释,均 已以 /* 开头,并以 */ 结尾,且不可以嵌套使用,多行注释一般用于包的文档描述或注释成块的代码片 段。 每一个包应该有相关注释,在 package 语句之前的块注释将被默认认为是这个包的文档说明,其中应该提 供一些相关信息并对整体功能做 节),例如:0xf840000040(每次的地址都可能不一 样)。值类型的变量的值存储在栈中。 内存地址会根据机器的不同而有所不同,甚至相同的程序在不同的机器上执行后也会有不同的内存地址。 因为每台机器可能有不同的存储器布局,并且位置分配也可能不同。 更复杂的数据通常会需要使用多个字,这些数据一般使用引用类型保存。 一个引用类型的变量 r1 存储的是 r1 的值所在的内存地址(数字),或内存地址中第一个字所在的位置。 构建 这个内存地址为称之为指针(你可以从上图中很清晰地看到,第 4.9 节将会详细说明),这个指针实际上 也被存在另外的某一个字中。 同一个引用类型的指针指向的多个字可以是在连续的内存地址中(内存布局是连续的),这也是计算效率 最高的一种存储形式;也可以将这些字分散存放在内存中,每个字都指示了下一个字所在的内存地址。 当使用赋值语句 r2 = r1 时,只有引用(地址)被复制。 如果 r10 码力 | 380 页 | 2.97 MB | 1 年前3Golang 101(Go语言101 中文版) v1.21.a
如何使用sync标准库包 第40章:原子操作 - 如何使用sync/atomic标准库包 第41章:Go中的内存顺序保证 第42章:一些常见并发编程错误 内存相关 第43章:内存块 第44章:关于Go值的内存布局 第45章:一些可能的内存泄漏场景 一些总结 第46章:一些简单的总结 第47章:关于Go中的nil 第48章:类型转换、赋值和值比较规则大全 第49章:Go中的一些语法/语义例外 第50章:Go细节101 一个goto语句必须包含一个跳转标签名。 一个break或者continue语句也可以 包含一个跳转标签名,但此跳转标签名是可选的。 包含跳转标签名的break语句一 般用于跳出外层的嵌套可跳出流程控制代码块。 包含跳转标签名的continue语句 一般用于提前结束外层的嵌套循环流程控制代码块的当前循环步。 如果一条break语句中包含一个跳转标签名,则此跳转标签必须刚好声明在一个包 含此break语句的可跳出流程控制代码块之前。 一个结构体类型的尺寸为它的所有字段的(类型)尺寸之和加上一些填充字节的数 目。 常常地,编译器(和运行时)会在一个结构体值的两个相邻字段之间填充一些 字节来保证一些字段的地址总是某个整数的倍数。 我们可以在后面的内存布局(第 44章)一文中了解到字节填充(padding)和内存地址对齐(memory address alignment)。 一个零字段结构体的尺寸为零。 每个结构体字段在它的声明中可以被指定一个标签(tag)。从语法上讲,字段标签0 码力 | 591 页 | 21.40 MB | 1 年前3Golang 101(Go语言101 中文版) v1.21.a
如何使用sync标准库包 第40章:原子操作 - 如何使用sync/atomic标准库包 第41章:Go中的内存顺序保证 第42章:一些常见并发编程错误 内存相关 第43章:内存块 第44章:关于Go值的内存布局 第45章:一些可能的内存泄漏场景 一些总结 第46章:一些简单的总结 第47章:关于Go中的nil 第48章:类型转换、赋值和值比较规则大全 第49章:Go中的一些语法/语义例外 第50章:Go细节101 一个goto语句必须包含一个跳转标签名。 一个break或者continue语句也可以包 含一个跳转标签名,但此跳转标签名是可选的。 包含跳转标签名的break语句 一般用于跳出外层的嵌套可跳出流程控制代码块。 包含跳转标签名的continue 语句一般用于提前结束外层的嵌套循环流程控制代码块的当前循环步。 如果一条break语句中包含一个跳转标签名,则此跳转标签必须刚好声明在一个 包含此break语句的可跳出流程控制代码块之前。 一个结构体类型的尺寸为它的所有字段的(类型)尺寸之和加上一些填充字节 的数目。 常常地,编译器(和运行时)会在一个结构体值的两个相邻字段之间 填充一些字节来保证一些字段的地址总是某个整数的倍数。 我们可以在后面的 内存布局(第44章)一文中了解到字节填充(padding)和内存地址对齐 (memory address alignment)。 一个零字段结构体的尺寸为零。 每个结构体字段在它的声明中可以被指定一个标签(tag)。从语法上讲,字段0 码力 | 608 页 | 1.08 MB | 1 年前3Golang 101(Go语言101 中文版) v1.21.a
如何使用sync标准库包 第40章:原子操作 - 如何使用sync/atomic标准库包 第41章:Go中的内存顺序保证 第42章:一些常见并发编程错误 内存相关 第43章:内存块 第44章:关于Go值的内存布局 第45章:一些可能的内存泄漏场景 一些总结 第46章:一些简单的总结 第47章:关于Go中的nil 第48章:类型转换、赋值和值比较规则大全 第49章:Go中的一些语法/语义例外 第50章:Go细节101 一个goto语句必须包含一个跳转标签名。 一个break或者continue语句也可以 包含一个跳转标签名,但此跳转标签名是可选的。 包含跳转标签名的break语 句一般用于跳出外层的嵌套可跳出流程控制代码块。 包含跳转标签名的 continue语句一般用于提前结束外层的嵌套循环流程控制代码块的当前循环 步。 如果一条break语句中包含一个跳转标签名,则此跳转标签必须刚好声明在一 个包含此break语句的可跳出流程控制代码块之前。 一个结构体类型的尺寸为它的所有字段的(类型)尺寸之和加上一些填充字节 的数目。 常常地,编译器(和运行时)会在一个结构体值的两个相邻字段之 间填充一些字节来保证一些字段的地址总是某个整数的倍数。 我们可以在后 面的内存布局(第44章)一文中了解到字节填充(padding)和内存地址对齐 (memory address alignment)。 一个零字段结构体的尺寸为零。 每个结构体字段在它的声明中可以被指定一个标签(tag)。从语法上讲,字0 码力 | 821 页 | 956.82 KB | 1 年前303. Golang 在隐私计算平台建设中的实践 - 刘敬
有⼤大量量的数据序列列化以及异步转同步 的⽹网络流程代码,算法本身不不应该关 注⽹网络相关逻辑 嵌套调⽤用其他算法复杂 在需要调⽤用其他算法时(OT,SS 等),都需要⼿手动编写⼀一遍类似的流 程,嵌套调⽤用逻辑冗余度⽐比较⾼高 发起⽅方逻辑 参与⽅方逻辑 趣链科技版权所有©2016 – 2021 15 嵌套调⽤用其他算法 同步写法存在问题 算法效率低下 计算逻辑和⽹网络io是串串⾏行行的,不不相关 提⾼高效率 算法逻辑和⽹网络逻辑耦合 有⼤大量量的数据序列列化以及异步转同步 的⽹网络流程代码,算法本身不不应该关 注⽹网络相关逻辑 嵌套调⽤用其他算法复杂 在需要调⽤用其他算法时(OT,SS 等),都需要⼿手动编写⼀一遍类似的流 程,嵌套调⽤用逻辑冗余度⽐比较⾼高 ⼦子算法参与⽅方逻辑 ⼦子算法发起⽅方逻辑 创建⼦子算法任务 发送⼦子算法任务id 等待ack 调⽤用⼦子算法任务 基于元函数出⼊入参类型,算法流程⾃自组 织执⾏行行,框架可介⼊入控制 05.解耦算法流程和⽹网络io ⽆无需再关注⽹网络通信 06.声明式的算法嵌套 ⽆无需关注嵌套算法的调⽤用时机,框架⾃自 动触发调⽤用 本地计算 元函数 嵌套调⽤用其他算法 元函数 接 ⼝口 算法流程 异常处理理 … 流 程 控 制 元函数 异步执⾏行行 元函数⼊入参 ⾃自动注⼊入 数据 异步发送0 码力 | 37 页 | 6.20 MB | 1 年前3Go读书会第二期
团队、 go 社区的优秀项目和代 码,看看他们怎么做的 践行哲学,遵循惯例,认清本质,理解原理 Part2 – 项目基础:布局、代码风格与命名 践行哲学,遵循惯例,认清本质,理解原理 每个 gopher 在开启一个 go 项目时都要考虑的事情 • Go 项目布局 • 代码风格 • 命名惯例 Part3 – 语法基础:声明、类型、语句与控制结构 践行哲学,遵循惯例,认清本质,理解原理0 码力 | 26 页 | 4.55 MB | 1 年前3Go Web编程
为0 c := [...]int{4, 5, 6} // 可以省略长度而采用`...`的方式,Go会自动根据元素个数来计算长度 也许你会说,我想数组里面的值还是数组,能实现吗?当然咯,Go支持嵌套数组,即多维数组。比如下面的代码就声 明了一个二维数组: 46 // 声明了一个二维数组,该数组以两个数组作为元素,其中每个数组中又有4个int类型的元素 doubleArray := [2][4]int{[4]int{1 := 1 for sum < 1000 { sum += sum } 在循环里面有两个关键操作break和continue ,break操作是跳出当前循环,continue是跳过本次循环。当嵌套 过深的时候,break可以配合标签使用,即跳转至标签所指定的位置,详细参考如下例子: for index := 10; index>0; index-- { if index == 5{ JSON对象只支持string作为key,所以要编码一个map,那么必须是map[string]T这种类型(T是Go语言中任意 的类型) Channel, complex和function是不能被编码成JSON的 嵌套的数据是不能编码的,不然会让JSON编码进入死循环 指针在编码的时候会输出指针指向的内容,而空指针会输出null 本小节,我们介绍了如何使用Go语言的json标准包来编解码JSON数据,同时也简要介绍了如何使用第三方包go-0 码力 | 295 页 | 5.91 MB | 1 年前3Hello 算法 1.1.0 Go版
} return res } 总的来说,for 循环的代码更加紧凑,while 循环更加灵活,两者都可以实现迭代结构。选择使用哪一个应该 根据特定问题的需求来决定。 3. 嵌套循环 我们可以在一个循环结构内嵌套另一个循环结构,下面以 for 循环为例: // === File: iteration.go === /* 双层 for 循环 */ func nestedForLoop(n i, j) } } return res } 图 2‑2 是该嵌套循环的流程框图。 第 2 章 复杂度分析 hello‑algo.com 22 图 2‑2 嵌套循环的流程框图 在这种情况下,函数的操作数量与 ?2 成正比,或者说算法运行时间和输入数据大小 ? 成“平方关系”。 我们可以继续添加嵌套循环,每一次嵌套都是一次“升维”,将会使时间复杂度提高至“立方关系”“四次方 关系”,以此类推。 中的常数项。因为它们都与 ? 无关,所以对时间复杂度不产生影响。 2. 省略所有系数。例如,循环 2? 次、5? + 1 次等,都可以简化记为 ? 次,因为 ? 前面的系数对时间复 杂度没有影响。 3. 循环嵌套时使用乘法。总操作数量等于外层循环和内层循环操作数量之积,每一层循环依然可以分别 套用第 1. 点和第 2. 点的技巧。 给定一个函数,我们可以用上述技巧来统计操作数量: func algorithm(n0 码力 | 383 页 | 18.48 MB | 1 年前3Hello 算法 1.0.0 Golang版
} return res } 总的来说,for 循环的代码更加紧凑,while 循环更加灵活,两者都可以实现迭代结构。选择使用哪一个应该 根据特定问题的需求来决定。 3. 嵌套循环 我们可以在一个循环结构内嵌套另一个循环结构,下面以 for 循环为例: // === File: iteration.go === /* 双层 for 循环 */ func nestedForLoop(n i, j) } } return res } 图 2‑2 是该嵌套循环的流程框图。 第 2 章 复杂度分析 hello‑algo.com 22 图 2‑2 嵌套循环的流程框图 在这种情况下,函数的操作数量与 ?2 成正比,或者说算法运行时间和输入数据大小 ? 成“平方关系”。 我们可以继续添加嵌套循环,每一次嵌套都是一次“升维”,将会使时间复杂度提高至“立方关系”“四次方 关系”,以此类推。 中的常数项。因为它们都与 ? 无关,所以对时间复杂度不产生影响。 2. 省略所有系数。例如,循环 2? 次、5? + 1 次等,都可以简化记为 ? 次,因为 ? 前面的系数对时间复 杂度没有影响。 3. 循环嵌套时使用乘法。总操作数量等于外层循环和内层循环操作数量之积,每一层循环依然可以分别 套用第 1. 点和第 2. 点的技巧。 给定一个函数,我们可以用上述技巧来统计操作数量: func algorithm(n0 码力 | 382 页 | 17.60 MB | 1 年前3
共 22 条
- 1
- 2
- 3