golang 笔记
golang 的坑
package main
import (
"fmt"
"net/http"
"time"
)
func Hello(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Hello!!\n"))
time.Sleep(10 * time.Second)
}
func main() {
http.HandleFunc("/hello", Hello)
addr := "0.0.0.0:8083"
if err := http.ListenAndServe(addr, nil); err != nil {
fmt.Println(err)
return
}
}
ResponseWriter.Write只是将数据写进了一个缓冲区,如过缓冲区未被写满是不会往tcp连接里写的,表现为包没发出去。http server会在Handler函数结束后调用Flush,所以在Handler函数里的任何阻塞行为都会影响到回包数据的发送。
有两种方法来规避:
主动调用Flush
w.(http.Flusher).Flush()
将长操作用go包起来
go func() { time.Sleep(10*time.Second) }()
go并行计算
func main() {
arr := [4]int{1, 2, 3, 4}
var wg sync.WaitGroup
for _, v := range arr {
wg.Add(1)
fmt.Println(v)
go func(i int) {
defer wg.Done()
fmt.Println(i)
}(v)
}
wg.Wait()
}
wg.Add()会+1,wg.Done()会-1, wg.Wait()一直阻塞到0;
go线程间通信
func main() {
ch := make(chan int, 2)
go func() {
for i := 0; i < 2; i++ {
ch <- i
}
}()
fmt.Println("print")
for j := 0; j < 2; j++ {
res, ok := <-ch
if ok {
fmt.Println(res)
}
}
}
通过go关键字可以开启一个协程执行此函数。通过channel通信。
ch是一个可读可写channel,有2个缓存,可连续写入2次。如果再写入就会堵塞,一直等到数据被消费。
go map 初始化
m := make(map[string]int)
m["a"] = 1
m["b"] = 2
m := map[string]interface{}{
"Name": "Wednesday",
"Age": 6,
"Parents": []interface{}{
"Gomez",
"Morticia",
},
}
go包依赖
https://infoq.cn/article/history-go-package-management
golang 笔记的更多相关文章
- golang笔记1
golang笔记1 go代码是用包来组织的,每个包有一个或多个go文件组成,这些go文件文件放在一个文件夹中 每个源文件开始都用一个package声明,指明本源文件属于哪个包 pakage声明后紧跟这 ...
- Golang笔记(二)面向对象的设计
Golang笔记(二)面向对象的设计 Golang本质还是面向过程的语言,但它实现了一些OOP的特性,包括抽象.封装.继承和多态. 抽象和封装 Golang和C语言一样以struct为数据结构核心,不 ...
- Golang笔记(一)简洁的语言风格
Golang笔记(一)简洁的语言风格 概述 Golang继承了很多C语言的风格,寡人使用了十几年C语言,切换到Golang时上手很快,并且随着深入的使用,越来越喜欢这门语言.Golang最直观的感受是 ...
- Golang笔记集
学习Golang了, 下面分享我的, 还有我收集的Golang的学习资料 我的基础笔记地址: https://github.com/zhuchangwu/go-study-notes 其他参考: Go ...
- Golang笔记整理--One day
题外话: 很早就有整理学习笔记的想法,今天将想法付诸于行动,将Golang相关知识系统整理一遍,此分类为Golang学习笔记,最近开始学习这门语言的同学可以参考. 一 第一个Go程序: hello.g ...
- golang笔记——函数与方法
如果你遇到没有函数体的函数声明,表示该函数不是以Go实现的. package math func Sin(x float64) float //implemented in assembly lang ...
- golang笔记——IDE
可选方案有 Lite IDE\GoSublime\Visual Studio Code\Goclipse\Vim 1.Lite IDE 这是国人开发的开源且跨平台的 golang 专属IDE,也算是目 ...
- golang笔记——包
1.包简述 GO本身没有项目的概念,只有包,包括可执行包和不可执行包,而不管什么包,都应该包含在 $GOPATH/src 目录下,GO命令和编译器会在 $GOPATH/src 目录下搜索相应的包.比如 ...
- golang笔记——环境搭建
1.下载安装 从 https://golang.org/dl/ 这里下载最新版本的 golang 安装包,分别有 Windows\Linux\Apple OSX\源码包. golang的官方网站是 h ...
- 【Golang笔记】Golang工具包Cobra安装记录
0.环境信息 系统:Win10_x64 Go版本:go version go1.8.1 windows/amd64 Git版本:git version 2.17.0.windows.1 1.安装Go运 ...
随机推荐
- 一些常用的meta标签
<!DOCTYPE html> <!-- 使用 HTML5 doctype,不区分大小写 --> <html lang="zh-cmn-Hans"&g ...
- momentjs的使用
一.脚本引用 <script src="~/Scripts/moment.js"></script> <script src="~/Scri ...
- 【Python 03】程序设计与Python语言概述
人生苦短,我用Python. Python在1990年诞生于荷兰,2010年Python2发布最后一版2.7,Python核心团队计划在2020年停止支持 Python2,目前Python3是未来. ...
- Kafka设计解析(七)- Kafka Stream
本文介绍了Kafka Stream的背景,如Kafka Stream是什么,什么是流式计算,以及为什么要有Kafka Stream.接着介绍了Kafka Stream的整体架构,并行模型,状态存储,以 ...
- SpringIOC和AOP简单概述
Spring学习:主要学习两大块IOC AOP 一.IOC IOC:控制反转(也可以叫做依赖注入)的基本认识: 当某个Java对象(调用者)需要调用另一个Java对象(被依赖对象)的方法时 ...
- Bokeh
超级好用的显示图像用的package哟~~ 用法自己Google哟~ 特别喜欢这个带各种颜色的Bokeh.palette https://bokeh.pydata.org/en/latest/docs ...
- Redis入门---字符串类型
阅读目录 1.keys * 命令 2.判断一个键是否存在(exists key) 3.删除键 4.获取键值的数据类型 5 递增数字(incr) 6.增加指定的整数 (INCRBY) 7.减少指定的整数 ...
- redis 基本原理及安装
一:什么是redis? Redis 是一个开源的,高性能的,基于键值对的缓存与存储系统.通过提供多种键值数据类型来适应不同场景下的缓存与存储需求. 二:redis数据库有什么优点? Redis数据库中 ...
- 云端安装MQTT服务器
如果自己下载的3.1版本的MQTT, 安装步骤参考 https://developer.emqx.io/docs/emq/v3/cn/install.html 配置用户名和密码第一种是用http ht ...
- Python两大佬互相撕逼 技术何苦为难技术?
最近两天 Python 圈发生了一件大事,两个 Python 大佬撕逼了起来了. 不,其实是一个大佬(刘志军)被怼. 事情是这样的. 背景 人物介绍: 董明伟:公众号「Python 之美」的作者,似乎 ...