首页 文章

    [错误]-第003节:自定义错误

    创建自定义错误可以使用errors包下的New()函数,以及fmt包下的:Errorf()函数。 ``` //errors包: func New(text string) error {} //fmt包: func Errorf(format string, a ...interface{}) error {}COPY 在使用New()函数创建自定义错误之前,让我们了解它是如何实现的。下面提供了错误包中的新功能的实现。 // Package errors implements functions

    作者:RainNight 2021-03-21 所属分类:[Golang]

    [错误]-第004节:panic()和recover()

    Golang中引入两个内置函数panic和recover来触发和终止异常处理流程,同时引入关键字defer来延迟执行defer后面的函数。 一直等到包含defer语句的函数执行完毕时,延迟函数(defer后的函数)才会被执行,而不管包含defer语句的函数是通过return的正常结束,还是由于panic导致的异常结束。你可以在一个函数中执行多条defer语句,它们的执行顺序与声明顺序相反。 当程序运行时,如果遇到引用空指针、下标越界或显式调用panic函数等情况,则先触发panic函数的执行,然

    作者:RainNight 2021-03-21 所属分类:[Golang]

    [错误]-第005节:异常和错误

    ### 1.1 错误处理的正确姿势 --- ### 姿势一:失败的原因只有一个时,不使用error 我们看一个案例: ``` func (self *AgentContext) CheckHostType(host_type string) error { switch host_type { case "virtual_machine": return nil case "bare_metal": return nil } return errors.New("CheckHostType ER

    作者:RainNight 2021-03-21 所属分类:[Golang]

    [包管理]-第001节:Go语言中包的使用

    Go语言使用包(package)这种语法元素来组织源码,所有语法可见性均定义在package这个级别,与Java 、python等语言相比,这算不上什么创新,但与C传统的include相比,则是显得“先进”了许多。 ``` myblog ├── conf │ └── app.conf ├── controllers │ ├── aboutme_controller.go │ ├── add_article_controller.go │ ├── album_controller.go │ ├──

    作者:RainNight 2021-03-22 所属分类:[Golang]

    [包管理]-第002节:init()函数

    下面我们详细的来介绍一下这两个函数:init()、main() 是 go 语言中的保留函数。我们可以在源码中,定义 init() 函数。此函数会在包被导入时执行,例如如果是在 main 中导入包,包中存在 init(),那么 init() 中的代码会在 main() 函数执行前执行,用于初始化包所需要的特定资料。例如: 包源码: ``` src/userPackage/tool.go package userPackage import "fmt" func init() { fmt.Print

    作者:RainNight 2021-03-22 所属分类:[Golang]

    [包管理]-第003节:包的其他注意点

    ### 1、_操作 ---- 如果仅仅需要导入包时执行初始化操作,并不需要使用包内的其他函数,常量等资源。则可以在导入包时,匿名导入。 这个操作经常是让很多人费解的一个操作符,请看下面这个import: ``` import ( "database/sql" _ "github.com/ziutek/mymysql/godrv" ) ``` _操作其实是引入该包,而不直接使用包里面的函数,而是调用了该包里面的init函数。也就是说,使用下划线作为包的别名,会仅仅执行init()。 导入的包的路径

    作者:RainNight 2021-03-22 所属分类:[Golang]

    [包管理]-第004节:time包

    在标准库中,还为我们提供了time包,里面都是关于日期时间的操作,都比较简单。 ### 1、获取时间对象 --- 获取当前时间: ``` func Now() Time // Now returns the current local time. ``` 获取指定时间: ``` func Date(year int, month Month, day, hour, min, sec, nsec int, loc *Location) Time /* Date returns the Time c

    作者:RainNight 2021-03-22 所属分类:[Golang]

    [IO操作]-第001节:File文件操作

    首先,file类是在os包中的,封装了底层的文件描述符和相关信息,同时封装了Read和Write的实现。 ### 一、FileInfo接口 --- FileInfo接口中定义了File信息相关的方法。 ``` type FileInfo interface { Name() string // base name of the file 文件名.扩展名 aa.txt Size() int64 // 文件大小,字节数 12540 Mode() FileMode // 文件权限 -rw-rw-rw-

    作者:RainNight 2021-03-22 所属分类:[Golang]

    [IO操作]-第002节:I/O操作

    I/O操作也叫输入输出操作。其中I是指Input,O是指Output,用于读或者写数据的,有些语言中也叫流操作,是指数据通信的通道。 Golang 标准库对 IO 的抽象非常精巧,各个组件可以随意组合,可以作为接口设计的典范。 ### 一、io包 --- io包中提供I/O原始操作的一系列接口。它主要包装了一些已有的实现,如 os 包中的那些,并将这些抽象成为实用性的功能和一些其他相关的接口。 由于这些接口和原始的操作以不同的实现包装了低级操作,客户不应假定它们对于并行执行是安全的。 在io包中

    作者:RainNight 2021-03-22 所属分类:[Golang]

    [IO操作]-第003节:I/O写操作

    ### 一、io包中的write --- Writer接口的定义,Write()方法用于写出数据。 ``` type Writer interface { Write(p []byte) (n int, err error) } ``` Write 将 len(p) 个字节从 p 中写入到基本数据流中。它返回从 p 中被写入的字节数n(0 <= n <= len(p))以及任何遇到的引起写入提前停止的错误。若 Write 返回的n < len(p),它就必须返回一个非nil的错误。Write 不

    作者:RainNight 2021-03-22 所属分类:[Golang]

    [golang]-Slice底层实现

    ## 1. Slice底层实现 本章不属于基础部分但是面试经常会问到建议学学 切片是 Go 中的一种基本的数据结构,使用这种结构可以用来管理数据集合。切片的设计想法是由动态数组概念而来,为了开发者可以更加方便的使一个数据结构可以自动增加和减少。但是切片本身并不是动态数据或者数组指针。切片常见的操作有 reslice、append、copy。与此同时,切片还具有可索引,可迭代的优秀特性。 ### 1.1.1. 切片和数组 ![file](/static/upload/bigpic/20210323

    作者:RainNight 2021-03-22 所属分类:[Golang]

    [IO操作]-第004节:文件复制

    在io包中主要是操作流的一些方法,今天主要学习一下copy。就是把一个文件复制到另一个目录下。 它的原理就是通过程序,从源文件读取文件中的数据,在写出到目标文件里。 ### 一、方法一:io包下的Read()和Write()方法实现 --- 我们可以通过io包下的Read()和Write()方法,边读边写,就能够实现文件的复制。这个方法是按块读取文件,块的大小也会影响到程序的性能。 ``` } /* 该函数的功能:实现文件的拷贝,返回值是拷贝的总数量(字节),错误 */ func copyFil

    作者:RainNight 2021-03-23 所属分类:[Golang]

    [IO操作]-第005节:断点续传

    ### 一、Seeker接口 --- Seeker是包装基本Seek方法的接口。 ``` type Seeker interface { Seek(offset int64, whence int) (int64, error) } ``` seek(offset,whence),设置指针光标的位置,随机读写文件: ​ 第一个参数:偏移量 ​ 第二个参数:如何设置 ​ 0:seekStart表示相对于文件开始, ​ 1:seekCurrent表示相对于当前偏移量, ​ 2:seek end表示相

    作者:RainNight 2021-03-23 所属分类:[Golang]

    [IO操作]-第006节:bufio包

    生命不止,继续Go go go。。 Go语言在io操作中,还提供了一个bufio的包,使用这个包可以大幅提高文件读写的效率。 ### 一、bufio包原理 --- bufio 是通过缓冲来提高效率。 io操作本身的效率并不低,低的是频繁的访问本地磁盘的文件。所以bufio就提供了缓冲区(分配一块内存),读和写都先在缓冲区中,最后再读写文件,来降低访问本地磁盘的次数,从而提高效率。 简单的说就是,把文件读取进缓冲(内存)之后再读取的时候就可以避免文件系统的io 从而提高速度。同理,在进行写操作时,

    作者:RainNight 2021-03-23 所属分类:[Golang]

    [IO操作]-第007节:ioutil包

    除了io包可以读写数据,Go语言中还提供了一个辅助的工具包就是ioutil,里面的方法虽然不多,但是都还蛮好用的。 ``` import "io/ioutil" ``` 该包的介绍只有一句话:Package ioutil implements some I/O utility functions。 ### 一、ioutil包的方法 --- 下面我们来看一下里面的方法: ``` // Discard 是一个 io.Writer 接口,调用它的 Write 方法将不做任何事情 // 并且始终成功返回

    作者:RainNight 2021-03-23 所属分类:[Golang]

网盘推荐

微信公众号

书籍标签