什么是函数 函数,简单来讲就是一段将输入数据转换为输出数据的公用代码块.当然有的时候函数的返回值为空,那么就是说输出数据为空.而真正的处理过程在函数内部已经完成了. 想一想我们为什么需要函数,最直接的需求就是代码中有太多的重复代码了,为了代码的可读性和可维护性,将这些重复代码重构为函数也是必要的. 函数定义 Go 语言函数定义格式如下: func function_name( [parameter list] ) [return_types] { 函数体 } 函数定义解析: func:函数由 f…
一.web工作方式 我们平时浏览网页的时候,会打开浏览器,输入网址后按下回车键,然后就会显示出你想要浏览的内容.在这个看似简单的用户行为背后,到底隐藏了些什么呢?对于普通的上网过程,系统其实是这样做的:浏览器本身是一个客户端,当你输入URL的时候,首先浏览器会去请求DNS服务器,通过DNS获取相应的域名对应的IP,然后通过IP地址找到IP对应的服务器后,要求建立TCP连接,等浏览器发送完HTTP Request(请求)包后,服务器接收到请求包之后才开始处理请求包,服务器调用自身服务,返回HTTP…
在 Go 编程语言中,数据类型用于声明函数和变量. 数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要用大数据的时候才需要申请大内存,就可以充分利用内存. Go 语言按类别有以下几种数据类型: 序号 类型和描述 1 布尔型 布尔型的值只可以是常量 true 或者 false.一个简单的例子:var b bool = true. 2 数字类型 整型 int 和浮点型 float32.float64,Go 语言支持整型和浮点型数字,并且支持复数,其中位的运算采用补码. 3 字符串类…
做技术的总是有些拗.这么多年一直在.net的框框里打转转.直到现在市场上.net工作越来越难找,项目越来越老才发现不做出改变不行了.就从学习Go开始吧. Go语言的特点 简洁.快速.安全 并行.有趣.开源 内存管理.数组安全.编译迅速 Go 语言用途 Go 语言被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言. 对于高性能分布式系统领域而言,Go 语言无疑比大多数其它语言有着更高的开发效率.它提供了海量并行的支持,这对于游戏服务端的开发而言是再好不过了.…
介绍 表单是我们平常编写Web应用常用的工具,通过表单我们可以方便的让客户端和服务器进 行数据的交互.对于以前开发过Web的用户来说表单都非常熟悉.表单是一个包含表单元素的区域.表单元素是允许用户在表单中(比如:文本域.下拉列表. 单选框.复选框等等)输入信息的元素.表单使用表单标签(<form>)定义. 1.处理表单的输入 先看一个例子吧. 注意:所有文件要放在src文件夹下在之前文章的代码基础之下,创建一个view文件夹,用来存放界面的代码文件,在view文件中创建一个login.ctpl…
Go天生就是为了支持良好的项目管理体验而设计的. 包 在软件工程的实践中,我们会遇到很多功能重复的代码,比如去除字符串首尾的空格.高质量软件产品的特点就是它的部分代码是可以重用的,比如你不必每次写个函数去去除字符串首尾的空格. 我们上面讲过变量,结构体,接口和函数等,事实上所谓的包,就是把一些用的多的这些变量,结构体,接口和函数等统一放置在一个逻辑块中.并且给它们起一个名字,这个名字就叫做包名. 例如我们上面用的最多的fmt包,这个包提供了很多格式化输出的函数,你可以在自己的代码中引用这个包,来…
一.变量定义 所谓的变量就是一个拥有指定名称和类型的数据存储位置. //看一个例子 package main import ( "fmt" ) func main() { var x string = "hello world" fmt.Println(x) } 变量的定义首先使用var关键字,然后指定变量的名称x,再指定变量的类型string,在本例中,还对变量x进行了赋值,然后在命令行输出该变量.Go这种变量定义的方式和其他的语言有些不同,但是在使用的过程中,你…
Go 标记 Go 程序可以由多个标记组成,可以是关键字,标识符,常量,字符串,符号.比如下面的hello world就是由 6 个标记组成: 行分隔符 在 Go 程序中,一行代表一个语句结束.每个语句不需要像 C 家族中的其它语言一样以分号 ; 结尾,因为这些工作都将由 Go 编译器自动完成. 如果你打算将多个语句写在同一行,它们则必须使用 ; 人为区分,但在实际开发中并不鼓励这种做法. 注释 注释不会被编译,每一个包应该有相关注释. 单行注释是最常见的注释形式,你可以在任何地方使用以 // 开…
Print() 函数将参数列表 a 中的各个参数转换为字符串并写入到标准输出中. 非字符串参数之间会添加空格,返回写入的字节数. func Print(a ...interface{}) (n int, err error) Println() 函数功能类似 Print,只不过最后会添加一个换行符. 所有参数之间会添加空格,返回写入的字节数. func Println(a ...interface{}) (n int, err error) Printf() 函数将参数列表 a 填写到格式字符串…
如果说Go有什么让人一见钟情的特性,那大概就是并行计算了吧. 做个题目 如果我们列出10以下所有能够被3或者5整除的自然数,那么我们得到的是3,5,6和9.这四个数的和是23.那么请计算1000以下(不包括1000)的所有能够被3或者5整除的自然数的和. 这个题目的一个思路就是: (1) 先计算1000以下所有能够被3整除的整数的和A,(2) 然后计算1000以下所有能够被5整除的整数和B,(3) 然后再计算1000以下所有能够被3和5整除的整数和C,(4) 使用A+B-C就得到了最后的结果.…
基本上到这里的时候,就是上了一个台阶了.Go的精华特点即将展开. 结构体定义 上面我们说过Go的指针和C的不同,结构体也是一样的.Go是一门删繁就简的语言,一切令人困惑的特性都必须去掉. 简单来讲,Go提供的结构体就是把使用各种数据类型定义的不同变量组合起来的高级数据类型.闲话不多说,看例子: type Rect struct { width float64 length float64 } 上面我们定义了一个矩形结构体,首先是关键是type表示要定义一个新的数据类型了,然后是新的数据类型名称R…
定义 所谓指针其实你可以把它想像成一个箭头,这个箭头指向(存储)一个变量的地址. 因为这个箭头本身也需要变量来存储,所以也叫做指针变量. Go的指针不支持那些乱七八糟的指针移位.它就表示一个变量的地址.看看这个例子: package main import ( "fmt" ) func main() { var x int var x_ptr *int x = x_ptr = &x fmt.Println(x) fmt.Println(x_ptr) fmt.Println(*x…
在上面的章节里面,我们讲过Go内置的基本数据类型.现在我们来看一下Go内置的高级数据类型,数组,切片和字典. 数组(Array) 数组是一个具有相同数据类型的元素组成的固定长度的有序集合.比如下面的例子 ]int 表示数组x是一个整型数组,而且数值的长度为5. Go提供了几种不同的数组定义方法. 最基本的方式就是使用var关键字来定义,然后依次给元素赋值.对于没有赋值的元素,默认为零值.比如对于整数,零值就是0,浮点数,零值就是0.0,字符串,零值就是””,对象零值就是nil. package…
运算符用于在程序运行时执行数学或逻辑运算. Go 语言内置的运算符有: 算术运算符 关系运算符 逻辑运算符 位运算符 赋值运算符 其他运算符 接下来让我们来详细看看各个运算符的介绍. 算术运算符 下表列出了所有Go语言的算术运算符.假定 A 值为 10,B 值为 20. 运算符 描述 实例 + 相加 A + B 输出结果 30 - 相减 A - B 输出结果 -10 * 相乘 A * B 输出结果 200 / 相除 B / A 输出结果 2 % 求余 B % A 输出结果 0 ++ 自增 A++…
Go语言的控制结构关键字只有if..else if..else ,for 和 switch. 而且在Go中,为了避免格式化战争,对程序结构做了统一的强制的规定.看下下面的例子. 请比较一下A程序和B程序的不同之处 A程序 package main import ( "fmt" ) func main() { fmt.Println("hello world") } B程序 package main import ( "fmt" ) func ma…
golang基础之函数 1.为什么需要函数? 有些相同的代码可能出现多次,如果不进行封装,那么多次写入到程序中,会造成程序冗余,并且可读性降低 2.什么是函数 为完成某些特定功能的程序指令集合称为函数 3.函数分类 内建函数 自定义函数 4.函数的基本用法 基本语法 func  函数名(形参列表) (返回值列表) { //执行语句 return 返回值列表 } 形参列表 表示函数的输入 执行语句 表示函数执行的某功能代码 返回值列表 函数可以有返回值也可以没有返回值,可以返回多个,也可以一个也不…
Golang面向过程编程-函数 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是函数 简单的说函数的作用就是把程序里多次调用的相同的代码部分定义成一份,然后起个名字,所有的调用都只用这个名字就可以了.修改代码时,只需要改变函数体内的代码即可.Go 语言最少有个 main() 函数.你可以通过函数来划分不同功能,逻辑上每个函数执行的是指定的任务.函数声明告诉了编译器函数的名称,返回类型,和参数.Go语言标准库提供了多种可动用的内置的函数. 二.函数的特点 1>.减少重复…
golang strings.Split函数 https://play.studygolang.com/ package main import ( "fmt" "strings" ) func main() { email := "abc@a.com" emailS := strings.Split(email, "@") fmt.Println(emailS) //[abc a.com] s := strings.Spli…
package utils import "fmt" import "strconv" import "strings" var str string = "学golang使我快乐!" // 关于string的常用函数 // 1. len(str) 内建函数,返回字符串长度,按字节,1个汉字3字节 // 2. range []rune(str) 字符串遍历,处理中文问题 func F2() { for _,value := r…
golang的slice支持func.使用func slice要注意func要完整描述入参出参. 如果需要执行一系列类型相同(入参出参格式相同)的函数,可以动态添加到一个slice里面.range slice顺序执行,也可并发执行,构造匿名goroutine,代码如下. package main import ( "fmt" "time" ) func f1(Str string) bool { if len(Str) == 0 { return false } f…
new() 这是一个用来分配内存的内置函数,它的第一个参数是一个类型,不是一个值,它的返回值是一个指向新分配的 t 类型的零值的指针. 在golang的代码定义如下: func new(t Type) *Type strut{} 直接使用struct{} 来初始化strut时,返回的是一个struct类型的值,而不是指针两者是不一样的 golang的new和make主要区别如下: 1.make只能用来分配及初始化类型为slice,map,chan的数据:new可以分配任意类型的数据 2.new分…
golang运行最理想的环境是linux系统中,编译速度和执行速度都比较快,本文是关于golang中的文件操作函数 在golang标准库中os包提供了不依赖平台的借口,但是使用的风格是unix风格的. 函数Openfile是一个可以指定选项(与linux中的文件操作函数的常数是相同的,如O_APPEND),指定的模式如0666等等,打开指定的文件 下面是openfile函数的原型golang代码 func OpenFile(name string, flag int,perm FileMode)…
一.总体内容 1.内置函数.递归函数.闭包 2.数组和切片 3.map数据结构 4.package介绍 一.内置函数 注意:值类型用new来分配内存,引用类型用make来分配内存 1.close:主要用来关闭channel 2.len:用来求长度,比如string.array.slice.map.channel 3.new:用来分配内存,主要用来分配值类型,比如int.struct.浮点型.返回的是指针 代码案例 package main import( "fmt" ) func ma…
Reverse函数,用来反转列表,本例子用golang实现,反转一个slice列表. 因为slice是引用类型,因此直接修改参数的值即可. func myReverse(l []string) { for i:=0; i < int(len(l)/2) ;i++{ li := len(l) - i -1 fmt.Println(i,"<=>",li) l[i],l[li] = l[li],l[i] } } 本函数调用方式: s := []string{"a&…
在Golang中,我们经常碰到要设置一个函数的默认值,或者说我定义了参数值,但是又不想传递值,这个在python或php一类的语言中很好实现,但Golang中好像这种方法又不行.今天在看Grpc源码时,发现了一个方法可以很优雅的实现,叫做 Functional Options Patter.通过定义函数的方式来实现 比如我们以如下的构造函数为例说明下,用这个的好处 func NewClient(address string,timeout,trynums int){} 如果我们要实例化这个函数,…
package main import "fmt" /* squares返回一个匿名函数 * 该匿名函数每次调用返回下一个数的平方 * func name(parameter-list) (result-list) { * body * } */ func squares() func() int { var x int return func() int { x++ return x * x } } func main() { f := squares() //返回函数指针 fmt.…
函数 在go语言中,函数的基本组成为:关键字func.函数名.参数列表.返回值.函数体和返回语句 函数的定义 定义一个最简单的加法函数 func Add(a int,b int)(ret int,err error){ if a < 0 || b < 0{ err = errors.New("这个函数只支持两个非负数的数字相加") return } return a + b,nil } 如果参数列表中若干相邻的参数类型是相同的话,比如上述例子中的a和b,则可以在参数列表中省…
一.函数 Go中函数是一等(first-class)类型.我们可以把函数当作值来传递和使用.Go中的函数可以返回多个结果.  函数类型字面量由关键字func.由圆括号包裹声明列表.空格以及可以由圆括号包裹的结果声明列表组成.其中参数声明列表中的单个参数声明之间是由英文逗号分隔的.每个参数声明由参数名称.空格和参数类型组成.参数声明列表中的参数名称是可以被统一省略的.结果声明列表的编写方式与此相同.结果声明列表中的结果也是可以被省略的,并且在只有一个无名称的结果声明时还可以省略括号.例: func…
在默认情况下,当发生错误(panic)后,程序就会终止运行 如果发生错误后,可以捕获错误,并通知管理人员(邮件或者短信),程序还可以继续运行,这当然无可厚非 errors.New("错误信息"),会返回一个error类型的值,表示一个错误 panic内置函数,接收一个interface()类型的值(也就是任何值都可以)作为参数,可以接收error类型的变量,输出错误信息,并退出程序 GO语言追求简洁优雅,GO语言不类似php支出try catch操作 GO语言中引入的处理方式为:def…
函数:对应操作序列,是程序的基本组成元素. 函数有具名和匿名之分:具名函数一般对应于包级的函数,是匿名函数的一种特例,当匿名函数引用了外部作用域中的变量时就成了闭包函数,闭包函数是函数式编程语言的核心.方法是绑 定到一个具体类型的特殊函数,Go语言中的方法是依托于类型的,必须在编译时静态绑定 接口:定义了方法的集合,这些方法依托于运行时的接口对象,因此接口对应的方法是在运行时动态绑定的. Go程序函数启动顺序的示意图: 要注意的是,在 main.main 函数执行之前所有代码都运行在同一个gor…