Go语言中文网 为您找到相关结果 41

Go 系列教程 —— 3. 变量

这是我们 Golang 系列教程的第 3 个教程,探讨 Golang 里的变量(Variables)。 你可以阅读 Golang 系列 [**教程第 2 部分:Hello World**](/articles/11755),学习如何配置 Golang,并运行 Hello World 程序。 ### 变量是什么 变量指定了某存储单元(Memory Location)的名称,该存储单元会存储特定类型的值。在 Go 中,有多种语法用于声明变量。 ### 声明单个变量 **var name type** 是声明单个变量的语法。 ```go package main import "fmt" func main() { var age int // 变量声明 fmt.Println("my age i...阅读全文

博文 2017-11-28 17:01:18 heyulong

xorm - 课时 1:常见用法指导

注意事项 本博客隶属于 xorm - 课时 1:常见用法指导 请注意配套使用。 本博文为 xorm - Go 语言 ORM 的配套博客,旨在通过文字结合代码示例对该库的使用方法和案例进行讲解,便于各位同学更好地使用和深入了解。 库简介 xorm 是一款针对 Go 语言的 ORM 第三方库,特点是提供简单但丰富实用的 API 来完成对数据库的各类操作。该库支持包括 MySQL、PostgreSQL、SQLite3 和 MsSQL 在内的主流数据库,其在支持链式操作的基础上,还允许结合 SQL 语句进行混合处理。另外,支持 session 事务和回滚以及乐观锁也是使得该库逐渐流行的原因之一。 下载安装 您可以通过以下两种方式下载安装 xorm: gopm get github.com/go-xo...阅读全文

博文 2014-10-17 16:51:59 无闻

go语言循环语句 for

