服务咨询热线:

022-88711099

当前位置:

在Go中,搭建一个HTTP server简单到令人难以置信。只需要引入net/http包,写几行代码,一个HTTP服务器就可以正常运行并接受访问请求。下面就是Go最简单的HTTP服务器:package main import ( "fmt" "net/http" ) func myfunc(w http.ResponseWriter, r *http.Request) { ……

标准库fmt包中,Printf()等方法可以做到输出格式化,当然,对于简单的例子来说足够了,但是我们有时候还是需要复杂的输出格式,甚至需要将格式化代码分离开来。这时,可以使用text/template和html/template。Go 官方库提供了两个模板库: text/template 和 html/template 。这两个库类似,当需要输出html格式的代码时需要使用 html/templa……

34.1 命令行写命令行程序时需要对命令参数进行解析,这时我们可以使用os库。os库可以通过变量Args来获取命令参数,os.Args返回一个字符串数组,其中第一个参数就是执行文件本身。package main import ( "fmt" "os" ) func main() { fmt.Println(os.Args) }编译执行后执行$ ./……

33.1 Socket基础知识TCP/UDP、IP构成了网络通信的基石,TCP/IP是面向连接的通信协议,要求建立连接时进行3次握手确保连接已被建立,关闭连接时需要4次通信来保证客户端和服务端都已经关闭,也就是我们常说的三次握手,四次挥手。在通信过程中还有保证数据不丢失,在连接不畅通时还需要进行超时重试等等。Socket就是封装了这一套基于TCP/UDP/IP协议细节,提供了一系列套接字接口进行通……

32.1 fmt包格式化I/O上一章我们有提到fmt格式化I/O,这一章我们就详细来说说。在fmt包,有关格式化输入输出的方法就两大类:Scan 和 Print ,分别在scan.go 和 print.go 文件中。print.go文件中定义了如下函数:func Printf(format string, a ...interface{}) (n int, err error) func F……

31.1 文件系统对于文件和目录的操作,Go主要在os包中提供了的相应方法:func Mkdir(name string, perm FileMode) error func Chdir(dir string) error func TempDir() string func Rename(oldpath, newpath string) error func Chmod(name st……

30.1 启动外部命令和程序os标准包,是一个比较重要的包,顾名思义,主要是在服务器上进行系统的基本操作,如文件操作,目录操作,执行命令,信号与中断,进程,系统状态等等。在os包下,有 exec,signal,user三个子包。在os包中,有很多有趣的功能,比如可以通过变量Args来获取命令参数,os.Args返回一个字符串数组。 fmt.Println(os.Args)在os包中,相关函数名……

29.1 sort包介绍Go语言标准库sort包中实现了几种基本的排序算法:插入排序、快排和堆排序,但在使用sort包进行排序时无需具体考虑使用那种排序方式。func insertionSort(data Interface, a, b int) func heapSort(data Interface, a, b int) func quickSort(data Interface, a,……

28.1 unsafe 包func Alignof(x ArbitraryType) uintptr func Offsetof(x ArbitraryType) uintptr func Sizeof(x ArbitraryType) uintptr type ArbitraryType int type Pointer *ArbitraryType在unsafe包中,只提供了3个函数,……

27.1 反射(reflect)反射是应用程序检查其所拥有的结构,尤其是类型的一种能。每种语言的反射模型都不同,并且有些语言根本不支持反射。Go语言实现了反射,反射机制就是在运行时动态调用对象的方法和属性,即可从运行时态的示例对象反求其编码阶段的定义,标准库中reflect包提供了相关的功能。在reflect包中,通过reflect.TypeOf(),reflect.ValueOf()分别从类型、……

在Go语言中,所有的包都应该有必要文档和注释,当然同样甚至更为重要的是对包进行必要的测试。testing 包就是这样一个标准包,被专门用来进行单元测试以及进行自动化测试,打印日志和错误报告,方便程序员调试代码,并且还包含一些基准测试函数的功能。testing 包含测试函数、测试辅助代码和示例函数;测试函数包括Test开头的单元测试函数和以Benchmark开头的基准测试函数两种,测试辅助代码是为测……

25.1 Go 中的面向对象我们总结一下前面看到的:Go 没有类,而是松耦合的类型、方法对接口的实现。OO 语言最重要的三个方面分别是:封装,继承和多态,在 Go 中它们是怎样表现的呢?Go实现面向对象的两个关键是struct和interface,结构代替类,因为Go语言不提供类,但提供了结构体或自定义类型,方法可以被添加到结构体或自定义类型中。结构体之间可以嵌套,类似继承。而interface定……

24.1 指针一个指针变量可以指向任何一个值的内存地址。指针变量在 32 位计算机上占用 4B 内存,在 64 位计算机占用 8B内存,并且与它所指向的值的大小无关,因为指针变量只是地址的值而已。可以声明指针指向任何类型的值来表明它的原始性或结构性,也可以在指针类型前面加上*号(前缀)来获取指针所指向的内容。在Go语言中,指针类型表示指向给定类型(称为指针的基础类型)的变量的所有指针的集合。 符号……

23.1 同步锁Go语言包中的sync包提供了两种锁类型:sync.Mutex和sync.RWMutex,前者是互斥锁,后者是读写锁。互斥锁是传统的并发程序对共享资源进行访问控制的主要手段,在Go中,似乎更推崇由channel来实现资源共享和通信。它由标准库代码包sync中的Mutex结构体类型代表。只有两个公开方法:调用Lock()获得锁,调用unlock()释放锁。使用Lock()加锁后,不能……

22.1 通道(channel)Go 奉行通过通信来共享内存,而不是共享内存来通信。所以,channel 是协程之间互相通信的通道,协程之间可以通过它发送消息和接收消息。通道是进程内的通信方式,因此通过通道传递对象的行为与函数调用时参数传递行为比较一致,比如也可以传递指针等。通道消息传递与消息类型也有关系,一个通道只能传递(发送send或接收receive)类型的值,这需要在声明通道时指定。默认情……

Concurrency is about dealing with lots of things at once. Parallelism is about doing lots of things at once.并发: 指的是程序的逻辑结构。如果程序代码结构中的某些函数逻辑上可以同时运行,但物理上未必会同时运行。并行: 并行是指程序的运行状态。并行则指的就是在物理层面也就是使用了不同……

在前面我们讲了结构体(struct)和接口(interface),在里面也提到过方法,但没有详细介绍方法(Method)。在这一章里,我们来仔细看看方法有那些奇妙之处呢?20.1 方法的定义在 Go 语言中,结构体就像是类的一种简化形式,那么面向对象程序员可能会问:类的方法在哪里呢?在 Go 语言中有一个概念,它和方法有着同样的名字,并且大体上意思相近。Go 语言中方法和函数在形式上很像,它是作用……

19.1 接口是什么Go语言接口定义了一组方法集合,但是这些方法集合仅仅只是被定义,它们没有在接口中实现。接口(interface)类型是Go语言的一种数据类型。而因为所有的类型包括自定义类型都实现了空接口interface{},所以空接口interface{}可以被当做任意类型的数值。Go 语言中的所有类型包括自定义类型都实现了interface{}接口,这意味着所有的类型如string、 in……

18.1结构体(struct)Go 通过结构体的形式支持用户自定义类型,或者叫定制类型。Go 语言结构体是实现自定义类型的一种重要数据类型。结构体是复合类型(composite types),它由一系列属性组成,每个属性都有自己的类型和值的,结构体通过属性把数据聚集在一起。结构体类型和字段的命名遵循可见性规则。方法(Method)可以访问这些数据,就好像它们是这个独立实体的一部分。结构体是值类型,……

type关键字在Go语言中作用很重要,比如定义结构体,接口,还可以自定义类型,定义类型别名等。自定义类型由一组值以及作用于这些值的方法组成,类型一般有类型名称,往往从现有类型组合通过type关键字构造出一个新的类型。17.1 type 自定义类型在Go 语言中,基础类型有下面几种: bool byte complex64 complex128 error float32 float64 ……