Go 入门指南(The way to Go)前言 原文出处:https://github.com/Unknwon/the-way-to-go_ZH_CN 用更少的代码,更短的编译时间,创建运行更快的程序,享受更多 的乐趣 对于学习 Go 编程语言的爱好者来说,这本书无疑是最适合你的一本书籍,这里包含了当前最全面的学习 资源。本书通过对官方的在线文档、名人博客、书籍、相关文章以及演讲的资料收集和整理,并结合我自 身在软件工程、编程语 在 2008 年年中,Go 语言的设计工作接近尾声,一些员工开始以全职工作状态投入到这个项目的编译器 和运行实现上。Ian Lance Taylor 也加入到了开发团队中,并于 2008 年 5 月创建了一个 gcc 前端。 Russ Cox 加入开发团队后着手语言和类库方面的开发,也就是 Go 语言的标准包。在 2009 年 10 月 30 日,Rob Pike 以 Google Techtalk 。所有的源代码文件都是通过包(packages)来组 织。包含可执行代码的包文件在被压缩后使用扩展名 .a (AR 文档)。 Go 语言的标准库(第 9.1 节)包文件在被安装后就是使用这种格式的文件。 注意 当你在创建目录时,文件夹名称永远不应该包含空格,而应该使用下划线 "_" 或者其它一般符号 代替。 2.2 Go 环境变量 Go 开发环境依赖于一些操作系统环境变量,你最好在安装 Go 之间就已经设置好他们。如果你使用的是0 码力 | 380 页 | 2.97 MB | 1 年前3
Go 入门指南(The way to Go)Git 打包和安装 9.10 Go 的外部包和项目 9.11 在 Go 程序中使用外部库 第10章:结构(struct)与方法(method) 10.1 结构体定义 10.2 使用工厂方法创建结构体实例 10.3 使用自定义包中的结构体 10.4 带标签的结构体 10.5 匿名字段和内嵌结构体 10.6 方法 10.7 类型的 String() 方法和格式化描述符 10.8 垃圾回收和 语言中进行程序测试和如何使用模板来开发 Web 应 用这些高级概念和技巧。 在本书的第一部分,我们将会讨论 Go 语言的起源(第 1 章),以及如何安装 Go 语言(第 2 章)和开发环境 前言 用更少的代码,更短的编译时间,创建运行更快的程序,享受更多的乐 趣 前言 - 11 - 本文档使用 书栈(BookStack.CN) 构建 (第 3 章)。 在本书的第二部分,我们将会带领你贯穿 Go 语言的核心思想,譬如简单与复杂类型(第 在 2008 年年中,Go 语言的设计工作接近尾声,一些员工开始以全职工作状态投入到这个项目的编译器和运行实现 上。Ian Lance Taylor 也加入到了开发团队中,并于 2008 年 5 月创建了一个 gcc 前端。 Russ Cox 加入开发团队后着手语言和类库方面的开发,也就是 Go 语言的标准包。在 2009 年 10 月 30 日, Rob Pike 以 Google Techtalk0 码力 | 466 页 | 4.44 MB | 1 年前3
Go Web编程download and install。等到golang那一行后面出现 Downloaded标志后,点OK。 35 然后点 Apply .这时候IDE会要求你重启。 4. 重启完毕后,创建新项目会发现已经可以创建golang项目了: 36 下一步,会要求你输入 go sdk的位置,一般都安装在C:\Go,linux和mac根据自己的安装目录设置,选中目录 确定,就可以了。 links 这一章中我们主要介绍了如何安装Go,Go可以通过三种方式安装:源码安装、标准包安装、第三方工具安装,安装之 后我们需要配置我们的开发环境,然后结束了如何配置本地的$GOPATH,通过设置$GOPATH之后读者就可以创建项 目,接着介绍了如何来进行项目编译、应用安装等问题,这些需要用到很多Go命令,所以接着就介绍了一些Go的常用 命令工具,包括编译、安装、格式化、测试等命令,最后介绍了Go的开发工具,目前有很多Go的开发工具: 地址,即一个*T类型的值。用Go的术语说,它返回了一个指针,指向新分配的类型T的零值。有一点非常重要: new返回指针。 内建函数make(T, args)与new(T)有着不同的功能,make只能创建slice、map和channel,并且返回一个有初 始值(非零)的T类型,而不是*T。本质来讲,导致这三个类型有所不同的原因是指向数据结构的引用在使用前必须被 初始化。例如,一个slice,是一个0 码力 | 295 页 | 5.91 MB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.a成员中包括很多有着数十年编程语言研究领域经验的研究者。 Go有很多特性,有一些是独特的,有一些借鉴于一些其它编程语言: 内置并发编程支持: 使用协程(goroutine)做为基本的计算单元。轻松地创建协程。 使用通道(channel)来实现协程间的同步和通信。 内置了映射(map)和切片(slice)类型。 支持多态(polymorphism)。 使用接口(interface)来实现裝盒(value {,终止于一个右大括 号}。 一个显式代码块中可以包含若干子语句。 函数声明。 一个函数声明中可以包含若干子语句。 流程控制跳转语句。详见下一章。 函数返回(return)语句。 延迟函数调用和协程创建语句。下下篇文章将会介绍。 一些表达式和语句的例子 // 一些非简单语句: import "time" var a = 123 const B = "Go" type Choice bool func 略加修改以使之编译通过。 第一种途径是缩小变量k的作用域: func main() { i := 0 Next: if i >= 5 { goto Exit } // 创建一个显式代码块以缩小k的作用域。 { k := i + i fmt.Println(k) } i++ goto Next Exit: } 第二种途径是放大变量k的作用域:0 码力 | 608 页 | 1.08 MB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.a成员中包括很多有着数十年编程语言研究领域经验的研究者。 Go有很多特性,有一些是独特的,有一些借鉴于一些其它编程语言: 内置并发编程支持: 使用协程(goroutine)做为基本的计算单元。轻松地创建协程。 使用通道(channel)来实现协程间的同步和通信。 内置了映射(map)和切片(slice)类型。 支持多态(polymorphism)。 使用接口(interface)来实现裝盒(value 于一个右大括 号}。 一个显式代码块中可以包含若干子语句。 函数声明。 一个函数声明中可以包含若干子语句。 流程控制跳转语句。详见下一章。 函数返回(return)语句。 延迟函数调用和协程创建语句。下下篇文章将会介绍。 一些表达式和语句的例子 1| // 一些非简单语句: 2| import "time" 3| var a = 123 4| const B = "Go" 5| type 1| func main() { 2| i := 0 3| Next: 4| if i >= 5 { 5| goto Exit 6| } 7| // 创建一个显式代码块以缩小k的作用域。 8| { 9| k := i + i 10 | fmt.Println(k) 11 | } 12 | i++0 码力 | 821 页 | 956.82 KB | 1 年前3
Golang 101(Go语言101 中文版) v1.21.a中包括很多有着数十年编程语言研究领域经验的研究者。 Go有很多特性,有一些是独特的,有一些借鉴于一些其它编程语言: 内置并发编程支持: 使用协程(goroutine)做为基本的计算单元。轻松地创建协程。 使用通道(channel)来实现协程间的同步和通信。 内置了映射(map)和切片(slice)类型。 支持多态(polymorphism)。 使用接口(interface)来实现裝盒(value 一个右大括 号}。 一个显式代码块中可以包含若干子语句。 函数声明。 一个函数声明中可以包含若干子语句。 流程控制跳转语句。详见下一章。 函数返回(return)语句。 延迟函数调用和协程创建语句。下下篇文章将会介绍。 一些表达式和语句的例子 1| // 一些非简单语句: 2| import "time" 第11章:表达式、语句和简单语句 80 3| var a = 123 func main() { 2| i := 0 3| Next: 4| if i >= 5 { 5| goto Exit 6| } 7| // 创建一个显式代码块以缩小k的作用域。 8| { 9| k := i + i 10| fmt.Println(k) 11| } 12| i++0 码力 | 591 页 | 21.40 MB | 1 年前3
如何使用 docker 部署一个 beego 项目Docker 帮助你为应用程序创建一个单独的可部署单元。这个单元,也被称为容器,包含该应用 序需要的所有东西。它包括代码(或者二进制文件)、runtime(运行环境)、系统工具盒系统库。 所有必需的资源打包成一个单元将确保无论应用程序部署到哪里都有完全相同的环境。这也有助于维 一个完全相同的开发和生产配置,这在以前是很难追踪的。
一旦开始,容器的创建和部署将自动完成。它消除了一大类问题。这些问题主要是由于文件没有 Docker 用于开发:
- 创建 Dockerfile
在root目录下mkdir docker_test 在此目录下创建Dockerfile使用
bee命令启动应用程序的在线重新加载- 构建 image
进入创建好的 docker_test 文件夹,运行如下的命令来创建 image(注意后面的
.0 码力 | 5 页 | 269.19 KB | 1 年前3
2.2.3 Go语言的抢占式调度rizin 启动过程 通过 entry point 找到 Go 进程的执⾏⼊⼝ runtime.rt0_go argc argv 处 理 全 局 m0 g0 初 始 化 m0: Go 程序启动后创建的第⼀个线程; 获 取 CPU 核 ⼼ 数 初 始 化 内 置 数 据 结 构 开 始 执 ⾏ ⽤ 户 main 函 数 从这⾥开始 进⼊调度循环 GMP 的本质 第⼆部分 G、M、P ,上下⽂ 包括:当前代码位置,栈顶、栈底地址,状态等。 M:machine,系统线程,执⾏实体,想要在 CPU 上执⾏代码,必须有线 程,与 C 语⾔中的线程相同,通过系统调⽤ clone 来创建。 P:processor,虚拟处理器,M 必须获得 P 才能执⾏代码,否则必须陷⼊休 眠(后台监控线程除外),你也可以将其理解为⼀种 token,有这个 token,才 有在物理 CPU 核⼼上执⾏的权⼒。 037981197237968445&scaling=contain 当前的 Go 语⾔还有 哪些问题 第六部分 线程⽆法销毁 线程在创建后便⽆法⾃动 CGO Slow blocking syscall 峰值请求可能导致创建⼤量的 goroutine 峰值创建的⼤量 goroutine 会在之后消耗 CPU GC ⽆分代,⼤量对象、低频更新的系统中劣势很⼤ GC 需要扫描所有存活对象0 码力 | 44 页 | 7.43 MB | 1 年前3
04. GraphQL in Chaos Mesh 2.0 - 李晨曦功能以对查询结果进行筛选,但它存在命令行交互不友好、复 杂、 难以阅读等问题。 上图为 kubectl 的 json path 使用样例 状态查询的障碍2 对于不可通过 kubernetes API 直接查询的状态,往往要通过创建 pod/exec 子资源,运行自定义命 令来获取。它存在的主要问题是查询客户端所需权限过高。 pod/exec 使用样例:列出 daemon pod 上正在运行的进程。 状态查询的障碍3 之间很难进行关联查询。 人脑关联查询示例: 状态查询的解决方案 首先我们考虑障碍1,要避免查询客户端所需权限过高,最简单的办法就是在一个拥有创建 pod/exec 权限的组件上运行一个 API server 来运行查询命令,而查询客户端仅创建 pod/forward 权限即可与 API server 通信。 Query Client API Server Target Pod chaos daemon。 具体的做法是在 chaos daemon 的安装 namespace(如 chaos-testing)中给 controller manager 创建 pod/exec 的权限,然后创建 chaos daemon pod 上的 exec 命令,调用 nsenter 以在各节点的目标 pod 上运行查询命令。 Target Pod API Server Daemon0 码力 | 30 页 | 1.29 MB | 1 年前3
2.2.1 深入Go Moduleflags] [go.mod] 编辑go.mod文件 go mod graph 打印出module requirement graph go mod init [module] 初始化一个module,创建go.mod go mod tidy [-e] [-v] 修改go.mod和go.sum以匹配实际依赖 go mod vendor [-e] [-v] 增加build&test依赖到vendor文件夹下 • 直接访问私有库 • 实践中 创建一个项目 • 创建go.mod • go mod init: 如果在GOPATH下创建 • go mod init: 如果在GOPATH,但是已经有一个仓库比如github.com/xxx/xxx关联了它 • go mod init path: GOPATH外的裸项目 • go mod tidy 自动创建依赖 • go mod download0 码力 | 46 页 | 3.85 MB | 1 年前3
共 40 条
- 1
- 2
- 3
- 4













