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

GO TESTING;HOW,WHAT,WHY

Introduction 关于 Go 测试,我们应该知道测试方式(或者说测试手段)、测试对象及测试原因。 How 测试方式 测试实现 举个例子。针对字符串分割函数(如下),实现单元测试。 package goTest import "strings" // Split slices s into all substrings separated by sep and // returns a slice of the substrings between those separators. func Split(s, sep string) []string { var result []string i := strings.Index(s, sep) for i > -1 { resul...阅读全文

博文 2019-08-07 09:32:39 wangwg

Golang 复合数据类型:结构体

结构体的定义 结构体也是一种复合类型,通常使用带属性的结构体来表示一个现实中的实体。结构体也是值类型,因此可以通过使用 new 函数来创建。Go语言不是一门传统的面向对象的编程语言,因此 Go 中没有类的概念,也不支持类的面向对象概念。结构体是由零个或多个任意类型的值聚合成的实体,每个值都可以称为结构体的成员。 结构体成员也可以称为“字段”,这些字段有以下特性: 字段拥有自己的类型和值; 字段名必须唯一; 字段的类型也可以是结构体,甚至是字段所在结构体的类型。 type Family struct { name string age int language string ... } type Family struct { name, language string //同一类型的变量可以...阅读全文

博文 2020-06-03 15:32:41 sunlingbot

golang切片

切片是对数组的抽象 slice 总是指向底层的一个 array。 slice 是一个指向 array 的指针,这是其与 array 不同的地方; slice 是引用类型,这意味着当赋值某个 slice 到另外一个变量,两个引用会指向同一个 array。slice功能强悍的内置类型切片("动态数组"),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。 定义切片 var identifier []type 使用make()函数来创建切片 // var slice1 []string = make([]string, len) //简写 sl := make([]int, 10) //也可以指定容量 sl := make([]T, length, capacity) 切...阅读全文

博文 2019-12-30 19:32:41 程序小白菜

2020-04-17

golang的context 一个简单的并发 举个例子 什么是context [这是一个chan+select来结束一个goroutine的方式] (https://play.golang.org/p/ZZ6EjeZjfj7) 上面说的这种场景是存在的,比如一个网络请求Request,每个Request都需要开启一个goroutine做一些事情,这些goroutine又可能会开启其他的goroutine。所以我们需要一种可以跟踪goroutine的方案,才可以达到控制他们的目的,这就是Go语言为我们提供的Context,称之为上下文非常贴切,它就是goroutine的上下文。 [context重写](https://play.golang.org/p/cuCURu2Rh48) [刚刚是控制一...阅读全文

博文 2020-04-17 07:32:44 jepril

19.单元测试

不写测试的开发不是好程序员。我个人非常崇尚TDD(Test Driven Development)的,然而可惜的是国内的程序员都不太关注测试这一部分。 这篇文章主要介绍下在Go语言中如何做单元测试和基准测试。 go test工具 Go语言中的测试依赖go test命令。编写测试代码和编写普通的Go代码过程是类似的,并不需要学习新的语法、规则或工具。 go test命令是一个按照一定约定和组织的测试代码的驱动程序。在包目录内,所有以_test.go为后缀名的源代码文件都是go test测试的一部分,不会被go build编译到最终的可执行文件中。 在*_test.go文件中有三种类型的函数,单元测试函数、基准测试函数和示例函数。 类型 格式 作用 测试函数 函数名前缀为Test 测试程序的一些...阅读全文

博文 2020-04-30 21:32:55 雪上霜

GO常量与变量

package main import ( "fmt" ) //单个变量(自行判断变量类型) var test1 = "content1" /*单个变量 先声明类型再赋值,此种方式函数中调用不了(会报错syntax error: non-declaration statement outside function body) 请再函数外设置 */ //var test2 string //test2 = "content2" //test3 : = "content3" //:=左侧的变量不应该是已经被声明过的,否则会导致编译错误 //单个变量 var test4 string = "content4" /*多个变量 此种方式函数中调用不了,请再函数外设置 */ //var test5, t...阅读全文

博文 2020-04-16 15:37:42 赛里

Go面向对象编程以及在Tendermint/Cosmos-SDK中的应用

Go面向对象编程以及在Tendermint/Cosmos-SDK中的应用 大家都知道,Go不是面向对象(Object Oriented,后面简称为OO)语言。本文以Java语言为例,介绍传统OO编程拥有的特性,以及在Go语言中如何模拟这些特性。文中出现的示例代码都取自Cosmos-SDK或Tendermint源代码。以下是本文将要介绍的OO编程的主要概念: 类(Class) 字段(Field) 实例字段 类字段 方法(Method) 实例方法 类方法 构造函数(Constructor) 信息隐藏 继承 利斯科夫替换原则(Liskov Substitution Principle,LSP) 方法重写(Overriding) 方法重载(Overloading) 多态 接口(Interface) ...阅读全文

博文 2019-07-16 15:02:49 CET_Talk

DAY3 GOLANG(三)函数

函数func 函数名 (形参列表)(返回值类型列表){ 执行语句 return 返回值列表}如果返回多个值,(返回值类型列表)的小括号必须写如果返回值只有一个,(返回值类型列表)可以不写()形参列表:表示函数的输入函数中的语句:表示为了实现功能代码块函数可以有返回值,也可以没有范例func cal (n1 float64, n2 float64,operator byte) float64{ // n1,n2,operator 形参 var res float64 switch operator { case '+' : res = n1 + n2 case '-' : res = n1 - n2 case '*': res = n1*n2 case '/': res =n1/n2 defa...阅读全文

博文 2019-10-29 21:32:53 aside section._1OhGeD

GO函数

/* 格式: func function_name( [parameter list] ) [return_types]{ 函数体 } func:func声明 function_name:函数名称 [parameter list]:参数列表 return_types:返回类型,不需要返回值的,return_types可以不写。 函数体:函数体 */ package main import ( "fmt" ) func main() { //定义局部变量 var a int = 55555 var b int = 66666 var result int //调用函数 (a和b实参) result = max(a, b) //调用函数 c, d := exchange("gxm", "sail...阅读全文

博文 2020-04-29 03:33:13 赛里

Go开发中的十大常见陷阱[译]

文: The Top 10 Most Common Mistakes I’ve Seen in Go Projects 作者: Teiva Harsanyi 译者: Simon Ma 我在Go开发中遇到的十大常见错误。顺序无关紧要。 未知的枚举值 让我们看一个简单的例子: type Status uint32 const ( StatusOpen Status = iota StatusClosed StatusUnknown ) 在这里,我们使用iota创建了一个枚举,其结果如下: StatusOpen = 0 StatusClosed = 1 StatusUnknown = 2 现在,让我们假设这个Status类型是JSON请求的一部分,将被marshalled/unmarshalled...阅读全文

博文 2019-08-17 17:02:38 SimonMa

一个TCP长连接设备管理后台工程(六)

前篇 一个TCP长连接设备管理后台工程(一) 一个TCP长连接设备管理后台工程(二) 一个TCP长连接设备管理后台工程(三) 一个TCP长连接设备管理后台工程(四)一个TCP长连接设备管理后台工程(五) Github仓库地址 封包器 上面介绍了过滤器,过滤器实际就是一个能够处理粘包和拆包的解析器,和封包器的作用正好相反。但是封包器会很简单,因为封包没有粘包和拆包的处理。 代码如下: //Packer is proto Packer api func Packer(msg Message) []byte { data := make([]byte, 0) tempbytes := codec.Word2Bytes(msg.HEADER.MID) data = append(data, temp...阅读全文

博文 2019-12-31 15:32:41 qiuzhiqian

golang中defer的执行过程是怎样的?

在同一个goroutine中: 多个defer的调用栈原理是什么? defer函数是如何调用的? 为了探究其中的奥秘我准备了如下代码: package main import "fmt" func main() { xx() } func xx() { defer aaa(100, "hello aaa") defer bbb("hello bbb") return } func aaa(x int, arg string) { fmt.Println(x, arg) } func bbb(arg string) { fmt.Println(arg) } 输出: bbb 100 hello aaa 从输出结果看很像栈的数据结构特性:后进先出(LIFO)。 首先从汇编入手去查看xx()函数的执...阅读全文

博文 2019-07-18 18:02:44 XITEHIP

一个TCP长连接设备管理后台工程(四)

前篇 一个TCP长连接设备管理后台工程(一)一个TCP长连接设备管理后台工程(二)一个TCP长连接设备管理后台工程(三) Github仓库地址 协议解析 从前面内容我们可以发现,808协议是一个很典型的协议格式: 固定字段+变长字段 其中固定字段用来检测一个帧格式的完整性和有效性,所以一般会包含一下内容:帧头+变长字段对应的长度+校验。由于这一段的数据格式固定,目的单一,所以处理起来比较简单。 变长字段的长度是由固定字段终端某一个子字段的值决定的,而且这部分的格式比较多变,需要灵活处理。这一字段我们通常称为Body或者Apdu。 我们首先说明变长字段的处理流程。 Body处理 正因为Body字段格式灵活,所以为了提高代码的复用性和拓展性,我们需要对Body的处理机制进行抽象,提取出一个相对通...阅读全文

博文 2019-12-28 11:32:38 qiuzhiqian

【Go每日问答】数据类型及用法

在 Go 编程语言中,数据类型用于声明函数和变量。 数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要用大数据的时候才需要申请大内存,就可以充分利用内存。 Go 语言按类别有以下几种数据类型: 序号 类型和描述 1 布尔型 布尔型的值只可以是常量 true 或者 false。一个简单的例子:var b bool = true。 2 数字类型 整型 int 和浮点型 float32、float64,Go 语言支持整型和浮点型数字,并且支持复数,其中位的运算采用补码。 3 字符串类型: 字符串就是一串固定长度的字符连接起来的字符序列。Go 的字符串是由单个字节连接起来的。Go 语言的字符串的字节使用 UTF-8 编码标识 Unicode 文本。 4 派生类型: 包括: (a) ...阅读全文

博文 2020-03-20 10:32:51 古月

C++服务端面试准备(2)MySQL相关

声明:本文内容纯属博主自己查找和归纳的个人所需的知识点,仅作参考,如有错误,博主强烈希望您指出。如果您是某个知识点的原创博主,如有需要,可联系本人加上链接。本文内容会根据博主所需进行更新,希望大家多多关照。 MySQL底层数据结构 B+树 存储引擎之二:InnoDB与Myisam InnoDB Myisam 事务 支持 不支持 外键 支持 不支持 锁 表锁、行锁 表锁 总行数 需要扫描整个表 直接读取 文件 .idb数据文件和它的.frm文件,表的大小只受限于操作系统文件的大小,一般为 2GB .frm文件存储表定义。数据文件的扩展名为.MYD (MYData)。索引文件的扩展名是.MYI (MYIndex)。 使用环境 都符合要求的情况下,改动多的时候 都符合要求的情况下,查找多的时候 自...阅读全文

博文 2020-04-07 18:32:47 DX3906

Golang入门教程——函数、循环与分支

本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Golang专题的第四篇,这一篇文章将会介绍golang当中的函数、循环以及选择判断的具体用法。 函数 在之前的文章当中其实我们已经接触过函数了,因为我们写的main函数本质上也是一个函数。只不过由于main函数没有返回值,也没有传参,所以省略了很多信息。 func main() { fmt.Println("Hello World") } 复制代码 下面,我们来看看一个完整的函数是怎样的,这是golang官网上的例子。 func add(x int, y int) int { return x + y } 复制代码 这是一个非常简单的a+b的函数,我想大家应该都能看懂。我们来重点关注一下函数的格式。首先是func关键字,我们...阅读全文

博文 2020-05-09 22:34:22 承志

Go学习之Channel总结

Channel是Go中的一个核心类型,你可以把它看成一个管道,通过它并发核心单元就可以发送或者接收数据进行通讯(communication)。 类型 T表示任意的一种类型 双向: chan T 单向仅发送: chan <- 单向仅接受: <- chan 单向的channel,不仅可以通过声明make(chan <- interface{}) 来创建,还可以通过隐身或显示的通过 chan 来转换,如下 func main() { channel := make(chan int, 10) convert(channel) } func convert(channel chan<- int) {} 在 convert函数中,就可以吧channel当成单向输入管道来使用了 既然 双向 chan,既...阅读全文

博文 2019-08-15 21:02:37 tyloafer

(二)Golang的变量

为什么需要变量: 变量是程序的基本组成单位不论是使用哪种高级程序语言编写程序,变量都是其程序的基本组成单位,比如:下面代码中sum、sub都是变量。 func getVal(num1 int, num2 int) (int, int) { sum := num1 + mum2 sub := num1 - num2 return sum, sub } func main() { sum, sub := getVal(30, 30) fmt.Println("sum=", sum, "sub=", sub) sum2, _ := getVal(10, 30) fmt.Println("sum=", sum2) } 变量的介绍: 变量的概念变量相当于内存中一个数据存储空间的表示,可以把变量看做是一...阅读全文

博文 2019-08-15 23:33:48 运维路

Go语言学习笔记01.GO语言简介

语言特点 Go语言是一门并发支持、垃圾回收的编译型语言。从某种意义上可以说是C的优化版本。 语言优势 静态编译语言,可以在编译的时候检查出来隐藏的大多数问题 不依赖其他库,部署就传一个文件即可。 高性能,高效并发。可以说就是为并发而生的。 内存安全,高效的垃圾回收 。 快速编译,相比较于C++。 简单易学 ,和C一样,语法极其简介。 内置格式化代码,代码格式一模一样 。 跨平台编译,可以直接包含C代码。 语言特点 保留但大幅度简化指针 多参数返回 array slice map等内置基本数据结构 错误处理(panic recover error) interface Goroutine 多核处理和网络开发 部分函数式编程(匿名函数、闭包),反射,语言交互性 Package即目录 go的哲学 ...阅读全文

博文 2019-11-07 20:32:43 快乐的提千万

如何在JavaScript中重命名对象键?

JavaScript不提供内置函数来重命名对象键,那么如何重命名对象键?下面本篇文章就来给大家介绍一下在JavaScript中重命名对象键的方法,希望对大家有所帮助。 在JavaScript中,对象用于存储各种数据的集合,是属性的集合;属性是一个“key:value”对。其中key(键)称为“属性名”,用于标识值。下面介绍重命名对象键的方法。方法一:通过简单的变量赋值来重命名对象在分配了一个或多个变量之后,我们将删除旧的键值对并打印新的键值对。语法:obj['New key'] = obj['old key'];注意:通过简单的变量赋值来重命名对象可以应用于多个键值对。例: 阅读全文

博文 2020-03-16 17:32:53 yanghs

Go字符串

字符串: string是数据类型,不是引用或指针类型 string是只读的byte slice,len函数可以获取它所包含的byte数 string的byte数组可以存放任何数据 func TestStringInit(t *testing.T) { var s string t.Log(s) // 初始化为默认零值"" 空字符串 s = "hello" t.Log(len(s)) // 5 5个byte //s[1] = 3 // string是不可变的byte slice 不可以赋值 s = "\xE4\xB8\xA5" // 可以存储任何二进制数据 t.Log(s) // 严 t.Log(len(s)) // 3 为3个byte } Unicode UTF8: Unicode是一种字符...阅读全文

博文 2020-05-15 02:32:45 Tinkled

带你学够浪:Go语言基础系列 - 8分钟学控制流语句

★ 文章每周持续更新,原创不易,「三连」让更多人看到是对我最大的肯定。可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) ” 对于一般的语言使用者来说 ,20% 的语言特性就能够满足 80% 的使用需求,剩下在使用中掌握。基于这一理论,Go 基础系列的文章不会刻意追求面面俱到,但该有知识点都会覆盖,目的是带你快跑赶上 Golang 这趟新车。 Hurry up , Let's go ! 控制语句是程序的灵魂,有了它们程序才能完成各种逻辑,今天我们就来学习 Go 中的各种控制语句。 通过本文的学习你将掌握以下知识: if 条件语句for 循环语句switch 语句defer 延迟调用 if 条件语句 与大多数编程语言一样,if 用于条件判断,当条件表达式 expr ...阅读全文

博文 2020-06-03 01:34:22 柠檬橙

9. Go 语言流程控制:switch-case

Hi,大家好,我是明哥。 在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,不防关注一下,一起学习,一起成长。 我的在线博客:golang.iswbm.com 我的 Github:github.com/iswbm/GolangCodingTime Go里的流程控制方法还是挺丰富,整理了下有如下这么多种: if - else 条件语句 switch - case 选择语句 for - range 循环语句 goto 无条件跳转语句 defer 延迟执行 上一篇讲了 if -else 条件语句,今天先来讲讲 switch - case 选择...阅读全文

博文 2020-05-01 20:34:18 王一白

Go context 学习笔记

golang 的 Context包,是专门用来简化对于处理单个请求的多个goroutine之间与请求域的数据、取消信号、截止时间等相关操作,这些操作可能涉及多个 API 调用。 比如有一个网络请求Request,每个Request都需要开启一个goroutine做一些事情,这些goroutine又可能会开启其他的goroutine。这样的话, 我们就可以通过Context,来跟踪这些goroutine,并且通过Context来控制他们的目的,这就是Go语言为我们提供的Context,中文可以称之为“上下文”。 另外一个实际例子是,在Go服务器程序中,每个请求都会有一个goroutine去处理。然而,处理程序往往还需要创建额外的goroutine去访问后端资源,比如数据库、RPC服务等。由于这...阅读全文

博文 2020-05-30 03:32:44 Jaycee88

带你学够浪:Go语言基础系列 - 8分钟学复合类型

文章每周持续更新,原创不易,「三连」让更多人看到是对我最大的肯定。可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) 对于一般的语言使用者来说 ,20% 的语言特性就能够满足 80% 的使用需求,剩下在使用中掌握。基于这一理论,Go 基础系列的文章不会刻意追求面面俱到,但该有知识点都会覆盖,目的是带你快跑赶上 Golang 这趟新车。 Hurry up , Let's go ! 前面我们学习过 Golang 中基础数据类型,比如内置类型 int string bool 等,其实还有一些复杂一点点,但很好用的复合类型,类似 C 中的数组和 struct、C++ 中的 map ,今天我们就来学习 Go 中的复合类型。 通过本文的学习你将掌握以下知识: 结构体 指针类型...阅读全文

博文 2020-06-08 01:33:10 柠檬橙1024

golang准备

Go 环境变量export GOROOT=$HOME/goexport PATH=$PATH:$GOROOT/binexport GOPATH=$GOROOT/src:$HOME/Applications/Go安装目录清单/bin:包含可执行文件,如:编译器,Go 工具/doc:包含示例程序,代码工具,本地文档等/lib:包含文档模版/misc:包含与支持 Go 编辑器有关的配置文件以及 cgo 的示例/os_arch:包含标准库的包的对象文件(.a)/src:包含源代码构建脚本和标准库的包的完整源代码(Go 是一门开源语言)/src/cmd:包含 Go 和 C 的编译器和命令行脚本文档查看go doc fmt其它工具go install 是安装 Go 包的工具。主要用于安装非标准库的包文件...阅读全文

博文 2020-04-01 11:33:02 剧终的开始

ARTS 第3周| LeetCode 140 Word Break| Go GC 历史| return defer 哪个先执行

ARTS ARTS 是陈浩(网名左耳朵耗子)在极客时间专栏里发起的一个活动,目的是通过分享的方式来坚持学习。 每人每周写一个 ARTS:Algorithm 是一道算法题,Review 是读一篇英文文章,Technique/Tips 是分享一个小技术,Share 是分享一个观点。 本周内容 这一周的 ARTS 你将看到: Work Break II 这道题的评论区竟然有一半人都在吐槽测试例太恶心? 一篇文章了解 Golang GC 的“昨天、今天和明天”。 一个老 Gopher 常谈的问题,到底 return 和 defer 哪个先执行? 不要一开始就经陷入细节的地狱。 Algorithm 本周的算法题是 LeetCode 的 139.Work Break 和 140.Work Break I...阅读全文

博文 2020-06-01 10:32:45 casmo澎湃哥

关于收集,标准化和集中化处理Golang日志的一些建议

依赖分布式系统的公司组织和团队经常使用Go语言编写其应用程序,以利用Go语言诸如通道和goroutine之类的并发功能。如果你负责研发或运维Go应用程序,则考虑周全的日志记录策略可以帮助你了解用户行为,定位错误并监控应用程序的性能。 这篇文章将展开聊一些用于管理Go日志的工具和技术。我们将首先考虑要使用哪种日志记录包来满足各种记录要求。然后会介绍一些使日志更易于搜索和可靠,减少日志资源占用以及使日志消息标准化的技术。 日志包的选择 Go标准库的日志库非常简单,仅仅提供了print,panic和fatal三个函数对于更精细的日志级别、日志文件分割以及日志分发等方面并没有提供支持. 所以催生了很多第三方的日志库,流行的日志框架包括logrus、zap、glog等。我们先来大致看下这些日志库的特点...阅读全文

每天一点Go语言——Go语言语法基础及基本数据类型

每天一点Go语言——Go语言语法基础及基本数据类型 一、Go语言基础语法 ​ 上篇Go语言讲解中谈到了有关Go语言的基本组成结构,该小节就来讲述有关go语言的基础语法。Go语言程序由多个标记组成,如:关键字、标识符、常量、符号、字符串。 ​ 行分割符——一行表示一个语句结束,无需写“;”。当然,你可以将多条语句写在一行,并且使用“;”号区分,但是不推荐这样写开发代码。 ​ 注释在本文就不多说了。 标识符 ​ 如果说变量是shell入门的第一道关卡,那么可以说,标识符就是开发语言的第一道门槛。 ​ 标识符,从官方角度解释:用于命名变量、类型等程序实体。一个标识符具备的特点:实际上就是一个或是多个字母(A~Z和a~z)数字(0~9)、下划线_组成的序列,但是第一个字符必须是字母huo下划线而不能...阅读全文

博文 2020-04-03 14:33:23 wx5d8a17c45cb5b

11.函数

Go语言基础之函数 Golang 函数是组织好的、可重复使用的、用于执行指定任务的代码块。本文介绍了Go语言中函数的相关内容。 函数 Go语言中支持函数、匿名函数和闭包,并且函数在Go语言中属于“一等公民”。 函数定义 Go语言中定义函数使用func关键字,具体格式如下: func 函数名(参数)(返回值){ 函数体 } 其中: 函数名:由字母、数字、下划线组成。但函数名的第一个字母不能是数字。在同一个包内,函数名也称不能重名(包的概念详见后文)。 参数:参数由参数变量和参数变量的类型组成,多个参数之间使用,分隔。 返回值:返回值由返回值变量和其变量类型组成,也可以只写返回值的类型,多个返回值必须用()包裹,并用,分隔。 函数体:实现指定功能的代码块。 我们先来定义一个求两个数之和的函数: ...阅读全文

博文 2020-04-08 07:32:51 雪上霜

Golang 基础数据类型(一)

基础数据类型 在Go语言中,数据类型用于声明函数与变量、常量数据的类型,声明何种数据类型主要是为了提高内存的利用率,因为不同的数据类型在内存所需要的空间大小是不一样的。 Golang内置基础数据类型如下表所示: 数据类型名称 类型和描述 boolean 布尔型,值可以是常量true或false int&uint 带符号和无符号两种整型。int8,int16,int32(rune),int64和uint8(byte),uint16,uint32,uint64。uintptr类型在指针小节中单独介绍。 float32&float64 Golang没有float这种类型,只有float32和float64两种类型 complex64&complex128 复数类型,complex64包含float...阅读全文

Golang基础(六) | 接口

Interface类型 简单的说,interface是一组method签名的组合,我们通过interface来定义对象的一组行为。interface类型定义了一组方法,如果某个对象实现了某个接口的所有方法,则此对象就实现了此接口。详细的语法参考下面这个例子。 type Human struct { name string age int phone string } type Student struct { Human //匿名字段Human school string loan float32 } type Employee struct { Human //匿名字段Human company string money float32 } //Human对象实现Sayhi方法 func ...阅读全文

博文 2020-03-24 22:32:49 youzhihua

每天一点Go语言——变量、常量、运算符解析

每天一点Go语言——变量、常量、运算符解析 前言 ​ 前面简单说过有关Go语言的基础语法及其数据类型,大致上了解了Go语言程序的组成,而本文将讲述近乎所有编程语言都涉及的变量、常量以及运算符相关内容。 一、变量 何为变量? ​ 对该专业名词解释:计算机语言中能储存计算结果或能表示值抽象概念。变量可以通过变量名访问。Go语言中的变量由字母、数字、下划线组成,首字母不可以为数字。耳熟能详了哈~ ​ 笔者的理解:我编写程序的时候需要使用一个值,并且我一直想要重复使用,而且有时候这个值会发生变化等等,所以我需要声明一个变量来被这个值赋之。 怎么声明变量? 变量声明一般格式: var 变量名 变量类型 var:变量声明关键字,表示声明变量 其次是变量的名字,最后是变量的类型(如int) 当然也有其他的...阅读全文

博文 2020-04-04 15:33:12 wx5d8a17c45cb5b

golang中接口的面向对象(二)--继承

在上一节 golang中接口的面向对象(一)--多态特征中,我们学习了galang中的多态,参考https://blog.51cto.com/91235688/2499405 继承那么这一节中,我们继续用上一节中的例子,来学习继承。我们修改上一节中的示例代码,如下所示:type geometry interface { sayHi() //geometry 只有一个方法sayHi()}type rect struct { geometry //这里使用匿名字段,使得rect 继承了 geometry 类型 len, wid float32}func (r rect) sayHi() { //这里rect 作为继承者,重写了sayHi方法 fmt.Println("i am a rect")}...阅读全文

博文 2020-05-30 23:34:00 roddger

25. 学习 Go 协程:详解信道/通道

Hi,大家好,我是明哥。 在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,不防关注一下,一起学习,一起成长。 我的在线博客:golang.iswbm.com 我的 Github:github.com/iswbm/GolangCodingTime Go 语言之所以开始流行起来,很大一部分原因是因为它自带的并发机制。 如果说 goroutine 是 Go语言程序的并发体的话,那么 channel(信道) 就是 它们之间的通信机制。channel,是一个可以让一个 goroutine 与另一个 goroutine 传输信息的通道,我把他叫做...阅读全文

博文 2020-06-02 11:35:02 王一白

Go的50坑:新Golang开发者要注意的陷阱、技巧和常见错误[1]

Go是一门简单有趣的语言,但与其他语言类似,它会有一些技巧。。。这些技巧的绝大部分并不是Go的缺陷造成的。如果你以前使用的是其他语言,那么这其中的有些错误就是很自然的陷阱。其它的是由错误的假设和缺少细节造成的。 如果你花时间学习这门语言,阅读官方说明、wiki、邮件列表讨论、大量的优秀博文和Rob Pike的展示,以及源代码,这些技巧中的绝大多数都是显而易见的。尽管不是每个人都是以这种方式开始学习的,但也没关系。如果你是Go语言新人,那么这里的信息将会节约你大量的调试代码的时间。 目录 初级篇 开大括号不能放在单独的一行 未使用的变量 未使用的Imports 简式的变量声明仅可以在函数内部使用 使用简式声明重复声明变量 偶然的变量隐藏Accidental Variable Shadowing...阅读全文

博文 2020-05-19 10:36:25 开发者阿俊

go 入门教程变量

变量定义要求 :Go 语言变量名由字母、数字、下划线组成,其中首个字符不能为数字 在描述变量定义之前,先描述下go 语言的结构 package main import "fmt" import "math" func main() { // 定义单一变量 var age =28 fmt.Println("my age is ",age) } 输出:my age is 28 Go 语言的基础组成有以下几个部分: 包声明 引入包 函数 变量 语句 & 表达式 注...阅读全文

博文 2020-01-03 12:33:13 水滴石川1

使用 gorilla/mux 增强 Go HTTP 服务器的路由能力

今天这篇文章我们将会为我们之前编写的HTTP服务器加上复杂路由的功能以及对路由进行分组管理。在之前的文章《深入学习用 Go 编写HTTP服务器》中详细地讲了使用net/http进行路由注册、监听网络连接、处理请求、安全关停服务的实现方法,使用起来非常方便。但是net/http有一点做的不是非常好的是,它没有提供类似URL片段解析、路由参数绑定这样的复杂路由功能。好在在Go社区中有一个非常流行的gorilla/mux包,它提供了对复杂路由功能的支持。在今天这篇文章中我们将探究如何用gorilla/mux包来创建具有命名参数、GET/POST处理、分组前缀、限制访问域名的路由。 安装gorilla/mux包 我们在之前写的HTTP服务的代码根目录,使用go get命令从GitHub安装软件包,如...阅读全文

博文 2020-02-06 10:34:19 kevinyan

第三章 九析带你轻松完爆 go - 变量声明

1 前言 go 语言跟很多编译型语言一样,在使用变量前首先需要声明。声明方式有两种:单行声明和批量声明,声明关键字为 var,且如果声明局部变量而不使用则会编译报错。 同时需要注意的是,go 语言语句并没有分号“;”做结尾,并且单行声明语法如下:var var_name var_type 例如:var name string 批量声明语法如下:var ( name string age int gender string)2 代码样例 如下是 go 语言使用过程中一个代码样例:package mainimport "fmt"func main() { var username string = "mark" var password string = "helloworld" var ( a...阅读全文

博文 2020-02-23 23:33:18 九析

让我们一起啃算法----移除元素

移除元素(Remove-Element) 题干如下: 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1: 给定 nums = [3,2,2,3], val = 3, 函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。 你不需要考虑数组中超出新长度后面的元素。示例 2:给定 nums = [0,1,2,2,3,0,4,2], val = 2,函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。注意这五个元素可为任意顺序。你不需...阅读全文

博文 2020-05-07 10:32:47 三斤和他的朋友们

调度相关的重要数据结构

声明 下面的分析均基于Golang1.14版本。 以下数据结构均做了裁剪,只留了部分调度密切相关的重要结构。 一、G的定义 裁剪了大部分字段,后面填坑把其它字段的作用及用途整理。 type g struct { stack stack // offset known to runtime/cgo G的栈信息含栈的起始和终止地址 m *m // current m; offset known to arm liblink 运行时绑定的M sched gobuf // 运行时的上下文 goid int64 // g id 唯一的标识id } type stack struct { lo uintptr hi uintptr } type gobuf struct { sp uintptr // ...阅读全文

博文 2020-05-11 07:32:41 不争_900c

learn go with tests 学习笔记(二) 数组与切片

知识点 先写测试! Go 有内置的计算测试 覆盖率的工具,它能帮助你发现没有被测试过的区域。我们不需要追求 100% 的测试覆盖率,它只是一个供你获取测试覆盖率的方式。只要你严格遵循 TDD 规范,那你的测试覆盖率就会很接近 100%。 运行: `go test -cover` 你会看到: PASS coverage: 100.0% of statements 数组 数组初始化: 数组的容量是我们在声明它时指定的固定值。我们可以通过两种方式初始化数组: [N]type{value1, value2, ..., valueN} e.g. numbers := [5]int{1, 2, 3, 4, 5} [...]type{value1, value2, ..., valueN} e.g. nu...阅读全文

博文 2020-05-28 21:32:46 硌手小石头

24. 理解 Go 语言中的协程:goroutine

Hi,大家好,我是明哥。 在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,不防关注一下,一起学习,一起成长。 我的在线博客:http://golang.iswbm.com我的 Github:github.com/iswbm/GolangCodingTime 说到Go语言,很多没接触过它的人,对它的第一印象,一定是它从语言层面天生支持并发,非常方便,让开发者能快速写出高性能且易于理解的程序。 在 Python (为Py为例,主要是我比较熟悉,其他主流编程语言也类似)中,并发编程的门槛并不低,你要学习多进程,多线程,还要掌握各种支持并发的...阅读全文

博文 2020-06-01 08:33:29 Python编程时光

Golang | 高级数据类型

一、数组 数组作为函数参数,传值的; 只有长度和类型相同,才是同一类型,才可以相互赋值; var arr = [10]int{1, 2, 3}//声明长度才是数组,没声明长度的是切片 //切片可以append,数组不可以 //[]int 和 [10]int是不能相互赋值的。 复制代码二、切片 切片是引用类型, 什么是引用类型? "引用类型" 有两个特征:1、多个变量引用一块内存数据,不创建变量的副本,2、修改任意变量的数据,其它变量可见。 1、slice内存结构 type SliceHeader struct { Data uintptr Len int Cap int } //在64位架构的机器上,一个切片需要24字节的内存:指针字段需要8字节,长度和容量字段分别需要8字节。 //可以看出...阅读全文

博文 2020-04-06 00:34:22 _Liu_

9. Go 语言流程控制:switch-case

Hi,大家好,我是明哥。 在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,不防关注一下,一起学习,一起成长。 我的在线博客:http://golang.iswbm.com我的 Github:github.com/iswbm/GolangCodingTime Go里的流程控制方法还是挺丰富,整理了下有如下这么多种: if - else 条件语句 switch - case 选择语句 for - range 循环语句 goto 无条件跳转语句 defer 延迟执行 上一篇讲了 if -else 条件语句,今天先来讲讲 switch - c...阅读全文

博文 2020-05-01 18:32:40 Python编程时光

golang

go变量 // 变量可以以字母,数字,下划线组成,但是只能以数字或下划线开头 var varibale type = value var varuable = value // 根据值类型自动推断类型 var variable_1 type variable_1 = value // 1. 已经声明的变量不能使用以下方式赋值。:= 左侧的变量不应该时已经被声明过的。 // 2. 同时不带声明格式的只能在函数体中出现。 // 3. 使用:= 赋值的变量不能再次使用:=赋值。否则 提示编译错误:no new variables on left side of := // 4.go中如果你声明了一个局部变量却没有在相同的代码块中使用它,同样会得到编译错误。a declared and not us...阅读全文

博文 2019-03-27 20:35:35 yuerumylove

Golang筑基 —— 语言结构、语法篇

Goalng结构 Go 语言的基础组成有以下几个部分: 包声明 引入包 函数 变量 语句 & 表达式 注释 下面以代码示例说明: package main import "fmt" func main(){ //声明变量a var a string //给变量a赋值 a = "hello world!" //输出a fmt.Println(a) } package :包名,Golang中所有的文件都要有package,用于标记文件的内容属于哪个包;包分为两类main包和非main包,一个程序只能有一个main包。包之间不能交叉引用,类似于c/c++不能交叉引用.h文件。 import :引用的包,可以为自定义的包,也可以是系统包,fmt就是系统包,实现输出的功能 main:主函数,只有mai...阅读全文

博文 2020-01-07 19:32:43 技术修仙

3.变量和常量

Go语言基础之变量和常量 | Golang 变量和常量是编程中必不可少的部分,也是很好理解的一部分。 标识符与关键字 标识符 在编程语言中标识符就是程序员定义的具有特殊意义的词,比如变量名、常量名、函数名等等。 Go语言中标识符由字母数字和_(下划线)组成,并且只能以字母和_开头。 举几个例子:abc, _, _123, a123。 关键字 关键字是指编程语言中预先定义好的具有特殊含义的标识符。 关键字和保留字都不建议用作变量名。 Go语言中有25个关键字: break default func interface select case defer go map struct chan else goto package switch const fallthrough if range ...阅读全文

博文 2020-04-04 09:32:48 雪上霜

12. Go 语言流程控制:defer 延迟语句

Hi,大家好,我是明哥。 在自己学习 Golang 的这段时间里,我写了详细的学习笔记放在我的个人微信公众号 《Go编程时光》,对于 Go 语言,我也算是个初学者,因此写的东西应该会比较适合刚接触的同学,如果你也是刚学习 Go 语言,不防关注一下,一起学习,一起成长。 我的在线博客:http://golang.iswbm.com我的 Github:github.com/iswbm/GolangCodingTime Go里的流程控制方法还是挺丰富,整理了下有如下这么多种: if - else 条件语句 switch - case 选择语句 for - range 循环语句 goto 无条件跳转语句 defer 延迟执行 今天是最后一篇讲控制流程了,内容是 defer 延迟语句,这个在其他编程语...阅读全文

博文 2020-05-07 09:32:42 Python编程时光