golang

golang开发环境配置

旧巷老猫 提交于 2019-12-06 03:17:22
下载安装 从 https://golang.org/dl/ 下载最新的安装包。 windows直接执行exe,按指示进行安装(默认安装目录是:C:\Go) linxu解压后复制到你喜欢目录就行(一般放在:/usr/local/go) 配置环境变量 首先,应在全局环境变量里增加: GOROOT ,指定 golang 的安装位置。并将安装目录下的 bin 添加到 PATH 中,其中将 bin 添加到 PATH 是为了能够在其他目录直接使用 go 命令: export GOROOT=/usr/local/go export PATH=$PATH:$GOROOT/bin 应该在用户的配置中,添加 GOPATH 指定项目目录(假设项目在 /home/goProject )。项目目录中应包含 bin 、 src 、 pkg 三个目录。 并同时设置 GOBIN ,以及将 GOAPATH 下的 bin 也加入 PATH 中。 GOBIN 将指定你通过 go install 安装的包的路径(其默认是第一个 GOPATH 的 bin 目录),而将 GOAPATH 下的 bin 也加入 PATH 中,是为了能够方便地使用安装好的各种工具。 export GOPATH=/home/goProject export PATH=$PATH:$GOPATH/bin 但需要注意的是, GOROOT 和

Golang 异常/日志处理

半腔热情 提交于 2019-12-06 03:02:45
1、xerrors 异常 xerrors 包是一个非常棒的设计,不同于往常语言如java/php,因为go的errors只是一个string类型的映射,所以内存占用空间很少。这在golang的核心库和golang大多数开源模块中使用,简单,高效,稳定!比如: var myErr:=errors.New("error msg") func act1()err{ return myErr } 以上代非常高效,如果你经常做go的开发时。这种解决时经常会存在一个很头疼的问题,就是异常触发点很难定位,因为你很难去定位到异常发生的代码文件及行数和调用的堆栈,但出现问题时非常必要知道是什么情况处罚的这个异常,只是一个message不足以让开发人员去解决问题。 在最新的xerrors包中,引入了一个caller堆地址,通过使用Format接口可以格式化出调用第一行的堆,但这往往很多时候不足以解决去定位问题。这时可以考虑使用第三方包,请继续往下看:) 2、堆栈异常处理 go.mod require github.com/pkg/errors latest go mod download package main import( "fmt" "github.com/pkg/errors" ) func act1()error{ return errors.New("hello world!") }

golang Endian字节序