Go语言中的循环语句只支持for关键字,而不支持while和do-while结构。 sum := 0 for i := 0; i < 10; i++ { sum += i } 无限循环的写法: sum := 0 for { sum++ if sum > 100 { break } } 条件表达式中也支持多重赋值: a := []int{1, 2, 3, 4, 5, 6} for i, j := 0, len(a) – 1; i < j; i, j = i + 1, j – 1 { a[i], a[j] = a[j], a[i] } 使用break,选择中断哪一个循环: for j := 0; j < 5; j++ { for i := 0; i < 10; i++ { if i > 5 { ...阅读全文

博文 2015-07-29 03:00:01 osfipin

golang测试TCP最大连接数

受限于本地端口数的分配,我想看看本地能起到多少个TCP client连接 本测试用例client和server都部署在同一台linux虚拟机上 查看进程打开的描述符数:102400(10万) [root@bogon ~]# ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 15042 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited o...阅读全文

博文 2015-10-27 13:00:03 webyh

[翻译] go build 命令是如何工作的?

之前 Dave Cheney 已经为我们讲解过了 Go 是如何用 go 编译自己的。这里,他继续给大家讲解一下 go build 命令是如何工作的(原文)。 ————翻译分隔线———— go build 命令是如何工作的? 本文以 Go 的标准库为例,介绍了 Go 编译过程的工作原理。 gc 工具链 本文将关注 gc 工具链。gc 工具链的名字来自 Go 的前端编译器 cmd/gc,这主要是为了与 gccgo 工具链进行区分。当人们讨论 Go 编译器的时候,多半是指 gc 工具链。本文不关注 gccgo 工具链。 gc 工具链是直接从 Plan 9 的工具链剥离出来的。该工具链由一个 Go 编译器、一个 C 编译器、一个汇编器和一个链接器组成。可以在 Go 代码的 src/cmd/ 子目录找...阅读全文

博文 2014-10-09 16:20:10 mikespook

Golang中的接口与鸭子类型

1 接口的定义与理解 接口是一个自定义类型,它是一组方法的集合。从定义上来看,接口有两个特点。第一,接口本质是一种自定义类型,因此不要将golang中的接口简单理解为C++/Java中的接口,后者仅用于声明方法签名。第二,接口是一种特殊的自定义类型,其中没有数据成员,只有方法(也可以为空)。 接口是完全抽象的,因此不能将其实例化。然而,可以创建一个其类型为接口的变量,它可以被赋值为任何满足该接口类型的实际类型的值。接口的重要特性是: (1)只要某个类型实现了接口要的方法,那么我们就说该类型实现了此接口。该类型的值可以赋给该接口的变量; (2)作为1的推论,任何类型的值都可以赋值给空接口interface{} 注意:这只是golang中接口的特性,为非所有类型的特性(接口是一种特殊的类型)。 ...阅读全文

博文 2017-02-09 17:25:40 说话的白菜

go的变量、常量、类型别名

go语言的基本类型如下: 类型变量 实例代码: package main import "fmt" /*所有变量都可使用类型推断 全局变量必须使用var可以var(),可并行,可推断 局部变量不可使用var(),只可并行,可推断 */ func main() { //bool布尔型--先声明后赋值 var a bool fmt.Println(a) a = true fmt.Println(a) //int8/uint8--声明并赋值 var b int8 = -128 var b1 uint8 = 255 fmt.Println(b) fmt.Println(b1) //byte(uint8别名)类型--系统推测类型方式 var c1 = 255 var c2 byte = 255 fmt...阅读全文

博文 2016-08-24 10:00:03 u013210620

C++中的友元函数和友元类的使用方法

在c++编程中,我们常常接触到类的概念,众所周知,一般类中有公用的(public)成员和私有的(private)成员,公用成员可以通过外部访问,私有成员只有奔雷中的函数才可以访问。今天小编将给大家介绍一个不遵循此规则的类,那就是友元(friend)。 C++中的友元是好友的意思,可以访问与其有好友关系的类中的私有成员,友元包括友元函数和友元类,下面我们就一起来看看他们的用法吧。 友元函数 在当前类以外定义的、不属于当前类的函数也可以在类中声明,但要在前面加 friend 关键字,这样就构成了友元函数。友元函数可以是不属于任何类的非成员函数,也可以是其他类的成员函数。友元函数可以访问当前类中的所有成员,包括 private 属性的。 1、 将普通函...阅读全文

go语言示例(总目录)

本帖子内容都是翻译自此网站https://gobyexample.com/(翻译水平有限,请多见谅),内容如下: go语言示例 go语言是一个开源的语言。专为简单,迅速的编译可靠的软件而设计。 本例具有操作介绍和注释,你可以直接看第一个例子或者通过下面的列表 Hello World Values Variables Constants For If/Else Switch Arrays Slices Maps Range Functions Multiple Return Values Variadic Functions Closures Recursion Pointers Structs Methods Interfaces Errors Goroutines Channels Cha...阅读全文

博文 2015-06-17 23:01:41 xming4321

Go文件上传下载

Go自带很多包,本例使用io包和net包相应的API简单实现基于http的文件上传下载(仅为demo) 定义文件存储文件 //假设文件上传为本地的服务器,上传的基础路径 const BaseUploadPath = "/var/file" main函数中监听http服务 func main() { http.HandleFunc("/upload", handleUpload) http.HandleFunc("/download", handleDownload) err := http.ListenAndServe(":3000", nil) if err != nil { log.Fatal("Server run fail") } } 文件上传处理器 func handleUploa...阅读全文

博文 2019-08-04 08:02:38 愚辛

go的变量、常量、类型别名

go语言的基本类型如下: 类型变量 实例代码: package main import "fmt" /*所有变量都可使用类型推断 全局变量必须使用var可以var(),可并行,可推断 局部变量不可使用var(),只可并行,可推断 */ func main() { //bool布尔型--先声明后赋值 var a bool fmt.Println(a) a = true fmt.Println(a) //int8/uint8--声明并赋值 var b int8 = -128 var b1 uint8 = 255 fmt.Println(b) fmt.Println(b1) //byte(uint8别名)类型--系统推测类型方式 var c1 = 255 var c2 byte = 255 fmt...阅读全文

博文 2016-08-24 09:00:01 u013210620

拜拜了,GOPATH君!新版本Golang的包管理入门教程

Go 1.11和1.12实现了对包管理的初步支持,Go的新依赖管理系统使依赖版本信息明确且易于管理。Using Go Modules - The Go Blog 新的包管理模式有什么不同? 作为Go语言的推广者,常常被问到各种关于Go语言的基础特性问题。其中,关于包管理方面的问题会让我非常尴尬,因为Go的包管理在1.11之前与Python、Node、Java比较起来真的只能算是“仅仅可用”而已。 因为: 在不使用额外的工具的情况下,Go的依赖包需要手工下载, 第三方包没有版本的概念,如果第三方包的作者做了不兼容升级,会让开发者很难受 协作开发时,需要统一各个开发成员本地$GOPATH/src下的依赖包 引用的包引用了已经转移的包,而作者没改的话,需要自己修改引用。 第三方包和自己的包的源码都...阅读全文

博文 2019-03-28 18:34:39 ZetaChow晓代码

go语言编译记录

$ 6g mypak.go #先编译自定义包,生成mypak.6 $ 6g test.go # 然后编译,生成test.6 $ 6l -o go_test test.6 # 链接生成新文件名 go_test $ go_test hello, world 如在程序中有自定义包(如本例test.go中引用了mypak包),则需要使用 import("./mypak"),其中 ./ 告诉编译器(compiler)使用我们自己的package,而不是在默认的package路径中找,而且编译时,需要先编译mypak.go,然后再编译test.go,要注意顺...阅读全文

博文 2014-10-04 19:26:16 zdrqq

Go语言源码中的Rabin-Karp算法

strings.go包实现了一个Rabin-Karp算法.有点意思. 关于这个算法: 图灵社区有一篇: 图说Rabin-Karp字符串查找算法 关于Go源码实现: 网友GoLove已写一个篇非常详细的说明了. http://www.cnblogs.com/golove/p/3234673.html GoLove那个已经分析的非常清楚了,只是前面那一串说明太长了.我把他的说明替换成代码形式. 直接跑起来,这样更能看得清楚些. package main import ( "fmt" "unicode/utf8" ) func main(){ count := Count("9876520210520","520") fmt.Println("count==",count) } // primeR...阅读全文

博文 2015-06-17 20:12:40 xcltapestry

go mod有了它,再也不用担心运行缺少类库了

参考链接:https://blog.csdn.net/weixin_39003229/article/details/97638573 什么是go.mod? Go.mod是Golang1.11版本新引入的官方包管理工具用于解决之前没有地方记录依赖包具体版本的问题,方便依赖包的管理。 Go.mod其实就是一个Modules,关于Modules的官方定义为: Modules是相关Go包的集合,是源代码交换和版本控制的单元。go命令直接支持使用Modules,包括记录和解析对其他模块的依赖性。Modules替换旧的基于GOPATH的方法,来指定使用哪些源文件。 Modules和传统的GOPATH不同,不需要包含例如src,bin这样的子目录,一个源代码目录甚至是空目录都可以作为Modules,只要...阅读全文

Go-goroutines

要点: - goroutines是Go实行并发程序的一种方式 - 语法是:go function_name() - 在执行go function_name()之后,程序马上进入go的下一条语句,而不会等待go的这个函数执行完成 - go和Linux的system调用比较类似 示例 本系列所有素材都源于Introducing Go,本例也不例外。——有些小改动。 功能: - foo():打印1..max整数序列 - main()会启动3个go foo() - 为了区分每个goroutine,特地在foo的打印中增加了id - 可以确定是否在控制台输入字符串(或回车)以模拟wait或sleep - 如果不wait,那么程序可能在退出时并不会输出所有的foo打印串 可以输入注释中的几种情况,观察输...阅读全文

博文 2016-09-22 07:00:01 u013344915

go的变量、常量、类型别名

go语言的基本类型如下: 类型变量 实例代码: package main import "fmt" /*所有变量都可使用类型推断 全局变量必须使用var可以var(),可并行,可推断 局部变量不可使用var(),只可并行,可推断 */ func main() { //bool布尔型--先声明后赋值 var a bool fmt.Println(a) a = true fmt.Println(a) //int8/uint8--声明并赋值 var b int8 = -128 var b1 uint8 = 255 fmt.Println(b) fmt.Println(b1) //byte(uint8别名)类型--系统推测类型方式 var c1 = 255 var c2 byte = 255 fmt...阅读全文

博文 2016-08-30 13:00:03 u013210620

Go语言Select的理解

package main import "time" import "fmt" func main() { // 本例中,我们从两个通道中选择 c1 := make(chan string) c2 := make(chan string) // 为了模拟并行协程的阻塞操作,我们让每个通道在一段时间后再写入一个值 go func() { time.Sleep(time.Second * 1) c1 <- "one" }() go func() { time.Sleep(time.Second * 2) c2 <- "two" }() // 我们使用select来等待这两个通道的值,然后输出 select { case msg1 := <-c1: fmt.Println("received", ...阅读全文

博文 2016-10-11 08:00:03 tree2013

go的变量、常量、类型别名

go语言的基本类型如下: 类型变量 实例代码: package main import "fmt" /*所有变量都可使用类型推断 全局变量必须使用var可以var(),可并行,可推断 局部变量不可使用var(),只可并行,可推断 */ func main() { //bool布尔型--先声明后赋值 var a bool fmt.Println(a) a = true fmt.Println(a) //int8/uint8--声明并赋值 var b int8 = -128 var b1 uint8 = 255 fmt.Println(b) fmt.Println(b1) //byte(uint8别名)类型--系统推测类型方式 var c1 = 255 var c2 byte = 255 fmt...阅读全文

博文 2016-10-04 12:00:02 u013210620

Golang学习笔记-1.2 Hello World

**本文系第二篇Golang语言学习教程** #创建Workspace 在上一章节设置好环境变量后,个人习惯创建一个go的用户用来进行Golang的学习。 ```bash # useradd go # su - go ``` **在编写代码之前,我们首先应该建立 Go 的工作区(Workspace)。** 在 Mac 或 Linux 操作系统下 - Go 工作区应该设置在 $HOME/go。所以我们要在 **/home/go/**目录下创建 **go** 目录。 - 所有 Go 源文件都应该放置在Workspace里的 **src** 目录下。所有在新建的go目录下创建src目录用于存放源文件。 - 所有 Go 项目都应该依次在 src 里面设置自己的子目录。所以在 src 里面创建一个目录...阅读全文

博文 2018-07-06 10:18:01 xunk1900

go 变量的定义

3. 变量 变量是什么 变量指定了某存储单元(Memory Location)的名称,该存储单元会存储特定类型的值。在 Go 中,有多种语法用于声明变量。 声明单个变量 var name type 是声明单个变量的语法。 package main import "fmt" func main() { var age int // 变量声明 fmt.Println("my age is", age) } 语句 var age int 声明了一个 int 类型的变量,名字为 age。我们还没有给该变量赋值。如果变量未被赋值,Go 会自动地将其初始化,赋值该变量类型的零值(Zero Value)。本例中 age 就被赋值为 0。如果你运行该程序,你会看到如下输出: my age is 0 变量可以...阅读全文

博文 2019-04-03 18:35:08 听砜

Go-goroutines

要点: - goroutines是Go实行并发程序的一种方式 - 语法是:go function_name() - 在执行go function_name()之后,程序马上进入go的下一条语句,而不会等待go的这个函数执行完成 - go和Linux的system调用比较类似 示例 本系列所有素材都源于Introducing Go,本例也不例外。——有些小改动。 功能: - foo():打印1..max整数序列 - main()会启动3个go foo() - 为了区分每个goroutine,特地在foo的打印中增加了id - 可以确定是否在控制台输入字符串(或回车)以模拟wait或sleep - 如果不wait,那么程序可能在退出时并不会输出所有的foo打印串 可以输入注释中的几种情况,观察输...阅读全文

博文 2016-09-01 20:00:02 u013344915

拜拜了,GOPATH君!新版本Golang的包管理入门教程

Go 1.11和1.12实现了对包管理的初步支持,Go的新依赖管理系统使依赖版本信息明确且易于管理。 Using Go Modules - The Go Blog Golang 新的包管理模式有什么不同? 作为Go语言的推广者,常常被问到各种关于Go语言的基础特性问题。 其中,关于包管理方面的问题会让我非常尴尬,因为Go的包管理在1.11之前与Python、Node、Java比较起来真的只能算是“仅仅可用”而已。 因为: 在不使用额外的工具的情况下,Go的依赖包需要手工下载, 第三方包没有版本的概念,如果第三方包的作者做了不兼容升级,会让开发者很难受 协作开发时,需要统一各个开发成员本地$GOPATH/src下的依赖包 引用的包引用了已经转移的包,而作者没改的话,需要自己修改引用。 第三方包...阅读全文

博文 2019-03-28 21:34:41 ZetaChow晓代码

Go文件上传下载

Go自带很多包,本例使用io包和net包相应的API简单实现基于http的文件上传下载(仅为demo) 定义文件存储文件 //假设文件上传为本地的服务器,上传的基础路径 const BaseUploadPath = "/var/file" 复制代码main函数中监听http服务 func main() { http.HandleFunc("/upload", handleUpload) http.HandleFunc("/download", handleDownload) err := http.ListenAndServe(":3000", nil) if err != nil { log.Fatal("Server run fail") } } 复制代码文件上传处理器 func han...阅读全文

博文 2019-08-05 10:34:23 愚辛

Go垃圾回收之三色标记算法

自公众号“灰子学技术”,原文链接:https://mp.weixin.qq.com/s/SFJoSSbvv3KyYKz4osUnFw三色标记法介绍:三色标记法(tricolor mark-and-sweep algorithm)是传统 Mark-Sweep 的一个改进,它是一个并发的 GC 算法,在Golang中被用作垃圾回收的算法,但是也会有一个缺陷,可能程序中的垃圾产生的速度会大于垃圾收集的速度,这样会导致程序中的垃圾越来越多无法被收集掉。原理如下所示:step 1: 创建:白、灰、黑 三个集合。step 2: 将所有对象放入白色集合中。step 3: 从根节点开始遍历所有对象,把遍历到的对象从白色集合放入灰色集合(备注:这里放入灰色集合的都是根节点的对象)。step 4: 遍历灰色集合...阅读全文

博文 2020-01-30 16:23:08 ZhDavis

Go-goroutines

要点: - goroutines是Go实行并发程序的一种方式 - 语法是:go function_name() - 在执行go function_name()之后,程序马上进入go的下一条语句,而不会等待go的这个函数执行完成 - go和Linux的system调用比较类似 示例 本系列所有素材都源于Introducing Go,本例也不例外。——有些小改动。 功能: - foo():打印1..max整数序列 - main()会启动3个go foo() - 为了区分每个goroutine,特地在foo的打印中增加了id - 可以确定是否在控制台输入字符串(或回车)以模拟wait或sleep - 如果不wait,那么程序可能在退出时并不会输出所有的foo打印串 可以输入注释中的几种情况,观察输...阅读全文

博文 2016-09-05 20:00:01 u013344915

golang40行代码实现通用协程池

代码仓库 goroutine-pool golang的协程管理 golang协程机制很方便的解决了并发编程的问题,但是协程并不是没有开销的,所以也需要适当限制一下数量。 不使用协程池的代码(示例代码使用chan实现,代码略啰嗦) func (p *converter) upload(bytes [][]byte) ([]string, error) { ch := make(chan struct{}, 4) wg := &sync.WaitGroup{} wg.Add(len(bytes)) ret := make([]string, len(bytes)) // 上传 for index, item := range bytes { ch <- struct{}{} go func(in...阅读全文

博文 2018-08-08 11:34:49 xialeistudio

Go-goroutines

要点: - goroutines是Go实行并发程序的一种方式 - 语法是:go function_name() - 在执行go function_name()之后,程序马上进入go的下一条语句,而不会等待go的这个函数执行完成 - go和Linux的system调用比较类似 示例 本系列所有素材都源于Introducing Go,本例也不例外。——有些小改动。 功能: - foo():打印1..max整数序列 - main()会启动3个go foo() - 为了区分每个goroutine,特地在foo的打印中增加了id - 可以确定是否在控制台输入字符串(或回车)以模拟wait或sleep - 如果不wait,那么程序可能在退出时并不会输出所有的foo打印串 可以输入注释中的几种情况,观察输...阅读全文

博文 2016-09-05 10:00:02 u013344915

设计模式-06-组合模式

组合模式 概述 树形结构在项目中很经常会碰到,当树形结构变得越来越大之后会难以管理。组合模式允许你将对象组合成树形结构来表现“整体/部分”的层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。树里面包含了组合以及个别的对象。 实现 本例中,用组合模式来实现导航栏。可以有多级导航栏和二级导航栏。 总结与分析 使用组合模式,可以将相同的操作应用在组合和个别的对象上,换句话说,在大多数情况下,我们可以忽略对象组合和个别对象之间的差别。 代码实现: 组合模式(php/go...阅读全文

博文 2019-04-11 10:34:43 疯狂的卡卡

Go-goroutines

要点: - goroutines是Go实行并发程序的一种方式 - 语法是:go function_name() - 在执行go function_name()之后,程序马上进入go的下一条语句,而不会等待go的这个函数执行完成 - go和Linux的system调用比较类似 示例 本系列所有素材都源于Introducing Go,本例也不例外。——有些小改动。 功能: - foo():打印1..max整数序列 - main()会启动3个go foo() - 为了区分每个goroutine,特地在foo的打印中增加了id - 可以确定是否在控制台输入字符串(或回车)以模拟wait或sleep - 如果不wait,那么程序可能在退出时并不会输出所有的foo打印串 可以输入注释中的几种情况,观察输...阅读全文

博文 2016-09-06 10:00:04 u013344915

拜拜了,GOPATH君!新版本Golang的包管理入门教程

Go 1.11和1.12实现了对包管理的初步支持,Go的新依赖管理系统使依赖版本信息明确且易于管理。 [Using Go Modules - The Go Blog](https://blog.golang.org/using-go-modules) ![Golang](https://user-gold-cdn.xitu.io/2019/3/28/169c3840bf4cf2d9?w=1240&h=335&f=png&s=683764) ## 新的包管理模式有什么不同? 作为Go语言的推广者,常常被问到各种关于Go语言的基础特性问题。 其中,关于包管理方面的问题会让我**非常尴尬**,因为Go的包管理在1.11之前与Python、Node、Java比较起来真的只能算是“**仅仅可用**”而...阅读全文

博文 2019-04-24 14:36:05 ZetaChow

Go基础学习记录 - 编写Web应用程序 - 错误处理

错误处理 前面的分享加了两个功能,一个是编辑功能,一个保存功能 在我们的程序中有几个地方其实是忽略了错误的处理。这是不好的做法,尤其是因为这样的做法发生错误时,程序会出现意外行为。更好的解决方案是处理错误并向用户返回错误消息。这样,如果出现问题,服务器将完全按照我们想要的方式运行,并且可以通知用户。首先,让我们处理renderTemplate中的错误: func renderTemplate(w http.ResponseWriter, templateName string, p *Page) { t, err := template.ParseFiles("template/" + templateName + ".html") if err != nil { http.Error(w,...阅读全文

博文 2018-08-09 23:34:50 DurbanZhang

Go-goroutines

要点: - goroutines是Go实行并发程序的一种方式 - 语法是:go function_name() - 在执行go function_name()之后,程序马上进入go的下一条语句,而不会等待go的这个函数执行完成 - go和Linux的system调用比较类似 示例 本系列所有素材都源于Introducing Go,本例也不例外。——有些小改动。 功能: - foo():打印1..max整数序列 - main()会启动3个go foo() - 为了区分每个goroutine,特地在foo的打印中增加了id - 可以确定是否在控制台输入字符串(或回车)以模拟wait或sleep - 如果不wait,那么程序可能在退出时并不会输出所有的foo打印串 可以输入注释中的几种情况,观察输...阅读全文

博文 2016-09-06 12:00:01 u013344915

Go垃圾回收之三色标记算法

自公众号“灰子学技术”,原文链接:https://mp.weixin.qq.com/s/SFJoSSbvv3KyYKz4osUnFw三色标记法介绍:三色标记法(tricolor mark-and-sweep algorithm)是传统 Mark-Sweep 的一个改进,它是一个并发的 GC 算法,在Golang中被用作垃圾回收的算法,但是也会有一个缺陷,可能程序中的垃圾产生的速度会大于垃圾收集的速度,这样会导致程序中的垃圾越来越多无法被收集掉。原理如下所示:step 1: 创建:白、灰、黑 三个集合。step 2: 将所有对象放入白色集合中。step 3: 从根节点开始遍历所有对象,把遍历到的对象从白色集合放入灰色集合(备注:这里放入灰色集合的都是根节点的对象)。step 4: 遍历灰色集合...阅读全文

博文 2020-01-30 21:32:44 灰常出色

Go-goroutines

要点: - goroutines是Go实行并发程序的一种方式 - 语法是:go function_name() - 在执行go function_name()之后,程序马上进入go的下一条语句,而不会等待go的这个函数执行完成 - go和Linux的system调用比较类似 示例 本系列所有素材都源于Introducing Go,本例也不例外。——有些小改动。 功能: - foo():打印1..max整数序列 - main()会启动3个go foo() - 为了区分每个goroutine,特地在foo的打印中增加了id - 可以确定是否在控制台输入字符串(或回车)以模拟wait或sleep - 如果不wait,那么程序可能在退出时并不会输出所有的foo打印串 可以输入注释中的几种情况,观察输...阅读全文

博文 2016-09-06 19:00:02 u013344915

Go-goroutines

要点: - goroutines是Go实行并发程序的一种方式 - 语法是:go function_name() - 在执行go function_name()之后,程序马上进入go的下一条语句,而不会等待go的这个函数执行完成 - go和Linux的system调用比较类似 示例 本系列所有素材都源于Introducing Go,本例也不例外。——有些小改动。 功能: - foo():打印1..max整数序列 - main()会启动3个go foo() - 为了区分每个goroutine,特地在foo的打印中增加了id - 可以确定是否在控制台输入字符串(或回车)以模拟wait或sleep - 如果不wait,那么程序可能在退出时并不会输出所有的foo打印串 可以输入注释中的几种情况,观察输...阅读全文

博文 2016-09-06 17:00:07 u013344915

Go-goroutines

要点: - goroutines是Go实行并发程序的一种方式 - 语法是:go function_name() - 在执行go function_name()之后,程序马上进入go的下一条语句,而不会等待go的这个函数执行完成 - go和Linux的system调用比较类似 示例 本系列所有素材都源于Introducing Go,本例也不例外。——有些小改动。 功能: - foo():打印1..max整数序列 - main()会启动3个go foo() - 为了区分每个goroutine,特地在foo的打印中增加了id - 可以确定是否在控制台输入字符串(或回车)以模拟wait或sleep - 如果不wait,那么程序可能在退出时并不会输出所有的foo打印串 可以输入注释中的几种情况,观察输...阅读全文

博文 2016-09-06 18:00:01 u013344915

golang快速排序

1.任意选取一个基值nums[0],本例选择第一个nums[0] 2.对比第一个值和第二个值nums[1]大小; 如果第一个值大,则调换第一个和第二值的位置,基值挪到第二值的位置,后面比较第二个和第三个值的大小 如果第一个值小,则调换第二值和最后一个值的位置end=len(nums)-1,nums[end], end-- ,后面拿末尾的值和第一值(基值)比较 import ( "fmt" ) func qsort(nums []int){ if len(nums)<=1{ return } mid := nums[0] start,end := 0,len(nums)-1 for startmid{ nums[start+1],nums[end]...阅读全文

博文 2019-08-13 20:32:48 jojo1313

关于fasthttp + K8S service负载均衡的一些心得

最近在做一个项目,项目中用golang 写了一个网关gateway,gateway接受来自外部的请求,并转发到后端的容器中。gateway和应用的容器都部署在同一个K8S集群当中。流程如下图 gateway到pod的请求,是通过K8S的dns机制来访问service,使用的是service的endpoint的负载均衡机制。当gateway得到一个请求之后,通过解析对应的参数,然后可以判断需要转发到哪个host,例如:请求转发到service.namespace.svc.cluster.local:8080,然后DNS解析会解析出对应service的clusterIp,通过service转发请求到后端的pod上(具体转发原理可以了解一下kube-proxy的原理),gateway到servic...阅读全文

博文 2020-03-15 08:57:56 xavier-yang

3. 变量

3. 变量 变量是什么 变量指定了某存储单元(Memory Location)的名称,该存储单元会存储特定类型的值。在 Go 中,有多种语法用于声明变量。 声明单个变量 var name type 是声明单个变量的语法。 package main import "fmt" func main() { var age int // 变量声明 fmt.Println("my age is", age) } 语句 var age int 声明了一个 int 类型的变量,名字为 age。我们还没有给该变量赋值。如果变量未被赋值,Go 会自动地将其初始化,赋值该变量类型的零值(Zero Value)。本例中 age 就被赋值为 0。如果你运行该程序,你会看到如下输出: my age is 0 变量可以...阅读全文

博文 2019-08-28 11:32:51 泷汰泱

Go发起HTTP2.0请求流程分析(后篇)——标头压缩

来自公众号:新世界杂货铺 阅读建议 这是HTTP2.0系列的最后一篇,笔者推荐阅读顺序如下: Go中的HTTP请求之——HTTP1.1请求流程分析 Go发起HTTP2.0请求流程分析(前篇) Go发起HTTP2.0请求流程分析(中篇)——数据帧&流控制 回顾 在前篇(*http2ClientConn).roundTrip方法中提到了写入请求header,而在写入请求header之前需要先编码(源码见https://github.com/golang/go/blob/master/src/net/http/h2_bundle.go#L7947)。 在中篇(*http2ClientConn).readLoop方法中提到了ReadFrame()方法,该方法会读取数据帧,如果是http2FrameH...阅读全文

博文 2020-09-21 10:32:40 新世界杂货铺