![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Go程序设计语言
Go程序设计语言
wymyimeng
这个作者很懒,什么都没留下…
展开
-
找出重复行
1、 package main import ( "bufio" "fmt" "os" ) func main() { counts := make(map[string]int) input := bufio.NewScanner(os.Stdin) for input.Scan() { counts[input.Text()]+原创 2019-03-03 16:45:00 · 204 阅读 · 0 评论 -
Go中的通道
如果说 goroutine 是 Go 程序并发的执行体,通道就是它们之间的连接。通道是可以让一个goroutine 发送特定值到另一个 goroutine 的通信机制。每一个通道是一个具体类型的导管,叫做通道的元素类型。一个有 int 类型元素的通道写为 chan int。 ch := make(chan int) // ch 的类型是 'chan int' 像 map 一样,通道是一个使用 ...原创 2019-07-12 08:48:21 · 871 阅读 · 0 评论 -
Go中的测试
go test 工具 go test 子命令是Go 语言包的测试驱动程序,这些包根据某些约定组织在一起。在一个包木目录中,以_test.go 结尾的文件不是 go build 命令编译的目标,而是 go test 编译的目标。 在 *_test.go 文件中,三种函数需要特殊对待,即功能测试函数、基准测试函数和示例函数。功能测试函数是以Test 前缀命名的函数,用来检测一些程序逻辑的正确性,go ...原创 2019-07-18 08:57:09 · 325 阅读 · 0 评论 -
使用共享变量实现并发
竞态 竞态是指在多个 goroutine 按某些交错顺序执行时程序无法给出正确的结果。 一种避免数据竞态的方法是避免从多个 goroutine 访问同一个变量。由于其他 goroutine 无法直接访问相关变量,因此它们就必须使用通道来向受阻 goroutine 发送查询请求或者更新变量。这也是 Go 箴言的含义:不用通过共享内存来通信,而应该通过通信来共享内存。 另一种避免数据竞态的方法是允许多...原创 2019-07-15 09:02:03 · 512 阅读 · 0 评论 -
Go 中的函数
函数声明 函数的类型称作函数的签名。当两个函数拥有相同的形参列表和返回列表时,认为这两个函数的类型或签名是相同的。而形参和返回值的名字不会影响到函数类型、采用简写同样也不会影响到函数的类型。 实参是按值传递的,所以函数接收到的是每个实参的副本;修改函数的形参变量并不会影响到调用者提供的实参。然而,如果提供的实参包含引用类型,比如指针、slice、map、函数或者通道,那么当函数使用形参变量时就要可...原创 2019-07-05 09:03:44 · 105 阅读 · 0 评论 -
Go 中的接口
很多面向对象的语言都有接口这个概念。Go 语言的接口的独特之处在于它是隐式实现。换句话说,对于一个具体的类型,无序声明它实现了哪些接口,只要提供接口所必需的方法即可。 接口类型 一个接口类型定义了一套方法,如果一个具体类型要实现该接口,那么必须实现接口类型定义的所有方法。 实现接口 如果一个类型实现了一个接口所要求的所有方法,那么这个类型就实现了这个接口。 ...原创 2019-07-10 08:59:51 · 105 阅读 · 0 评论 -
Go 中的方法
方法声明 方法的声明和普通函数的声明类似,只是在函数名字前面多了一个参数。这个参数把这个方法绑定到这个参数对应的类型上。 指针接收者的方法 命名类型(Point) 与指向它们的指针(*Point)是唯一可以出现在接收者声明处的类型。而且,为防止混淆,不允许本身是指针的类型进行方法声明: type p *int func (p) f() { } // 编译错误:非法的接收者类型 实际上...原创 2019-07-09 08:36:39 · 106 阅读 · 0 评论 -
Go 中的复合数据类型
数组 在数组字面量中,如果省略号“…” 出现在数组长度的位置,那么数组的长度由初始化数组的元素个数决定。 q := [...]int{1,2,3} fmt.Printf("%T\n", q) // [3]int 数组的长度是数组类型的一部分,所以 [3]int 和 [4]int 是两种不同的数组类型。数组的长度必须是常量表达式,也就是说,这个表达式的值在程序编译的时候就可以确定。 q ...原创 2019-07-02 09:02:28 · 193 阅读 · 0 评论 -
GO 中的数据类型
Go 的数据类型分四大类:基础类型,聚合类型,引用类型和接口类型。 整数 Go 同时具备有符号整数和无符号整数。有符号整数分四种大小:8位、16位、32位、64位,用 int8、int16、int32、int64 表示,对应的无符号整数是 uint8、uint16、uint32、uint64。 有符号整数以补码表示,保留最高位作为符号位,n 为数字的取值范围是 字符串 常量 ...原创 2019-06-05 09:00:43 · 157 阅读 · 0 评论 -
Go基础知识梳理
1、名称 指针 Go提供了指针,它的值是变量的地址。使用& 操作符可以获取一个变量的地址,使用* 操作符可以获取指针引用的变量的值,但是指针不支持算数运算。 指针类型的零值是 nil。测试 p != nil,结果是 true 说明 p 指向一个变量。指针是可比较的,两个指针当且仅当指针指向同一个变量或者两者都是 nil 的情况下才是相等的。 var x, y int fmt.Pri...原创 2019-05-31 09:01:51 · 773 阅读 · 0 评论 -
一个 Web服务器
package main import ( "fmt" "log" "net/http" "sync" ) var mu sync.Mutex var count int func main() { http.HandleFunc("/", handler1) http.HandleFunc("/count", counter) log.Fatal(http.List原创 2019-03-04 08:06:57 · 91 阅读 · 0 评论 -
并发获取多个URL
package main import ( "fmt" "io" "io/ioutil" "net/http" "os" "time" ) func main() { start1 := time.Now() ch := make(chan string) for _, url := range os.Args[1:] { go fetch(url, ch)原创 2019-03-04 07:28:42 · 288 阅读 · 0 评论 -
Go中的反射
Go 语言提供了一种机制,在编译时不知道类型的情况下,可更新变量、在运行时查看值、调用方法以及直接对它们的布局进行操作,这种机制称为反射。 reflect.Type 和 reflect.Value 反射功能由reflect 包提供,它定义了两个重要的类型:Type 和 Value。Type 表示Go 语言的一个类型,它是一个有很多方法的接口,这些方法可以用来识别类型以及透视类型的组成部分,比如一个...原创 2019-07-19 09:00:56 · 166 阅读 · 0 评论