只谈情不闲聊 提交于 2019-12-06 02:51:50
golang 字节序 简述 最近看TCP通信发现字节序,对此不太了解,故记录下来。 所谓字节序就是字符顺序。在查看资料常用的有2类排序方式: Big-Endian 高位字节放在内存的低地址端,低位字节放在内存的高地址端。 Little-Endian 低位字节放在内存的低地址段,高位字节放在内存的高地址端。 例如 十进制数 255 用二进制表示为 1111 1111 ,十进制数 256 用二进制表示则为 1 0000 0000 那么这个1存放的位置是在前还是后,就是 Big-Endian 和 ittle-Endian 的区别 golang中 在golang 中 encoding/binary 提供了二进制序列化的功能。 提供read 读取编码 和write写编码的等方法 func Read(r io.Reader, order ByteOrder, data interface{}) error func Write(w io.Writer, order ByteOrder, data interface{}) error 及一个排序接口 type ByteOrder interface { Uint16([]byte) uint16 Uint32([]byte) uint32 Uint64([]byte) uint64 PutUint16([]byte, uint16)

[翻译] effective go 之 Embedding

给你一囗甜甜゛ 提交于 2019-12-06 02:51:38
Embedding Go does not provide the typical, type-driven notion of subclassing, but it does have the ability to “borrow” pieces of an implementation by embedding types within a struct or interface. Go没有像其它面向对象语言中的类继承概念 但是 它可以通过在结构体或者接口中嵌入其它的类型 来使用被嵌入类型的功能 Interface embedding is very simple. We've mentioned the io.Reader and io.Writer interfaces before; here are their definitions. 嵌入接口非常简单 我们之前提到过io.Reader和io.Writer接口 下面是它们的定义: type Reader interface { Read(p []byte) (n int, err error) } type Writer interface { Write(p []byte) (n int, err error) } The io package also exports several other

(四十四)golang--协程(goroutine)和管道(channel)相结合实例

白昼怎懂夜的黑 提交于 2019-12-06 02:51:01
统计1-8000之间的素数。 整体框架: 说明:有五个协程,三个管道。其中一个协程用于写入数字到intChan管道中,另外四个用于取出intChan管道中的数字并判断是否是素数,然后将素数写入到primeChan管道中,最后如果后面四个协程哪一个工作完了,就写入一个true到exit管道中,最后利用循环判断这四个协程是否都完成任务,并退出。 main.go package main import ( "fmt" "go_code/project_13/test" "time" ) func putNum(intChan chan int) { for i := 1; i <= 80000; i++ { intChan <- i } close(intChan) } func isPrime(n int) bool { //这里本来i只需要到int(math.Sqrt(float64(n))),为了计算时间,就直接设置i-n了 for i := 2; i <= n; i++ { if n%i == 0 { return false } } return true } func primeNum(intChan chan int, primeChan chan int, exitChan chan bool) { for { // time.Sleep(time.Millisecond

[翻译] effective go 之 Methods,Interfaces

自闭症网瘾萝莉.ら 提交于 2019-12-06 02:50:25
Methods Pointers vs. Values Methods can be defined for any named type that is not a pointer or an interface; the receiver does not have to be a struct. 除了指针和接口(interface) 可以为任意自定义的类型定义方法 而且这个自定义类型可以不是结构体struct In the discussion of slices above, we wrote an Append function. We can define it as a method on slices instead. To do this, we first declare a named type to which we can bind the method, and then make the receiver for the method a value of that type. 在讲slice时 我们写了一个Append函数 当时我们是把需要修改的slice以参数形式传递给函数Append 我们也可以为slice定义方法 但是需要为slice定义别名 并且定义方法的作用对象为该类型 这样可以直接通过slice.Append来给slice添加元素了:

ubuntu下安装golang

强颜欢笑 提交于 2019-12-06 02:49:55
golang官方编译器安装与配置 因为golang是用部分功能语言编写的,所有首先应安装gcc, $ sudo apt-get install bison gawk gcc libc6-dev make 安装mercurial工具,用于 提取golang的源代码 $ sudo apt-get install mercurial 提取golang的原代码 $hg clone -r release https://go.googlecode.com/hg/ go 编辑源代码 $ cd go/src $ ./all.bash 配置环境变量 $ gedit ~/.bashrc 在.bashrc环境变量中加入golang配置 export GOROOT=~/go export GOARCH=386 export GOOS=linux export GOBIN=$GOROOT/bin/ export GOTOOLS=$GOROOT/pkg/tool/ export PATH=$PATH:$GOBIN:$GOTOOLS 使用.bashrc立即生效 source ~/.bashrc 来源: oschina 链接: https://my.oschina.net/u/140663/blog/178035

golang以服务方式运行

五迷三道 提交于 2019-12-06 02:49:42
golang开发的二进制程序,一般需要长期后台运行的,在linux上可以用supervisor或upstart或systemd等第三方守护进程来实现。其实golang自己也可以实现以服务的形式常驻后台。 需要的库 https://github.com/kardianos/service 这个库里面有两个接口定义,一个是: type Service interface { // Run should be called shortly after the program entry point. // After Interface.Stop has finished running, Run will stop blocking. // After Run stops blocking, the program must exit shortly after. Run() error // Start signals to the OS service manager the given service should start. Start() error // Stop signals to the OS service manager the given service should stop. Stop() error // Restart signals to the

利用supervisor在linux上部署goweb项目

余生长醉 提交于 2019-12-06 02:49:25
最近在鼓捣golang守护进程的实现,无意发现了supervisor这个有意思的东西。supervisor是一个unix的系统进程管理软件,可以用它来管理apache、nginx等服务,若服务挂了可以让它们自动重启。当然也可以用来实现golang的守护进程,下面描述下具体实现。 安装supervisor 基于centos 6.4。 supervisor使用python编写的,可以用easy_install安装。centos上默认有python的运行环境,安装起来就非常简单了。 $ sudo yum install python-setuptools $ sudo easy_install supervisor 如果没有看到什么报错,那么就安装成功了,可以使用echo_supervisord_conf查看配置详情,而后生成配置文件。 $ sudo echo_supervisord_conf > /etc/supervisord.conf golang http服务 先整一个简单的golang http服务 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 packagemain import( "fmt" "log" "net/http" ) funcmain() { http.HandleFunc("/", func(w http

golang中的print和fmt.print

放肆的年华 提交于 2019-12-06 00:32:26
print 在golang中 是属于输出到标准错误流中并打印,官方不建议写程序时候用它。可以再debug时候用 fmt.print 在golang中 是属于标准输出流,一般使用它来进行屏幕输出. fmt.Printf是格式化输出 fmt.Println是输出后换行 fmt.Sprint 是返回一个格式化的字符串 来源: https://www.cnblogs.com/zjyss/p/11953780.html