指针
Go也有指针
·
p := 2 pInt := &p //定义一个指针变量,赋值为变量p的地址,编译器可以自动识别 fmt.Printf("p=%d\tpInt=%p\n",p,pInt) *pInt = 123445 fmt.Printf("p=%d\tpInt=%p\n",p,pInt) 输出 p=2 pInt=0x12060140 p=123445 pInt=0x12060140
函数在前面说过了,这里说一下函数的调用
不定参数
不定参数是指函数传入的参数个数为不定数量 首先需要将函数定义成接受不定参数类型 func myFunc(args ...int){ for _,arg:= range args{ fmt.Println(arg) } } 或者为 func myFunc(args []int){ ........... } 如果想不限定传递参数的类型,可以指定interface{} 如Go语言标准库中的fmt.Printf()函数 func Printf(format string,args ...interface{}){ //.... }
函数返回多个值
Go语言也提供了像Python一样返回多个值语法,一般来说Go中很多package都返回两个值,一个是正常期望返回的值,一个是错误error.
比如File.Read()函数可以同时返回读取的字节数和错误信息 func (file *File)Read(b []byte)(n int,err Error)
匿名函数
匿名函数指的是不需要定义函数名的一种函数实现方式
f := func (a,b int,z float64) bool{ return a*b < int(z) } 可以赋给一个变量或者直接执行
闭包
闭包是可以包含自由(未绑定到特定对象)变量的代码块,这些变量不在这个代码块内或者任何全局上下文中定义,而是在定义代码块的环境中定义。要执行的代码块(由于自由变量包含在代码块中,所以这些自由变量以及他们引用的对象,没有被释放)为自由变量提供绑定的计算环境(作用域)。
package main import "fmt" func main(){ var j int = 5 a := func()(func()){ var i int = 10 return func(){ fmt.Println("i, j: %d\n",i ,j) } }() a() j*=2 a() } 输出 i, j: 10,5 i, j: 10,10
错误处理
Go中引入了一个错误处理的标准模式,error接口
type error interface{ Error() string }
在Go中大多函数,如果要返回错误,大致上都可以定义为如下模式,将error作为多种返回值中的最后一个,当然这个并非是强制要求(怎么看都有点javascript的感觉,哈哈)。
func myFunc(param string)(str string,err error){ //... } 调用时的代码 n, err := myFunc("") if err := nil { //... }else{ //... } 那如何应用到实际中呢? 在Go中,接口的实现,根本不需要明确类型和接口之间的关系 type myError struct{ msg string } 要想让编译器知道myError可以当做一个error来处理,这个时候就要去实现Error()方法了 func (e *myError)Error()string{ return e.msg } 例子 func myFunc(name string)(string,error){ if len(name)<10 { return name+" is right",nil }else{ return name+" is not right",&myError("incorrect!") } }
defer
defer的出现简直就是C/C++程序员的福音,在程序中,特别是在调用一个资源的时候,比如数据库连接,但是程序出现异常的地方可能有很多,每一个可能的地方都有一个return的位置,该关闭的可能就没有来得及关闭,使用defer就可以很轻松解决这个问题,而且增加代码的可读性和优雅性。
func CopyFile(dst,src string)(w int64, err error){ srcFile, err := os.Open(src) if err != nil{ return } defer srcFile.CLose() } dstFile,err := os.Create(dst) if err != nil { return } defer dstFile.Close() return io.COpy(dstFile,srcFile) } 即使其中Copy()函数抛出异常,Go仍然会保证dstFile和srcFile被正常关闭。 一个函数里面可以有多个defer,他们按照栈的方式执行,先进后出
panic()和recover()
Go语言引入了两个内置函数panic()和recover()以报告和处理运行时错误和程序中的错误场景。
func panic(interface())
func recover(interface())
当在一个函数执行过程中调用panic()函数时,正常的函数执行流程将立即终止,但函数终止之前使用defer关键字延迟执行的语句将正常展开执行,之后该函数将返回到调用函数,并导致逐层向上执行panic流程,直至所属的goroutine中所有正在执行的函数终止,错误信息将被上报,包括panic()函数传入的参数。
recover()函数用于终止错误处理流程。一般情况下,recover()应该在一个使用defer关键字的函数中执行有效的截取错处理流程。如果没有在发生异常的goroutine中明确调用恢复过程(使用recover()关键字),会导致该goroutine所属的进程打印异常信息后直接退出。
defer func(){ if r := recover(); r !=nil { log.Printf("Runtime error caught: %v", r) } }()
相关推荐
2. 编译型语言:Go 语言使用编译器来编译代码,编译器将源代码编译成二进制(或字节码)格式。 3. 并发型语言:Go 语言提供了强大的并发编程支持,可以轻松地编写高性能的并发程序。 4. 垃圾回收:Go 语言提供了自动...
Go语言,又称为Golang,是由Google开发的一种静态类型的、编译型的、并发型且垃圾回收的编程语言。它设计简洁、效率高,特别适合于编写服务器端和网络应用。Go语言的语法接近C语言,但同时也引入了诸如goroutine(轻...
Go语言,又称为Golang,是由Google公司推出的编程语言。其主要开发者包括肯·汤姆逊(Ken Thompson)、罗布·派克(Rob Pike)和罗伯特·格里泽默(Robert Griesemer)三位业界知名的大师级人物。以下是这三位开发者的简要...
02 Go语言基础(二) 03 GO名库讲解 04 Go语言实战开发一个WEB项目博客系统 05 Go语言深度讲解(推荐 2018年1月更新) 06 Go语言快速入门(2018年2月更新) 07 Go语言协程流量统计(2018年3月更新) 08 Go语言入门到...
### Go语言技术参考手册知识点概览 #### 一、Go语言概述 - **起源与发展**: - **起源**:Go语言由Google公司的Robert Griesemer、Rob Pike及Ken Thompson三位计算机科学家共同设计,旨在解决现代软件开发中的...
Go语言,也称为Golang,是由Google开发的一种静态类型、编译型、并发型且具有垃圾回收功能的编程语言。它设计的目标是提高开发效率,简化并发处理,并提供高效的工具链。 1. **Go语言的特点**: - **简洁的语法**...
- **编译速度和可移植性**:Go语言的编译速度快,且编译出的二进制文件跨平台兼容性好,方便在不同的操作系统上部署。 2. **Saltstack在运维中的作用** - **远程执行和状态管理**:Saltstack允许通过Master节点向...
Go语言,又称Golang,是Google在2009年推出的一种开源编程语言,由罗伯特·格瑞史莫、罗布·派克和肯特·贝克等大神设计。Go语言的设计目标是简单、高效、安全,特别适合构建网络服务和并发程序。它吸收了C语言的...
Go 语言四十二章经
对于不同的操作系统,Go语言提供了相应的二进制文件供用户下载。 **2.2 Go环境变量** 为了正确配置Go开发环境,需要设置一些环境变量,例如`GOROOT`(指定Go语言的安装路径)、`GOPATH`(指定项目的工作目录)等。...
#### 二、Go语言在谷歌的应用与推广 - **内部支持与应用**:Google不仅组建了一个专门的团队负责Go语言的开发工作,还在内部服务中大力推广Go语言的使用,尤其是在其战略产品Google App Engine(GAE)上提供了支持...
知识点二:Go语言的应用场景 Go语言非常适合用于编写高性能的网络服务,如HTTP服务器、数据库、分布式系统等。由于其内存占用小、启动速度快和并发性能优异,Golang在构建Web应用、微服务架构、云基础设施、自动化...
#### 二、Go语言的历史沿革 Go语言的发展可以追溯到1995年的贝尔实验室,当时推出了Plan9系统,随后又发展了Inferno系统及其Limbo语言。2007年,Google的员工开始利用20%的时间研究Go语言,并在2008年将其转为全职...
### Go语言开发手册知识点概述 #### 一、Go语言简介 **Go语言**是由Google公司设计并开源的一种静态强类型编程语言,旨在提高程序的可靠性和效率。它结合了多种现代编程语言的优点,如简洁性、高效性以及易用性等...
Go语言(又称Golang)是一种静态类型的编程语言,由Google工程师Robert Griesemer、Rob Pike及Ken Thompson在2007年开始设计并开发,于2009年正式发布。它被设计成一种简洁、高效且易于学习的语言,旨在解决现代软件...
Go语言,又称Golang,是由Google推出的一种静态类型、编译型语言,具有简洁、快速、安全等特点,特别适合用于开发网络服务和并发程序。Go语言的设计兼顾了开发效率和系统性能,它是面向并发的编程语言,提供了轻量级...