Golang
ferghs
贵在坚持!
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
go http的超时
英文原始出处: The complete guide to Go net/http timeouts, 作者: Filippo Valsorda 当用Go写HTTP的服务器和客户端的时候,超时处理总是最易犯错和最微妙的地方之一。错误可能来自很多地方,一个错误可能等待很长时间没有结果,直到网络故障或者进程挂起。 HTTP是一个复杂的、多阶段(multi-stage)协议,所以没有一个放之四海而皆...转载 2018-10-31 21:28:23 · 2414 阅读 · 1 评论 -
golang读取文件
按行读取demo如下: package main import ( "bufio" "fmt" "io" "os" "strings" ) func main() { fi, err := os.Open("./tax.txt") if err != nil { fmt.Printf("Error: %s\n", e...原创 2019-04-02 23:09:19 · 343 阅读 · 0 评论 -
golang之ioutil.ReadAll()读取标准输出的问题
问题描述 之前在使用ioutil.ReadAll()读取cmd.CombinedOutput()的标准输出时遇到程序挂起的问题,代码如下: func main() { cmd := exec.Command("git", "clone","https://github.com/test/test.git") stdout, _ := cmd.StdoutPipe() ...转载 2019-03-20 10:54:36 · 10045 阅读 · 0 评论 -
golang报错: WaitGroup is reused before previous Wait has returned
使用WaitGroup时,大概代码: package main import ( "fmt" "time" "sync" ) var wg sync.WaitGroup func f1() { time.Sleep(1 * time.Second) wg.Done() } func main() { var i int ...原创 2019-03-20 10:24:15 · 5184 阅读 · 0 评论 -
golang 数据库
使用db.Prepare时一定要关闭stmt,否则内存泄漏。 db, err := sql.Open("mysql", "user:password@tcp(ip:port)/database") if err != nil { log.Fatal(err) } age := 27 stmt, err := db.Prepare("SELECT name FROM users WH...转载 2018-12-23 10:29:27 · 401 阅读 · 0 评论 -
golang 使用共享内存
golang没有提供共享内存的函数,使用syscall调用,或者调用c语言的共享内存函数。 // @file main.go // @brief // @author tenfyzhong // @email tenfyzhong@qq.com // @created 2017-06-26 17:54:34 package main import ( "flag" "fmt"...转载 2018-12-23 09:38:54 · 2699 阅读 · 1 评论 -
golang 正则表达式 regexp
用正则表达式判断邮箱、手机号、网站域名等是否合法,先上例子: package main import ( "fmt" "regexp" ) func main() { // Compile the expression once, usually at init time. // Use raw strings to avoid having to quote the backsl...原创 2018-11-04 16:58:47 · 1916 阅读 · 0 评论 -
golang select case的问题
1、case条件无论是否满足,所有case语句都会执行 2、阻塞channel如无接收者,则不发送 例子: package main import ( "fmt" ) //定义几个变量,其中chs和numbers分别代表通道列表和整数列表 var ch1 chan int var ch2 chan int var chs = []chan int{ch1, ch2} var...原创 2018-11-13 22:55:45 · 1737 阅读 · 0 评论 -
golang 关键词make、new的使用
Go语言中的内建函数new和make是两个用于内存分配的原语(allocation primitives)。对于初学者,这两者的区别也挺容易让人迷糊的。简单的说,new只分配内存,make用于slice,map,和channel的初始化。 1. new 这是一个用来分配内存的内建函数,但是与C++不一样的是,它并不初始化内存,只是将其置零。也就是说,new(T)会为T类型的新项目,分配被置零的...转载 2018-10-24 23:51:19 · 1779 阅读 · 0 评论 -
go 多个GOPATH
go可以设置多个GOPATH Linux下用冒号(:)分割,例如: $ go env GOPATH="/home/ferghs/gowork:/home/ferghs/gowork/src/project1" Windows使用分号分割(;) 注意: 1 如果使用go get 默认安装到第一个GOPATH路径 2 编译(go build)时,有时会报同一种类型或方法不匹配,原因是G...原创 2018-10-31 23:57:09 · 10897 阅读 · 0 评论 -
golang 报错 undefined: proto.InternalMessageInfo
问题原因: 新的版本加入了InternalMessageInfo导致编译不过 解决方法: 1、使用旧版本的插件,即手动下载并安装protoc-gen-go版本v1.1.0 (https://github.com/golang/protobuf/releases/tag/v1.0.0)来生成旧风格的原型代码。 方法:tar zxvf protobuf-1.0.0.tar.gz cd pro...原创 2018-09-21 18:51:42 · 4803 阅读 · 0 评论 -
Go TCP keepalive
tcp长连接设置保持连接活跃 func (c *TCPConn) SetKeepAlive(keepalive bool) error SetKeepAlive sets whether the operating system should send keepalive messages on the connection. func (c *TCPConn) SetKeepAli...原创 2018-10-29 23:36:45 · 1829 阅读 · 0 评论 -
Golang的一些缺点
1.右大括号不允许换行,否则编译报错;不允许包含未使用的包(设置vscode工具,保存文件时可自动修改格式) 2.不允许有未使用的变量(vscode工具无法解决) 3.错误处理原始,虽然引入了defer、panic、recover处理出错后的逻辑,函数可以返回多个值,但基本依靠返回错误是否为空来判断函数是否执行成功,if语句较多,比较繁琐,程序没有java美观。(官方解释:提供了多个返回值,处...原创 2018-07-24 23:03:25 · 3025 阅读 · 6 评论 -
go test 单元函数测试
首先安装单元测试包,go get github.com/smartystreets/goconvey/convey 源程序如下,定义了加减乘除4个函数 package test222 import ( "errors" ) func Add(a, b int) int { return a + b } func Subtract(a, b int) int { ...原创 2018-10-23 09:25:13 · 1383 阅读 · 0 评论 -
golang的定时器NewTimer、NewTicker使用
废话不多说,直接看代码 package main import ( "fmt" "sync" "time" ) /** *ticker只要定义完成,从此刻开始计时,不需要任何其他的操作,每隔固定时间都会触发。 *timer定时器,是到固定时间后会执行一次 *如果timer定时器要每隔间隔的时间执行,实现ticker的效果,使用 func (t *Timer) Res...转载 2018-09-07 22:46:20 · 36356 阅读 · 0 评论 -
for循环+goroutine的坑
01. 调查 初学者经常会使用如下代码来并行处理数据: for val := range values { go val.MyMethod() } 或者使用闭包(closure): for val := range values { go func() { fmt.Println(val) }() } 这里的问题在于 val 实际上是一个遍历了...转载 2018-09-07 23:12:20 · 4451 阅读 · 0 评论 -
Go语言中Interface详解
前言 最近在看Go语言的面向对象的知识点时,发现它的面向对象能力全靠 interface 撑着,而且它的 interface 还与我们以前知道的 interface 完全不同。故而整个过程不断的思考为什么要如此设计?这样设计给我们带来了什么影响? interface 我不懂你 Rob Pike 曾说: 如果只能选择一个Go语言的特 性移植到其他语言中,他会选择接口 被Go语言设计者如此看...转载 2018-08-29 11:53:21 · 268 阅读 · 0 评论 -
go语言函数作为参数传递
package main import "fmt" import "time" func goFunc1(f func()) { go f() } func goFunc2(f func(interface{}), i interface{}) { go f(i) } func goFunc(f interface{}, args... interfac...转载 2018-08-29 10:17:43 · 1156 阅读 · 0 评论 -
Go包导入与Java的差别
闲暇时翻阅了近期下载到的电子书《Go in Practice》 ,看到1.2.4 Package Management一节中的代码Demo,感觉作者对Go package导入的说法似乎不够精确:“Packages are imported by their name”(后续的说明将解释不精确的原因)。联想到前几天遇到的一个Java包导入的问题,让我隐约地感觉Java程序员很容易将两种语言的Pack...转载 2018-08-24 18:31:06 · 850 阅读 · 0 评论 -
golang sync.Once的用法
sync.Once.Do(f func())是一个挺有趣的东西,能保证once只执行一次,无论你是否更换once.Do(xx)这里的方法,这个sync.Once块只会执行一次。 package main import ( "fmt" "sync" "time" ) var once sync.Once func main() { for i, v := range m...转载 2018-08-01 00:13:59 · 1279 阅读 · 0 评论 -
go 参数传递
直接看例子: package main import "fmt" func main() { b := false fmt.Println("b's address is:", &b) bo(b) fmt.Println(b) } func bo(b bool) { fmt.Println("b's address is:", &...原创 2018-08-03 16:55:34 · 486 阅读 · 0 评论 -
go []interface{}的类型转换
package main import ( "fmt" "strings" ) func getName(params ...interface{}) string { var stringSlice []string for _, param := range params { stringSlice = append(stringSlice...原创 2018-08-03 16:18:24 · 18321 阅读 · 2 评论 -
go变长参数
go语言中变长参数,形参和实参该采用如下方式传递: package main import "fmt" func show(args ...interface{}) { for _, v := range args { fmt.Println(v) } } func main() { slice:=[]interface{}{1,2,3,4} ...原创 2018-08-03 16:16:31 · 677 阅读 · 0 评论 -
Golang创建协程与Python创建进程资源消耗
Golang创建协程消耗很少资源,创建协程可以说有点随心所欲,定时多久时间后执行任务可以创建协程,完成某个比较耗时的异步函数可以创建协程等等。 首先用Python起任务进程,在虚拟机上进程上限200左右,运行所需时间 1532059031.4343863 1532059032.7786460 import os import time import multiprocessing fro...原创 2018-07-20 12:14:44 · 864 阅读 · 0 评论
分享