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

Golang学习笔记-条件语句,循环语句

Go的条件语句,循环语句和C很像,不同的是Go的条件表达式可以不用括号扩起来,除此之外还有这些不同: switch语句 switch分支中的代码执行完后会跳出switch代码块,如果我们需要执行后面的 case,可以使用fallthrough。 func main() { a:=1 switch a { case 0: fmt.Println("a is 0") case 1: fmt.Println("a is 1") fallthrough case 2: fmt.Println("a is 2") } } 结果: a is 1 a is 2 switch支持任何类型的判断,例如下面的string: func main() { var fruitName="apple" switch f...阅读全文

博文 2019-09-27 23:33:01 aside section ._1OhGeD

并发编程的数据竞争问题以及解决之道

Go语言以容易进行并发编程而闻名,但是如果稍不注意,并发程序可能导致的数据竞争问题(data race)就会经常出现在你编写的并发程序的待解决Bug列表中-- 如果你不幸在代码中遇到这种错误,这将是最难调试的错误之一。 今天这篇文章里我们首先来看一个导致数据竞争的示例程序,使用go命令行工具检测程序的竞争情况。然后我们将介绍一些在不改变程序核心逻辑的情况下如何绕过并解决并发情况下的数据竞争问题的方法。最后我们会分析用什么方法解决数据竞争更合理以及留给大家的一个思考题。 本周这篇文章的主旨概要如下: 并发程序的数据竞争问题。 使用go命令行工具检测程序的竞争情况。 解决数据竞争的常用方案。 如何选择解决数据竞争的方案。 一道测试自己并发编程掌握程度的思考题。 数据竞争 要解释什么是数据竞争我们...阅读全文

博文 2020-05-28 12:32:47 Kevin

7.Go语言基础之函数

1.函数 1.1函数定义 Go语言中定义函数使用fun关键字,具体格式为 func 函数名(参数)(返回值){ 函数体 } 其中: 1.函数名:由字母,数字,下划线组成。但函数名的第一个字母不能是数字。在同一个包内,函数名不能重名。 2.参数:参数由变量名和变量类型组成。 3.返回值:可以只写返回值类型,多个返回值必须用()包裹,并用,分隔。 4.函数体:实现指定功能的代码块。 定义一个求两个数和的函数: func intSum(x int, y int) int { return x + y } 函数的参数和返回值是可选的,我们也可以不传参也没有返回值。 func sayHello() { fmt.Println("Hello vita") } 1.2函数的调用 定义了函数后,可以通过 函...阅读全文

博文 2019-12-12 12:33:10 DevOperater

Go 语言环境安装

Go 语言环境安装 Go 语言支持以下系统: Linux FreeBSD Mac OS X(也称为 Darwin) Window 安装包下载地址为(go语言环境配置安装包下载安装教程): https://golang.org/dl/ 各个系统对应的包名: Go 语言环境安装 UNIX/Linux/Mac OS X, 和 FreeBSD 安装 以下介绍了在UNIX/Linux/Mac OS X, 和 FreeBSD系统下使用源码安装方法: 1、下载源码包:go1.4.linux-amd64.tar.gz。 2、将下载的源码包解压至 /usr/local目录。 tar -C /usr/local -xzf go1.4.linux-amd64.tar.gz 3、将 /usr/local/go/bi...阅读全文

golang语言基础篇

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/ITcombox/article/details/48035117 go语言特性:◆ 自动垃圾回收具备系统自动释放资源◆更丰富的内置类型map类型、slice类型(类似vector)◆函数多返回值跟lua/erlang一样,支持函数多返回值,优化输入输出参数、结构体参数等传递◆错误处理defer/recover/panic,defer用于资源的释放,go语言不提供构造和析构,recover截取错误处理流程,一般在使用defer的关键字函数中使用;若在无异常的goroutine中使用recover,会导致此goroutine所在的进程打印错误信息后,直接退出◆匿名函数a := fun() / a(...阅读全文

博文 2018-12-06 19:31:34 itcombox

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

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

博文 2020-06-03 00:32:44 柠檬橙1024

defer 的一些用法和猜测

以前的代码中,基本上只使用了 defer 作为防御程序 panic 退出的手段,没有仔细考虑过对返回值的影响。今天有同事提到: 如果执行过程中发生 panic,defer函数 recover() != nil的情况下,未命名的返回值的函数会返回什么呢? 之前并没有没有想过这个问题,猜想应该是返回该类型的默认值,试了一下果然如此。 func fooA() float64 { defer func() { if err := recover(); err != nil { } }() *(*float64)(nil) = 0.1 // panic return 1.0 } fooA() 返回0。 那么如果 defer 函数返回值和上层函数一致,会不会替换掉返回值呢?(会就有鬼了) func fo...阅读全文

博文 2019-08-22 02:32:46 SpikeQin

Golang之旅2-变量定义

Go语言中变量定义 var关键字定义 初始值默认是类型的初始值 同时定义不同类型的变量,集中定义 var声明的变量可以放在函数体内或者包内 var关键字可以省略 短变量定义 短变量声明是通过:=实现的,只能放在函数体内 短变量声明和var关键字不能同时使用 package main import "fmt" // 变量定义 // 使用var定义:同时定义多个不同的变量;可以放在函数体内或者包内; // 通过var集中定义(放在括号内);var有时候能够省略,编译器自动识别类型; // 使用短变量声明 := 只能使用在函数体内部;短变量声明和var不能同时使用 //var aa = 3 //var bb = "kkk" //var ss = true var ( aa = 3 bb = "kk...阅读全文

博文 2019-10-09 00:32:44 aside section ._1OhGeD

golang并发----基础

Channels 创建channel 使用内置的make函数,我们可以创建一个channel // ch has type 'chan int' ch := make(chan int) // unbuffered channel ch = make(chan int, 0) // unbuffered channel ch = make(chan int, 3) // buffered channel with capacity 3 引用类型&零值&比较 和map类似,channel也对应一个make创建的底层数据结构的引用.当我们复制一个channel或用于函数参数传递时,我们只是拷贝了一个channel引用,因此调用者和被调用者将引用同一个channel对象. 和其它的引用类型一样,c...阅读全文

GO的第一天,声明和变量

其实之前有自学过go的基础,但是时隔蛮久的,然后也没有去经常性的使用,现在重头开始学习啦 声明 声明语句定义了程序的各种实体对象以及部分或全部的属性。Go语言主要有四种类型的声明语句:变量(var)、常量(const)、类型(type)和函数(func)实体对象的声明。一个Go语言编写的程序对应一个或多个以.go为文件后缀名的源文件中。每个源文件编写顺序是 说明该源文件是属于哪个包。 package main 包声明语句之后是import语句导入依赖的其它包 import "fmt" 然后是包一级的类型、变量、常量、函数的声明语句,包一级的各种类型的声明语句的顺序无关紧要 var x, y int const pi = 3.14 func sayhi(){ fmt.Println("Hell...阅读全文

博文 2020-03-06 00:32:41 Mr_J

Golang——map

Map是无序的、基于key-value的数据结构,内部使用散列表hash实现。 Map是引用类型,声明时是nil,必须初始化才能使用。 map[keytype]valuetype map类型变量默认初始值是nil,需要使用make()函数进行初始化 make(map[keytype]valuetype, [cap]) map声明和初始化 func main() { //声明 var a map[string]int fmt.Println(a == nil) //true //初始化,容量可以写,建议编程时候加上 a = make(map[string]int, 10) fmt.Println(a == nil) //false // 声明map并初始化 b := map[int]strin...阅读全文

博文 2020-05-21 23:32:46 Cici冬雪

Go语言的数据类型

## 1 概述 Go语言作为类C语言,支持常规的基础数据类型的的同时,支持常用的高级数据类型。他们是: * 整数,int,uint,int8,uint8,int16,uint16,int32,uint32,int64,uint64 * 浮点(小数),float32,float64 * 复数,complex * 字符,byte,rune * 字符串,string * 布尔,bool * 指针,pointor * 数组,array * nil * 切片,slice。(引用类型) * 映射,map * 结构体,struct * 接口,interface * 函数,func() 本篇相当于一个类型索引。包含了Go语言中的全部类型。具体每种类型的操作,请参见具体章节! ## 2 整数,int 支持的整...阅读全文

博文 2018-10-30 22:01:19 hanzkering

Go36-14-接口

接口 通过关键字type和interface,我们可以声明出接口类型。接口类型的类型字面量与结构体类型的看起来有些相似,它们都用花括号包裹一些核心信息。只不过,结构体类型包裹的是它的字段声明,而接口类型包裹的是它的方法定义。 实现接口 接口类型声明中的这些方法所代表的就是该接口的方法集合。一个接口的方法集合就是它的全部特征。对于任何数据类型,只要它的方法集合中完全包含了一个接口的全部特征(即全部的方法),那么它就一定是这个接口的实现类型: type Pet interface { SetName(name string) Name() string Category() string } 这里声明了一个接口类型Pet,它包含3个方法定义。这3个方法共同组成了接口类型Pet的方法集合。只要一个...阅读全文

博文 2019-01-10 12:35:09 骑士救兵

golang-101-hacks(20)——接口

接口是由若干方法组成的引用类型,包含了接口的所有方法的类型被认为自动实现了该接口类。通过接口,您可以更加体会到面向对象编程。如下所示: package main import "fmt" type Foo interface { foo() } type A struct { } func (a A) foo() { fmt.Println("A foo") } func (a A) bar() { fmt.Println("A bar") } func callFoo(f Foo) { f.foo() } func main() { var a A callFoo(a) } 运行结果如下 A foo 让我们具体分析一下代码 type Foo interface { foo() } 上面的接...阅读全文

博文 2019-06-21 23:32:44 羊羽shine

windows环境下,VS Code配置GO语言开发环境

前言 部门内部使用微服务用到猪齿鱼框架,可是猪齿鱼很多组件都用到了GO语言,想看懂最起码需要学习一下语法。于是,GO语言学习之旅开始了。 先用菜鸟教程学习了语法什么的,大概的练练手。 因为要看源码,看人家的项目,于是需要有个编辑器看着方便,我们用的vsCode,所以就要在VSCode中配置GO语言开发环境 好吧,还是需要借助一下搜索引擎 前置 1.Golang环境配置 GO语言环境安装包下载地址:https://golang.google.cn/dl/选择windows,如下图安装完成后需要配置环境变量,主要有三个地方需要配置。用户变量中的GOPATH,系统环境变量中的GOROOT与Path,具体解释 GOPATH GO语言的工作空间,可以自己随便建一个文件夹就行 例如我的就是D:Go_Wo...阅读全文

博文 2019-10-17 10:02:48 liuxliang

30分钟学会Objective-C

什么是Objective-CObjective-C,简称OC,是一种通用、高级、面向对象的编程语言。它扩展了标准的ANSI C编程语言,将Smalltalk式的消息传递机制加入到ANSI C中。当前主要支持的编译器有GCC和Clang(采用LLVM作为后端)。Objective-C的商标权属于苹果公司,苹果公司也是这个编程语言的主要开发者。苹果在开发NeXTSTEP操作系统时使用了Objective-C,之后被OS X和iOS继承下来。现在Objective-C与Swift是OS X和iOS操作系统、及与其相关的API、Cocoa和Cocoa Touch的主要编程语言。Objective-C是C语言的严格超集。这意味着任何C语言程序不经修改就可以直接通过Objective-C编译器,在Obj...阅读全文

博文 2020-03-08 00:32:59 慢慢来比较

Go总结(2)

struct go中struct结构默认字段都会有零值,故不能用nil来判断struct是否为空,可通过额外的字段来判断struct是否填充或为空 type Demo struct{ ready bool name string //其他字段 } 在初始化的时候必须将ready设置为true var d Demo if !d.ready{ //do stuff } Web工作方式 Go通过ListenAndServer来建立web服务器,底层是初始化一个server对象,然后调用net.Listen("tcp",addr)来监听端口。 调用srv.server(net.Listener)函数来处理接收客户端请求。函数里面为一个for{},首先通过accept接受请求,接着创建一个Conn,最...阅读全文

博文 2019-01-22 18:34:42 dack

闭包,sync使用细节

代码 先看代码如下: func main() { var a []int for i := 0; i < 100; i++ { go func() { a = append(a, i) }() } time.Sleep(2 * time.Second) fmt.Println(a) } 这段测试代码是想要一个元素为0到100的切片,但是这一小段代码隐藏了很多的问题。 闭包函数 先看这段代码的执行结果: [10 12 13 13 13 13 21 24 25 28 28 28 28 28 28 29 29 29 36 38 39 39 40 41 41 41 41 41 41 45 45 45 45 46 47 48 49 50 51 52 61 61 61 61 61 61 61 61 61...阅读全文

博文 2019-02-20 11:34:42 estu

go 学习笔记之环境搭建

千里之行始于足下,开始 Go 语言学习之旅前,首先要搭建好本地开发环境,然后就可以放心大胆瞎折腾了. Go 的环境安装和其他语言安装没什么特别注意之处,下载安装包下一步下一步直到完成,可能唯一需要注意的就是 $GOPATH 环境变量的设置问题. 不过,简单起见,目前采用默认配置,等到比较熟悉 Go 语言时候再自定义设置也不迟,因此采用喜闻乐见的傻瓜式安装方式吧! go-base-setup-index.png Go 下载安装 由于众所周知的原因,谷歌被墙,因此 Go 的国外官网无法访问,好在已提供 Go 的中国官网可以正常访问. go-base-setup-website.png 国外官网: https://golang.org/ 国内官网: https://golang.google.cn...阅读全文

博文 2019-08-01 20:33:52 雪之梦技术驿站

Go语言开发环境搭建-Vs Code

一.下载Go并配置环境变量https://studygolang.com/dl下载需要的版本,这里暂时只赘述windows,虚拟机的还没有去尝试,日后有机会,会再补一篇文章。配置GOROOT: 这里是本地安装路径配置GOPATH:这里是工作路径->GOPATH目录约定有三个子目录:->src 存放源代码(比如:.go .c .h .s等)->pkg 编译后生成的文件(比如:.a)->bin 编译后生成的可执行文件(为了方便,可以把此目录加入到 windows的PATH变量中,在环境变量path后追加%GOPATH%\bin,此举是为了保证在安装第三方工具时能正常使用)*D:\Go\bin在go安装完成后会自动拼接到path上,没有则需要自行输入*如果go项目有多个目录, 且都采用该目录,则用...阅读全文

博文 2019-08-08 22:33:00 Caesar_fbc8

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

声明:本文内容纯属博主自己查找和归纳的个人所需的知识点,仅作参考,如有错误,博主强烈希望您指出。如果您是某个知识点的原创博主,如有需要,可联系本人加上链接。本文内容会根据博主所需进行更新,希望大家多多关照。 面向对象 把数据及对数据的操作方法放在一起,作为一个相互依存的整体 OOP——面向对象的编程,OOD——面向对象的设计,OOA——面向对象的分析 三大特征: 1.封装 将对象的属性和方法封装到一个独立单元中,并且隐藏对象的属性和方法,仅对外提供公共访问方式,将变化隔离,便于使用。 2.继承 继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法。继承是多态的前提。 3.多态 多态是面向对象的最后一个主要特征,它本身主要分为两个方面: 方法的多态性:重载与覆写 重载:...阅读全文

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

golang-101-hacks(22)——Types

注:本文是对golang-101-hacks中文翻译 Go语言中的数据类型可分为两类:已命名和未命名。除了预先已声明的类型(如“int”、“rune”等),还可以自己定义命名类型。例如: type mySlice []int 未命名类型由文字类型定义。即, []int是一个未命名的类型。 根据Go spec,每种类型都有一个底层类型: Unnamed types are defined by type literal. I.e., []int is an unnamed type. According to Go spec, there is an underlying type of every type: 每个类型T都有一个底层类型:如果T是预先声明的布尔型、数值型、字符串型或文字型中的...阅读全文

博文 2019-06-27 00:32:44 羊羽shine

defer 的一些用法和猜测

以前的代码中,基本上只使用了 defer 作为防御程序 panic 退出的手段,没有仔细考虑过对返回值的影响。今天有同事提到: 如果执行过程中发生 panic,defer函数 recover() != nil的情况下,未命名的返回值的函数会返回什么呢? 之前并没有没有想过这个问题,猜想应该是返回该类型的默认值,试了一下果然如此。 func fooA() float64 { defer func() { if err := recover(); err != nil { } }() *(*float64)(nil) = 0.1 // panic return 1.0 } fooA() 返回0。 那么如果 defer 函数返回值和上层函数一致,会不会替换掉返回值呢?(会就有鬼了) func fo...阅读全文

博文 2019-09-03 20:32:43 秦川

Golang(四)语言特性(上)

Golang是一种强类型的通用系统编程语言,具有垃圾回收机制并明确支持并发编程。go程序由包构成,这允许对依赖关系进行高效的管理;它的语法规则且紧凑,允许通过诸如集成开发环境之类的自动化工具进行简单的分析.......都是关于Golang语言特性的一些总结,本文将结合官方文档对Golang的语言特性进行一一阐述 记法 使用扩展的Backus-Naur格式(EBNF)指定语法格式,形如 Production = production_name "=" [ Expression ] "." . Expression = Alternative { "|" Alternative } . Alternative = Term { Term } . Term = production_name | ...阅读全文

博文 2019-10-12 01:32:43 aside section ._1OhGeD

Golang系列之Go语言入门(一)

序列-Go语言来源 Golang是一门年轻而有活力的语言,2007年Robert、Rob和Ken 在Google开发,于2009年正式发布; Go语言的初衷:作者们希望能使复杂的、高效系统的编写变得简单、可靠;同时也期望Go能成为一个相对通用的编程环境,推崇少即是多的概念、 Go编程语言(或称--golang),是云计算时代下的C语言,Docker、Kubernetes、Etcd等都是由Golang完成的,经过数年不断的改进,Go语言本身在开发效率和程序运行效率方面又提升了无数个台阶。 Go语言环境搭建 part 1. Win下面环境搭建 : 下载golang,选择windows的版本 ,下载地址 https://studygolang.com/dl 下载完成后,解压到本地目录,然后配置环境...阅读全文

1. 介绍与安装

1. 介绍与安装 Golang 是什么 Go 亦称为 Golang(按照 Rob Pike 说法,语言叫做 Go,Golang 只是官方网站的网址),是由谷歌开发的一个开源的编译型的静态语言。 Golang 的主要关注点是使得高可用性和可扩展性的 Web 应用的开发变得简便容易。(Go 的定位是系统编程语言,只是对 Web 开发支持较好) 为何选择 Golang 既然有很多其他编程语言可以做同样的工作,如 Python,Ruby,Nodejs 等,为什么要选择 Golang 作为服务端编程语言? 以下是我使用 Go 语言时发现的一些优点: 并发是语言的一部分(并非通过标准库实现),所以编写多线程程序会是一件很容易的事。后续教程将会讨论到,并发是通过 Goroutines 和 channels...阅读全文

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

【Golang之路】Golang初识 开启之路

对于该专栏文章,都是自己的学习文章记录,如果有文章的错误理解之处,也欢迎大家直接指出,也很高兴和大家一起学习进步。 Go语言简介 Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。 Go语言(简称Golang)是云计算时代的C语言,Go的诞生能够使得程序员有更高的生产效率,Go语言专门针对多处理器系统应用程序的编程进行优化,使用Go编译的程序可以和C或C++代码的速度。而且更加安全,支持并行进程。 Go语言就是在C/C++和python之间架起了桥梁,提供了了很快的执行速度,可快速开发,使...阅读全文

博文 2019-07-07 19:33:11 IT阳光罗诺

golang碎片整理之反射

本文介绍go语言反射的意义和基本使用。 变量的内在机制 go语言中的变量是分为两部分的: 类型信息:预先定义好的元信息 值信息:程序运行过程中可动态变化的。 反射的介绍 反射是指在程序运行期对程序本身进行访问和修改的能力。程序在编译时,变量被转换为内存地址,变量名不会被编译器写入到可执行部分。在运行程序时,程序无法获取自身的信息。支持反射的语言可以在程序编译期将变量的反射信息,如字段名称,类型信息、结构体信息等整合到可执行文件中,并给程序提供接口访问反射信息,这样就可以在程序运行期获取类型的反射信息,并且有能力修改它们。Go程序在运行期使用reflect包访问程序的反射信息。在上一篇博客中我们介绍了空接口。空接口可以存储任意类型的变量,那我们如何知道这个空接口保存的数据是什么呢?反射就是在运...阅读全文

博文 2019-07-07 22:03:13 霍帅兵

Go 译文之如何使用反射

作者:Jon Bodner | 地址:Learning to Use Go Reflection 什么是反射 多数情况下,Go 中的变量、类型和函数的使用都是非常简单的。 当你需要一个类型,定义如下: type Foo struct { A int B string } 当你需要一个变量,定义如下: var x Foo 当你需要一个函数,定义如下: func DoSomething(f Foo) { fmt.Println(f.A, f.B) } 但有时候,你想使用的变量依赖于运行时信息,它们在编程时并不存在。比如数据来源于文件,或来源于网络,你想把它映射到一个变量,而它们可能是不同的类型。在这类场景下,你就需要用到反射。反射让你可以在运行时检查类型,创建、更新、检查变量以及组织结构。 Go...阅读全文

博文 2019-08-18 17:02:38 波罗学

Go 每日一库之 flag

缘起 我一直在想,有什么方式可以让人比较轻易地保持每日学习,持续输出的状态。写博客是一种方式,但不是每天都有想写的,值得写的东西。 有时候一个技术比较复杂,写博客的时候经常会写着写着发现自己的理解有偏差,或者细节还没有完全掌握,要去查资料,了解了之后又继续写,如此反复。 这样会导致一篇博客的耗时过长。 我在每天浏览思否、掘金和Github的过程中,发现一些比较好的想法,有JS 每日一题,NodeJS 每日一库,每天一道面试题等等等等。 github.com/parro-it/aw…这个仓库收集 NodeJS 小型库,一天看一个不是梦!这也是我这个系列的灵感。 我计划每天学习一个 Go 语言的库,输出一篇介绍型的博文。每天一库当然是理想状态,我心中的预期是一周 3-5 个。 今天是第一天,我们...阅读全文

博文 2020-01-13 11:34:22 darjun

1.go安装

本小结介绍如何安装和使用golang 开始之前 开始之前先介绍几个概念1.go语言的环境变量我们只介绍GOROOT和GOPATH GOROOT golang 的安装路径,当你安装好golang之后其实这个就已经有了 GOPATH go命令依赖的一个重要环境变量:$GOPATH 可以把这个目录理解为工作目录 -- bin // golang编译可执行文件存放路径 -- pkg // golang编译包时,生成的.a文件存放路径 -- src // 源码路径。按照golang默认约定,go run,go install等命令的当前工作路径(即在此路径下执行上述命令)。 2.go语言的常用命令这里只介绍三个我们用到的命令 go run 编译并直接运行程序,它会产生一个临时文件(但不会生成 .exe...阅读全文

博文 2019-02-21 15:36:22 wz669

Go入门系列(一)伊始

欢迎来到Golang入门系列,说起这个系列出现的缘由,1、Golang的潜力无疑;2、笔者希望把所有有价值的主流语言全学一遍。 首先,我们来明确下定位,Go始于07年,在09年开源,官方团队来自Google。 然后是最耐人寻味的一点,它是一门面向对象的or面向过程的语言? Yes and no. Although Go has types and methods and allows an object-oriented style of programming, there is no type hierarchy. The concept of “interface” in Go provides a different approach that we believe is easy ...阅读全文

博文 2020-02-24 21:32:58 RabbitMask

Go语言学习 Day 02

Go语言学习 [TOC] Day 02 官方文档补充 格式化 - tab缩进 注释 - 单行// - 多行/*..*/ 命名 - 包名:小写字母命名,不应使用下划线或驼峰记法。 - 接口名 - 只包含一个方法的接口应当以该方法的名称加上 - er 后缀来命名,如 Reader、Writer、 Formatter、CloseNotifier 等 - 驼峰记法:Go 中约定使用驼峰记法 MixedCaps 或 mixedCaps 而非下划线的方式来对多单词名称进行命名 分号 Go语言使用分号结尾,但词法分析器会使用一条简单的规则来自动插入分号,代码中不必写分号。 如果新行前的标记为语句的末尾,则插入分号. if i < f() // wrong! { // wrong! 此处词法分析器会插入分号...阅读全文

博文 2019-08-29 17:34:45 右左君

Golang新手笔记

前言: 最近在学习golang,简单记录归纳了一些常用的语法,希望能够对小白选手有所帮助。 一、25个关键字 break default function interface select case defer go map struct chan else goto package switch const fallthrough if range type continue for import return var 二、变量 var vname type=value //标准定义 var vname1,vname2,vname3 type=v1,v2,v3 var vname1,vname2,vname3 =v1,v2,v3 //简化 vname1,vname2,vname3 :=v1...阅读全文

博文 2019-10-12 20:32:44 aside section ._1OhGeD

Go基础系列:Go中的方法

Go方法简介 Go中的struct结构类似于面向对象中的类。面向对象中,除了成员变量还有方法。 Go中也有方法,它是一种特殊的函数,定义于struct之上(与struct关联、绑定),被称为struct的receiver。 它的定义方式大致如下: type mytype struct{} func (recv mytype) my_method(para) return_type {} func (recv *mytype) my_method(para) return_type {} 这表示my_method()函数是绑定在mytype这个struct type上的,是与之关联的,是独属于mytype的。所以,此函数称为"方法"。所以,方法和字段一样,也是struct类型的一种属性。 其中...阅读全文

博文 2018-11-23 09:11:26 f-ck-need-u

GoLang variables

变量命名 命名方法 var name type是定义单一变量的语法 package main import "fmt" func main(){ var age int //variable declaration fmt.Println("My age is",age) } 该语句中var age int声明了一个名为age的int类型变量. 但是并没有进行赋值, 这种情况下该类行变量被赋予0为他的初始值. 输出: my age is 0 一个变量可以被分配任意该类型的值. 该程序中的age变量可以被赋予一个任意的integer value package main import "fmt" func main(){ var age int //variable declaration f...阅读全文

博文 2019-07-08 21:32:39 Cease息事

《Go 语言程序设计》读书笔记 (五) 协程与通道

Goroutines 在Go语言中,每一个并发的执行单元叫作goroutine。设想一个程序中有两个函数,假设两个函数没有相互之间的调用关系。一个线性的程序会先调用其中的一个函数,然后再调用另一个。如果程序中包含多个goroutine,对两个函数的调用则可能发生在同一时刻。 当一个程序启动时,其main函数即在一个单独的goroutine中运行,我们叫它main goroutine。新的goroutine会用go语句来创建。在语法上,go语句是在一个普通的函数或方法调用前加上关键字go。go语句会使其语句中的函数在一个新创建的goroutine中运行。而go语句本身会迅速地完成。 f() // call f(); wait for it to return go f() // create ...阅读全文

博文 2020-01-01 12:32:37 Kevin

A Tour of Go: Basics 1

Packages, variables and functions Packages packages中,以大写字母开头的name是exported name,当import package时,只有exported name可以被从外部访问。 Functions 同type的连续参数可以只在最后指明type。函数可以有多个返回值。 func swap(x, y string) (string, string) { return y, x } Go支持有name的返回值: 函数定义时就定义好返回变量名,在函数内操作返回变量。 用naked return语句返回。 func split(sum int) (x, y int) { x = sum * 4 / 9 y = sum - x retur...阅读全文

博文 2018-10-07 17:35:15 zxdevops

07GO语言函数

go语言函数 1、函数定义 2、参数 3、返回值 4、匿名函数 5、闭包 6、递归 7、延迟调用 8、错误处理 函数特性: Go 函数 不支持 嵌套、重载和默认参数 函数无需声明原型、支持不定长度变参、多返回值、命名返回值参数 支持匿名函数、闭包 函数也可以作为一种类型使用 函数是一等公民,可作为参数传递 函数传递是值的拷贝或者是指针的拷贝,区别在于会不会影响原始值 不定长变参,如果传入slice,一定要用 ...展开传入 1、函数定义 定义函数使用关键字 func,且左大括号不能另起一行 func A(a int,b string) int{ // 参数 a, b 名在前,类型在后 // 如果只有一个返回值,直接写个int就行。表示返回值是一个int型 } func A(a int,b s...阅读全文

博文 2019-03-01 16:34:45 杨旭

GoLang 学习笔记 - 基本数据类型

GoLang 的数据类型   在 GoLang 中,数据类型用于声明函数和变量。数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要用大数据的时候才需要申请大内存,就可以充分利用内存。   GoLang 有以下几种数据类型: 类型 描述 布尔 基本数据类型,只有两个值,并且只可以是常量 —— true 或者 false。 数值 基本数据类型,GoLang 支持整型、浮点型数字,并且支持复数,其中位的运算采用补码。 字符串 基本数据类型,GoLang 中 string 类型被官方定为基本数据类型,是一串由单个字节连接起来的字符序列。GoLang 字符串的字节使用 UTF-8 编码标识 Unicode 文本。 派生 派生类型包括很多种,其中有:指针、数组、结构体、管道、切片、接口...阅读全文

博文 2019-07-20 20:32:39 凉丶心园

golang 系列教程(三)—— 语法介绍

概要 本章介绍golang基本的语法。golang语法相对来说比较简单,掌握本章内容即可满足语法方面的基本开发需要。 局部变量定义 func test1() { var a int // 定义临时变量a } 复制代码全局变量定义 var a int // 定义全局变量a 复制代码变量初始化 var b string = "apache" //数组初始化 var strAry = [10]string{"aa", "bb", "cc", "dd", "ee"} //切片初始化 var s = make([]string, 0) //字典初始化 var m = map[string]int{ "apple":1, "watermeter":2, } 复制代码条件选择 var a string =...阅读全文

博文 2019-08-18 03:04:19 叶不闻

Go 每日一库之 go-homedir

简介 今天我们来看一个很小,很实用的库go-homedir。顾名思义,go-homedir用来获取用户的主目录。 实际上,使用标准库os/user我们也可以得到这个信息: package main import ( "fmt" "log" "os/user" ) func main() { u, err := user.Current() if err != nil { log.Fatal(err) } fmt.Println("Home dir:", u.HomeDir) } 复制代码那么为什么还要go-homedir库? 在 Darwin 系统上,标准库os/user的使用需要 cgo。所以,任何使用os/user的代码都不能交叉编译。 但是,大多数人使用os/user的目的仅仅只是想获...阅读全文

golang 源码剖析(7): 延迟defer

简介 延迟调用(defer)的优势是: 即使函数执行出错,依然能保证回收资源等操作得以执行 可以在变量的定义处加入defer,代码结构上避免忘记做某些数据的回收 劣势: 性能上会会比直接调用慢一些 如果在defer中释放,相对来说只会在函数执行结束的时候才会调用,变量生命周期会变长. 定义 编写以下程序, dump出汇编. defer主要调用了一下两个函数func deferprocStack(d *_defer)和func deferreturn(arg0 uintptr) package main import ( "fmt" ) func main() { defer fmt.Println(0x11) } (base) ➜ readsrc go tool objdump -s "ma...阅读全文

博文 2020-03-08 17:32:42 darcyaf

go 的介绍与安装

1. 介绍与安装 Golang 是什么 Go 亦称为 Golang(按照 Rob Pike 说法,语言叫做 Go,Golang 只是官方网站的网址),是由谷歌开发的一个开源的编译型的静态语言。 Golang 的主要关注点是使得高可用性和可扩展性的 Web 应用的开发变得简便容易。(Go 的定位是系统编程语言,只是对 Web 开发支持较好) 为何选择 Golang 既然有很多其他编程语言可以做同样的工作,如 Python,Ruby,Nodejs 等,为什么要选择 Golang 作为服务端编程语言? 以下是我使用 Go 语言时发现的一些优点: 并发是语言的一部分(并非通过标准库实现),所以编写多线程程序会是一件很容易的事。后续教程将会讨论到,并发是通过 Goroutines 和 channels...阅读全文

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

如何才能写出正确的程序?

平时我们写程序的时候,总是莫名其妙的出现Bug,一鼓作气的写完一个接口后,经常被队友喷「你怎么一回事?结果与预期不一致啊」 老脸一红,然后一个人藏在角落调试半天,才发现原来是某一个边界条件没处理好,导致Bug重重,今天我们从二分查找算法,来聊聊如何写出正确的程序 像我们熟知的二分查找算法,在1946年就被提出来了,但是到了1962年才出现了完全没有Bug的二分查找法 二分查找法的思想并不复杂,我们很多人张口就能来,但是为什么间隔了辣么多年,才诞生完全没有Bug的二分查找算法呢? 二分查找算法,难就难在边界条件的处理上,我们经常写出Bug,往往也是出现在边界条件没处理好而导致 因为学习一个算法的思想是很简单的,但是让思想落地,写出完全没有Bug的二分查找,却并不是一件容易的事情 所以我们在写程...阅读全文

博文 2019-06-08 23:32:43 闹闹吃鱼

Golang笔记

--[切片和数组]-- 切片本质上是一组指向数组特定片段的指针,所以切片不可能单独存在,即使直接make一个切片,其背后也隐藏着一个数组来实际存储数据。var a [2]int //定义的是一个2长度的数组var b []int //定义的是一个切片b=a //这个赋值在语法上是不成立的var matrixA [][2]inta=matrixA[0] //因为是数组的拷贝,这里进行值拷贝,a和matrixA互不影响var matrixB [][]intb = matrixB[0] 因为是切片的拷贝,这里只是一个指针引用,修改数组中的值会影响b--[异常机制 defer]--defer func example() {***}这里example函数无论写在父函数的什么位置,都只会在发生异常或者...阅读全文

Go 命令行解析 flag 包之扩展新类型

上篇文章 说到,除布尔类型 Flag,flag 支持的还有整型(int、int64、uint、uint64)、浮点型(float64)、字符串(string)和时长(duration)。 flag 内置支持能满足大部分的需求,但某些场景,需要自定义解析规则。一个优秀的库肯定要支持扩展的。本文将介绍如何为 flag 扩展一个新的类型支持? 扩展目标 在 gvg 这个小工具中,list 子命令支持获取 Go 的版本列表。但版本的信息来源有多处,比如 installed(已安装)、local(本地仓库)和 remote(远程仓库)。 查看下 list 的帮助信息,如下: NAME: gvg list - list go versions USAGE: gvg list [command optio...阅读全文

博文 2019-11-25 15:04:42 波罗学

Golang package sync 剖析(二): sync.WaitGroup

一、前言 Go语言在设计上对同步(Synchronization,数据同步和线程同步)提供大量的支持,比如 goroutine和channel同步原语,库层面有 - sync:提供基本的同步原语(比如Mutex、RWMutex、Locker)和 工具类(Once、WaitGroup、Cond、Pool、Map) - sync/atomic:提供变量的原子操作(基于硬件指令 compare-and-swap) -- 引用自《Golang package sync 剖析(一): sync.Once》 上一期中,我们介绍了 sync.Once 如何保障 exactly once 语义,本期文章我们介绍 package sync 下的另一个工具类:sync.WaitGroup。 二、为什么需要 Wa...阅读全文

博文 2020-01-28 14:32:39 oscarzhao

Golang——数组array

数组是同一种数据类型元素的集合。 数组声明时需要确定数组大小,一旦定义,不可修改。 数组的长度必须是常量,并且长度是数据类型的一部分。[5]int和[3]int是不同的类型。 数组索引从0开始。 数组是值类型。 var 变量名 [数量]T 声明和初始化 func main() { //数组声明 var a [5]int var b [3]int //数组赋值 a = [5]int{1,2,3,4,5} b = [3]int{1} fmt.Println(a) //[1 2 3 4 5] fmt.Println(b) //[1 0 0] fmt.Printf("a:%T b:%T\n", a, b) //a:[5]int b:[3]int //数组声明又赋值 var c = [3]string...阅读全文

博文 2020-05-22 11:33:59 Cici冬雪

Golang Tips

Go的数组只能有固定的长度,传入变量作为数组长度时,只能创建为定义了size的切片 length := 5 array := [length]int // error: non-constant array bound length array := make([]int, length) Go没有内置的比较整数大笑的方法,需要自己实现 func max(a int, b int) int { if a >= b { return a } else { return b } } Go没有内置的判断array或map是否存在某一个元素的方法,需要通过判断普通的get的error实现 // implement array/list contains func contains(array []i...阅读全文

博文 2020-05-16 02:32:43 Lyudmilalala