导航:首页 > 源码编译 > golang项目源码下载

golang项目源码下载

发布时间:2023-02-25 01:32:44

linux下怎么安装Go开发环境

一、Go安装使用

1、下载Go源码
https://storage.googleapis.com/golang/go1.6.3.linux-amd64.tar.gz

上传到/usr/local/src目录下

2、编译安装Go到/usr/local
tar zxvf go1.6.3.linux-amd64.tar.gz -C /usr/local/

#注:必须使用root账户或者使用sudo来解压缩Go源码包

3、设置PATH环境变量,添加/usr/local/go/bin到环境变量
export PATH=$PATH:/usr/local/go/bin

4、安装到自定义位置

Go二进制文件默认安装到/usr/local/go,但是可以安装Go工具到不同的位置,可以自行定义,只需要设置正确的环境变量。

例如,安装Go到家目录下,必须添加环境变量到$HOME/.profile
export GOROOT=$HOME/go

export PATH=$PATH:$GOROOT/bin

注:安装Go到其他目录时,GOROOT必须设置为环境变量

5、检查是否正确安装程序

通过设置一个工作区和建立一个简单的程序,检查是否正确安装了一个简单的程序。创建一个目录包含您的工作空间,例如/data/work,并设置GOPATH环境变量指向的位置。
export GOPATH=/data/work

#如果不存在/data/work,需要新建

然后,在你的工作内创建src/github.com/user/hello,如果使用github,可以使用自己的用户名代替user,在hello目录下,新建hello.go
# cat hello.go
package main
import "fmt"
func main {
fmt.Printf("hello,world!\n")
}

#使用go编译hello.go
go install github.com/user/hello

#上面的命令讲名叫hello(or hello.exe)的程序放到你的工作区内,执行下面命令,会得到输出结果。
$GOPATH/bin/hello

hello,world!

#当出现hello,world!表明Go已经安装成功可以工作。

二、Go工作区介绍

1、机构组织代码概述

Go语言程序通常将所有的代码保存在一个工作区中。

工作区包含许多版本控制库(由Git管理)。

每个存储库包含一个或多个包。

每个包由一个或多个在一个目录中的源文件组成。

一个包的目录的路径决定其导入路径。

注:同于其他的编程环境中,每一个项目都有一个独立的工作区且工作区是紧密联系在一起的版本控制库。

2、工作区介绍

工作区是一个目录层次结构,它的根目录有三个目录:

src 包含Go源文件

pkg 包含对象和包

bin 包含可执行命令
Go工具创建源码包并安装二进制文件到pkg和bin目录下
src目录通常包含多个版本控制库(如Git或Mercurial),跟踪一个或多个源包的开发。
下面展示一个好的工作区的例子:
bin/
hello # command executable
outyet # command executable
pkg/
linux_amd64/
github.com/golang/example/
stringutil.a # package object
src/
github.com/golang/example/
.git/ # Git repository metadata
hello/
hello.go # command source
outyet/
main.go # command source
main_test.go # test source
stringutil/
reverse.go # package source
reverse_test.go # test source
golang.org/x/image/
.git/ # Git repository metadata
bmp/
reader.go # package source
writer.go # package source
... (many more repositories and packages omitted) ...

上面的属性图展示了一个包含两个存储库(example和image)的工作区,example 存储库包含两个命令(hello,outyet),image库包含bmp包和几个其他的包。

一个典型的工作区包含包含许多软件包和命令的多个源库。大多数程序员将所有的源代码和依赖关系保存在一个工作区中

3、GOPATH环境变量设置

GOPATH环境变量指定工作区的位置。它很可能是唯一的环境变量,代码开发时需要设置。

开始,创建一个工作区目录并设置相应的gopath。您的工作区可以位于任何你喜欢的地方,但我们将在这个文档中使用/data/work。请注意,这不能是您的“Go安装”路径相同。
mkdir -p /data/work

export GOPATH=/data/work

为了方便。添加工作区的bin到PATH中
export PATH=$PATH:$GOPATH/bin

4、导入路径

一个导入路径是唯一标识一个包的字符串。一个包的导入路径对应于它在工作区内或远程存储库中的位置。

从标准库的软件包中给出了短的导入路径等。对于您自己的包,您必须选择不可能和未来添加到标准库或其他外部库的基础路径冲突的路径。

注意,你不需要将你的代码发布到一个远程存储库之前,你可以建立它。这只是一个很好的习惯来组织你的代码,如果你有一天会出版它。在实践中,你可以选择任何任意的路径名称,只要它是唯一的标准库和更大的去生态系统。

我们将使用github.com/user作为我们的基本路径。在您的工作区中创建一个目录,以保持源代码:
mkdir -p $GOPATH/src/github.com/user

5、第一个项目

编译并运行一个简单的程序,首先选择一个包的路径(我们将使用github.com/user/hello)和创建在您的工作区相应的软件包目录:
mkdir $GOPATH/src/github.com/user/hello

创建名叫hello.go的文件,上面创建过,此处略过。
cd $GOPATH/src/github.com/user/hello
go install
$GOPATH/bin/hello

或者:
hello

如果你使用的是一个源代码管理系统,现在是一个很好的时间来初始化一个存储库,添加文件,并提交你的第一次更改。再次,这一步是可选的:您不需要使用源代码管理来写代码。
cd $GOPATH/src/github.com/user/hello

git init

Initialized empty Git repository in /data/work/src/github.com/user/hello/.git/

git add hello.go

git commit -m "first commit"

[master (root-commit) bbfb477] first commit

6、first library

mkdir $GOPATH/src/github.com/user/stringutil

下一步,在目录下创建一个名为reverse.go文件中有下列内容:
// Package stringutil contains utility functions for working with strings.

package stringutil

// Reverse returns its argument string reversed rune-wise left to right.

func Reverse(s string) string {

r := []rune(s)

for i, j := 0, len(r)-1; i < len(r)/2; i, j = i+1, j-1 {

r[i], r[j] = r[j], r[i]

}

return string(r)

}

使用go build测试包的编译
$ go build github.com/user/stringutil

如果当前位置源码包目录,只需要:
go build

上面操作并不会产生一个输出文件,必须使用go install,把包和对象输出到工作去的pkg目录内

确认stringutil包创建完成后,修改原始hello.go,使用stringutil包:
package main

import (

"fmt"

"github.com/user/stringutil"

)

func main() {

fmt.Printf(stringutil.Reverse("\n !oG ,olleH"))

}

无论使用go安装包还是二进制文件,所有相关的依赖都会自动安装。所以当你安装hello程序时:
$ go install github.com/user/hello

对应的stringutil包会自动安装好。

执行新的hello程序,可以看到消息已经被反转
# hello

Hello, Go!

完成上面操作之后,工作区应该为:
├── bin

│ └── hello # command executable

├── pkg

│ └── linux_amd64 # this will reflect your OS and architecture

│ └── github.com

│ └── user

│ └── stringutil.a # package object

└── src

└── github.com

└── user

├── hello

│ └── hello.go # command source

└── stringutil

└── reverse.go # package source

注意:go install会把库文件stringutil.a放到pkg/linux_amd64下边(目录结构跟源代码结构一样)。这样可以go命令可以直接找到对应的包对象,避免不必要的重复编译。linux_amd64是为了根据操作系统和你的系统架构交叉编译。

所有Go可执行程序都通过静态方式链接在一起,所以在运行时是不需要相关的包对象(库)。

7、包命令

所有的Go源代码都以下面的语句开始:
package name

其中name就是包引用默认的名称,一个包中的所有文件必须使用同一个包名,可执行命令必须是main。

一个二进制文件下所有的包名不需要唯一,但是引用路径必须唯一

8、测试

Go自带了一个轻量级的测试框架,由go test和testing包组成。

可以通过新建xx_test.go写一个测试,其中包含若干个TestXXX函数。测试框架会自动执行这些函数;如果函数中包含tError或t.Fail, 对应的测试会被判为失败。

添加一个针对stringutil的测试文件$GOPATH/src/github.com/user/stringutil/reverse_test.go,包含以下内容:
package stringutil

import "testing"

func TestReverse(t *testing.T) {

cases := []struct {

in, want string

}{

{"Hello, world", "dlrow ,olleH"},

{"Hello, 世界", "界世,olleH"},

{"", ""},

}

for _, c := range cases {

got := Reverse(c.in)

if got != c.want {

t.Errorf("Reverse(%q) == %q, want %q", c.in, got, c.want)

}

}

}

#通过go test测试
# go test github.com/user/stringutil

ok github.com/user/stringutil 0.002s

#同样的,在包文件夹下可以忽略路径而直接执行go test
[root@zabbix stringutil]# go test

PASS

ok github.com/user/stringutil 0.002s

9、远程包

包的引用路径用来描述如何通过版本控制系统获取包的源代码。go工具通过引用路径自动从远程代码仓库获取包文件。比如本文中用的例子也对应的保存在github.com/golang/example下。go可以通过包的代码仓库的url直接获取、生成、安装对应的包。
[root@zabbix ~]# go get github.com/golang/example/hello

[root@zabbix ~]# $GOPATH/bin/hello

Hello, Go examples!

如果工作区中不存在对应的包,go会将对应的包放到GOPATH环境变量指明的工作区下。(如果包已经存在,go跳过代码拉去而直接执行go install)
建议详细看一下http://www.linuxprobe.com/set-go-env.html这个,有图文

㈡ 如何编译arm linux的go

Golang也就是Go语言,现在已经发行到1.4.1版本了,语言特性优越性和背后Google强大靠山什么的就不多说了。Golang的官方提供了多个平台上的二进制安装包,遗憾的是并非没有发布ARM平台的二进制安装包。ARM平台没办法直接从官网下载二进制安装包来安装,好在Golang是支持多平台并且开源的语言,因此可以通过直接在ARM平台上编译源代码来安装。整个过程主要包括编译工具配置、获取Golang源代码、设置Golang编译环境变量、编译、配置Golang行环境变量等步骤。
注:本文选用树莓派做测试,因为树莓派是基于ARM平台的。

1、编译工具配置
据说下个版本的golang编译工具要使用golang自己来写,但目前还是使用C编译工具的。因此,首先要配置好C编译工具:
1.1 在Ubuntu或Debian平台上可以使用sudo apt-get install gcc libc6-dev命令安装,树莓派的RaspBian系统是基于Debian修改的,所以可以使用这种方法安装。
1.2 在RedHat或CentOS 6平台上可以使用sudo yum install gcc libc-devel命令安装。
安装完成后可以输入 gcc --version命令验证是否成功安装。

2、获取golang源代码
2.1 直接从官网下载源代码压缩包。
golang官网提供golang的源代码压缩包,可以直接下载,最新的1.4.1版本源代码链接:https://storage.googleapis.com/golang/go1.4.1.src.tar.gz
2.2 使用git工具获取。
golang使用git版本管理工具,也可以使用git获取golang源代码。推荐使用这个方法,因为以后可以随时获取最新的golang源代码。
2.2.1 首先确认ARM平台上已经安装了git工具,可以使用git --version命令确认。一般linux平台都安装了git,没有的话可以自行安装,不同平台的安装方法可以参考:http://git-scm.com/download/linux
2.2.2 克隆远程golang的git仓库到本地
在终端cd到你想要安装golang的目录,确保该目录下没有名为go的目录。然后以下命令获取代码仓库:
git clone https://go.googlesource.com/go
大陆地区可能会获取失败,在不翻墙的情况下我试了几次都没成功,原因大家都懂的。好在google已经将golang也托管到github上面,所以也可以通过下面命令获取:
git clone https://github.com/golang/go.git
视网络情况,下载可能需要不少时间。我2M的带宽花了将近两个小时才下载完,虽然整个项目不过几十兆= =
下载完成后,可以看到目录下多了一个go目录,里面即为golang的源代码,在终端上执行cd go命令进入该目录。
执行下面命令检出go1.4.1版本的源代码,因为现在已经有新的代码提交上去了,最新的代码可能不是最稳定的:
git checkout go1.4.1
至此,最新1.4.1发行版的源代码获取完毕

3、设置golang的编译环境变量
主要有GOROOT、GOOS、GOARCH、GOARM四个环境变量需要设置,先解释四个环境变量的意义。
3.1 GOROOT
主要代表golang树结构目录的路径,也就是上面git检出的go目录。一般可以不用设置这个环境变量,因为编译的时候默认会以go目录下src子目录中的all.bash脚本运行时的父目录作为GOROOT的值。为了保险起见,可以直接设置为go目录的路径。
3.2 GOOS和GOARCH
分别代表编译的目标系统和平台,可选值如下:

GOOS GOARCH
darwin 386
darwin amd64
dragonfly 386
dragonfly amd64
freebsd 386
freebsd amd64
freebsd arm
linux 386
linux amd64
linux arm
netbsd 386
netbsd amd64
netbsd arm
openbsd 386
openbsd amd64
plan9 386
plan9 amd64
solaris amd64
windows 386
windows amd64
需要注意的是这两个值代表的是目标系统和平台,而不是编译源代码的系统和平台。树莓派的RaspBian是linux系统,所以这些GOOS设置为linux,GOARCH设置为arm。
3.3 GOARM
表示使用的浮点运算协处理器版本号,只对arm平台有用,可选值有5,6,7。如果是在目标平台上编译源代码,这个值可以不设置,它会自动判断需要使用哪一个版本。
总结下来,在树莓派上设置golang的编译环境变量,可编辑$HOME/.bashrc文件,在末尾添加下面内容:
export GOROOT=你的go目录路径
export GOOS=linux
export GOARCH=arm
编辑完后保存,执行source ~/.bashrc命令让修改生效。

4、编译源代码
环境变量配置完成自后就可以开始编译源代码。在go目录下的src子目录中,主要有all.bash和make.bash两个脚本(另外还有两个all.bat和make.bat脚本适用于window平台)。编译实际上就是执行其中一个脚本,两者的区别在于all.bash在编译完成后还会执行一些测试套件。如果希望只编译不测试,可以运行make.bash脚本。使用cd命令进入go下src目录,执行./all.bash或者./make.bash命令即可开始编译。由于硬件情况不同,编译耗费的时间不同。在我的B型树莓派编译过程花费了将近半个小时,编译完成后执行的测试套件又花费了差不多一个小时,总共花费了一个半小时左右。

5、配置golang运行环境变量
编译完成后,go目录下会生成bin目录,里面就是go的运行脚本。为了以后使用方法,可以将这个bin路径添加到PATH环境变量中。同样编辑~/.bashrc文件,因为前面设置过GOROOT环境变量指向go目录了,所以只需要在末尾加上
export PATH=$PATH:$GOROOT/bin
保存后同样执行source ~/.bashrc命令让环境变量生效。

至此,golang源代码编译安装成功。执行go version应该就能看到当前golang的版本信息,表示编译安装成功。

㈢ Golang database/sql源码分析

Gorm是Go语言开发用的比较多的一个ORM。它的功能比较全:

但是这篇文章中并不会直接看Gorm的源码,我们会先从database/sql分析。原因是Gorm也是基于这个包来封装的一些功能。所以只有先了解了database/sql包才能更加好的理解Gorm源码。

database/sql 其实也是一个对于mysql驱动的上层封装。”github.com/go-sql-driver/mysql”就是一个对于mysql的驱动,database/sql 就是在这个基础上做的基本封装包含连接池的使用

下面这个是最基本的增删改查操作

操作分下面几个步骤:

因为Gorm的连接池就是使用database/sql包中的连接池,所以这里我们需要学习一下包里的连接池的源码实现。其实所有连接池最重要的就是连接池对象、获取函数、释放函数下面来看一下database/sql中的连接池。

DB对象

获取方法

释放连接方法

连接池的实现有很多方法,在database/sql包中使用的是chan阻塞 使用map记录等待列表,等到有连接释放的时候再把连接传入等待列表中的chan 不在阻塞返回连接。

之前我们看到的Redigo是使用一个chan 来阻塞,然后释放的时候放入空闲列表,在往这一个chan中传入struct{}{},让程序继续 获取的时候再从空闲列表中获取。并且使用的是链表的结构来存储空闲列表。

database/sql 是对于mysql驱动的封装,然而Gorm则是对于database/sql的再次封装。让我们可以更加简单的实现对于mysql数据库的操作。

㈣ 如何到载百度网议

不久之前,机器之心联合网络推出 PaddlePaddle 专栏,为想要学习这一平台的技术人员推荐相关教程与资源。在解析过PaddlePaddle框架之后,从这篇文章开始上手,安装 PaddlePaddle。
目录
环境
Windows 系统的安装
在 Windows 上安装 Docker 容器在 Windows 上安装 Ubuntu
使用 pip 安装
使用 Docker 安装
从源码编译生成安装包
在本地编译生成安装包在 Docker 编译生成安装包
编译 Docker 镜像
测试安装环境
最后提示
项目代码
参考资料
环境
系统:Ubuntu 16.0.4(64 位)处理器:Intel(R) Celeron(R) CPU内存:8G
Windows 系统的安装
PaddlePaddle 目前还不支持 Windows,如果读者直接在 Windows 上安装 PaddlePaddlePaddle 的话,就会提示没有找到该安装包。如果读者一定要在 Windows 上工作的话,笔者提供两个建议:一、在 Windows 系统上使用 Docker 容器,在 Docker 容器上安装带有 PaddlePaddle 的镜像;二、在 Windows 系统上安装虚拟机,再在虚拟机上安装 Ubuntu。
在 Windows 上安装 Docker 容器
首先下载 Docker 容器的工具包 DockerToolbox,笔者使用这个安装包不仅仅只有 Docker,它还包含了 VirtualBox 虚拟机,使用者工具包我们就不用单独去安装 VirtualBox 虚拟机了,DockerToolbox 的官网下载地址:https://docs.docker.com/toolbox/toolbox_install_windows/
下载之后,就可以直接安装了,双击安装包,开始安装

选择安装路径,笔者使用默认的安装路径

然后安装所依赖的软件,因为笔者之前在电脑上已经安装了 git,所以在这里就不安装了,其他都要勾选

这一步不用修改什么,让程序为我们创建一个桌面快捷键

最后就可以安装了,等待一小段时间即可

到这里就安装完成了

安装完成之后,如果直接启动 Docker 的话,有可能可能会卡在这里,因为还有下载一个 boot2docker.iso 镜像,网速比较慢的话就可能一直卡在这里。所以我们还要镜像下一步操作

Running pre-create checks...
(default) No default Boot2Docker ISO found locally, downloading the latest release...
(default) Latest release for github.com/boot2docker/boot2docker is v17.12.1-ce
(default) Downloading C:\Users\15696\.docker\machine\cache\boot2docker.iso from https://github.com/boot2docker/boot2docker/releases/download/v17.12.1-ce/boot2docker.iso...
在下载 DockerToolbox 的时候,这个工具就已经带有 boot2docker.iso 镜像了。并且存在 DockerToolbox 安装的路径上,笔者的路径是:
C:\Program Files\Docker Toolbox\boot2docker.iso
我们把这个镜像复制到用户目录\.docker\machine\cache\,如笔者的目录如下:

C:\Users\15696\.docker\machine\cache\
复制完成之后,双击桌面快捷方式 Docker Quickstart Terminal,启动 Docker,命令窗口会输出以下信息:

Running pre-create checks...
Creating machine...
(default) Copying C:\Users\15696\.docker\machine\cache\boot2docker.iso to C:\Users\15696\.docker\machine\machines\default\boot2docker.iso...
(default) Creating VirtualBox VM...
(default) Creating SSH key...
(default) Starting the VM...
(default) Check network to re-create if needed...
(default) Windows might ask for the permission to create a network adapter. Sometimes, such confirmation window is minimized in the taskbar.
(default) Found a new host-only adapter: "VirtualBox Host-Only Ethernet Adapter #3"
(default) Windows might ask for the permission to configure a network adapter. Sometimes, such confirmation window is minimized in the taskbar.
(default) Windows might ask for the permission to configure a dhcp server. Sometimes, such confirmation window is minimized in the taskbar.

(default) Waiting for an IP...
最后看到 Docker 的 logo 就表示成功安装 Docker 容器了

## .
## ## ## ==
## ## ## ## ## ===
/"""""""""""""""""\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\_______/
docker is configured to use the default machine with IP 192.168.99.100
For help getting started, check out the docs at https://docs.docker.com
Start interactive shell
15696@ MINGW64 ~
$
到这就可以使用 Docker 来安装 PaddlePaddle 了,具体请看本文章中关于 Docker 使用 PaddlePaddle 部分
在 Windows 上安装 Ubuntu
在 Windows 上在 Ubuntu 就要先安装虚拟机,虚拟机有很多,笔者使用的是开源的 VirtualBox 虚拟机,VirtualBox 的官网:https://www.virtualbox.org/
安装完成 VirtualBox 虚拟机之后,进入到 VirtualBox 虚拟机中点击新建,创建一个系统

选择分配的内存,我这里只是分配了 2G,如果正式使用 PaddlePaddle 训练模型,这远远不够,读者可以根据需求分配内存

创建一个虚拟硬盘

选择默认的 VDI 硬盘文件类型

这里最好是选择动态分配硬盘,这样虚拟机会根据实际占用的空间大小使用电脑本身的磁盘大小,这样会减少电脑空间的占用率的。如果是固定大小,那么创建的虚拟机的虚拟硬盘一开始就是用户设置的大小了。

这里就是选择虚拟硬盘大小的,最后分配 20G 以上,笔者分配 30G,应该够用。

然后选择刚才创建的 Ubuntu 系统,点击设置,这系统中取消勾选软驱,然后点击存储,选择 Ubuntu 镜像,笔者使用的是 64 位 Ubuntu 16.04 桌面版的镜像

最后就可以启动安装 Ubuntu 了。选择我们创建的 Ubuntu 系统,点击启动,进入到开始安装界面,为了方便使用,笔者选择中文版的

为了安装之后不用在安装和更新应用,笔者勾选了安装 Ubuntu 时下载更新,这样在安装的时候就已经更新应用了

然后是选安装的硬盘,因为我们使用的自己创建的整一个硬盘,所以我们可以直接选择青春整个硬盘并安装 Ubuntu,这里就不用考虑分区和挂载问题了

选择所在的位置,这没什么要求的,笔者随便选择一个城市

然后是选择键盘的布局,通常的键盘布局都是英语(美国)

创建 Ubuntu 的用户名称和密码

最后就是安装了,这个安装过程可能有点久,耐心等待

安装完成之后就可以在 Windows 系统上使用 Ubuntu 系统了,我们再使用 Ubuntu 来学习和使用 PaddlePaddle 做深度学习了。最好安装完成之后,把在存储中设置的 Ubuntu 镜像移除

在本篇文章之后部分都是在 Ubuntu 上操作,我们都可以使用 Ubuntu 这虚拟机来完成。
如果读者使用的是 Windows 10,可以使用 Windows 系统自带的 Linux 子系统,安装教程可以看我之前的文章 Windows10 安装 Linux 子系统。
使用 pip 安装
如果你还没有在 pip 命令的话,首先要安装 pip,要确保安装的 pip 版本是大于 9.0.0 的,否则可能无法安装 paddlepaddle。
安装 pip 命令如下:

sudo apt install python-pip
安装之后,还有看一下 pip 的的版本 pip --version,如果版本低于 9.0.0,那要先升级 pip,先要下载一个升级文件,命令如下:

wget https://bootstrap.pypa.io/get-pip.py
下载完成之后,可以使用这个文件安装最新的 pip 了

python get-pip.py
安装 pip 就可以动手安装 paddlepaddle 了。如果权限不够,请在 root 下执行命令
pip install paddlepaddle
现在就测试看看 paddlepaddle 有没有,在 python 的命令终端中试着导入 paddlepaddle 包:

import paddle.v2 as paddle
如果没有报错的话就证明 paddlepaddle 安装成功了。
使用 Docker 安装
为什么要使用 Docker 安装 paddlepaddle 呢,Docker 是完全使用沙箱机制的一个容器,在这个容器安装的环境是不会影响到本身系统的环境的。通俗来说,它就是一个虚拟机,但是它本身的性能开销很小。在使用 Docker 安装 paddlepaddle 前,首先要安装 Docker,通过下面的命令就可以安装了:

sudo apt-get install docker
安装完成之后,可以使用 docker --version 查看 Docker 的版本,如果有显示,就证明安装成功了。可以使用 docker images 查看已经安装的镜像。
一切都没有问题之后,就可以用 Docker 安装 paddlepaddle 了,命令如下:

docker pull docker.paddlepaddlehub.com/paddle
在这里不得不说的是,这个安装过程非常久,也许是笔者的带宽太小了。安装完成后,可以再使用 docker images 命令查看安装的镜像,应该可以 看到类似这样一个镜像,名字和 TAG 会相同,其他信息一般不同

docker.paddlepaddlehub.com/paddle latest 2b1ae16d846e 27 hours ago 1.338 GB
从源码编译生成安装包
我们的硬件环境都有很大的不同,官方给出的 pip 安装包不一定是符合我们的需求,比如笔者的电脑是不支持 AVX 指令集的,在官方中没找到这个的安装包(也行现在已经有了),所以我们要根据自己的需求来打包一个自己的安装包。
在本地编译生成安装包
1. 安装依赖环境
在一切开始之前,先要安装好依赖环境,下面表格是官方给出的依赖环境

1.1 安装 GCC
一般现在的 Ubuntu 都是高于个版本了,可以使用 gcc --version 查看安装的版本。比如笔者的是 4.8.4,如果你的是版本是低于 4.8.2 的就要更新一下了

sudo apt-get install gcc-4.9
1.2 安装 CMake
先要从官网下 CMake 源码
wget https://cmake.org/files/v3.8/cmake-3.8.0.tar.gz
解压源码

tar -zxvf cmake-3.8.0.tar.gz
依次执行下面的代码

# 进入解压后的目录
cd cmake-3.8.0
# 执行当前目录的 bootstrap 程序
./bootstrap
# make 一下
make
# 开始安装
sudo make install
查看是否安装成功,cmake --version,如果正常显示版本,那已经安装成功了。
1.3 安装 pip
关于安装 pip9.0.0 以上的版本,在上面的使用 pip 安装部分已经讲了,这里就不在熬述了
1.4 安装 numpy
安装 numpy 很简单,一条命令就够了

sudo apt-get install python-numpy
顺便多说一点,matplotlib 这个包也经常用到,顺便安装一下

sudo apt-get install python-matplotlib
1.5 安装 SWIG
执行下面代码安装 SWIG,安装成功之后,使用 swig -version 检查安装结果

sudo apt-get install -y git curl gfortran make build-essential automake swig libboost-all-dev
1.6 安装 Go
官方说可选择,那看情况吧,如果像安装安装吧,笔者顺便安装了,就一条代码的事情,老规则 go version

sudo apt-get install golang
到这里,依赖环境就已经安装好了,准备安装 paddlepaddle。
2. 首先要在 GitHub 上获取 paddlepaddle 源码

git clone https://github.com/PaddlePaddle/Paddle.git
3. 然后输以下命令

# 进入刚下载的 Paddle 里面
cd Paddle
# 创建一个 build 文件夹
mkdir build
# 进入 build 文件夹里
cd build
# 这就要选好你的需求了,比如笔者没有使用 GPU,不支持 AVX,为了节省空间,我把测试关闭了,这样会少很多空间。最后不要少了..
cmake .. -DWITH_GPU=OFF -DWITH_AVX=OFF -DWITH_TESTING=OFF
# 最后 make,生成你想要的安装包,这个可能很久, 一定要有耐心
make
经过长久的 make 之后,终于生成了我们想要的安装包,它的路径在 Paddle/build/python/dist 下,比如笔者在该目录下有这个安装包 paddlepaddle-0.11.0-cp27-cp27mu-linux_x86_64.whl,你的命名可能不是这个。之后就可以安装了,使用 pip 安装:

# 请切入到该目录
cd build/python/dist/
# 每个人的安装包名字可能不一样。如果权限不够,请在 root 下执行命令

pip install paddlepaddle-0.11.0-cp27-cp27mu-linux_x86_64.whl
这个我们就已经安装了 paddlepaddle,现在就测试看看 paddlepaddle 有没有安装成功了,在 python 的命令终端中试着导入 paddlepaddle 包:

import paddle.v2 as paddle
如果没有报错的话就证明 paddlepaddle 安装成功了。
在 Docker 编译生成安装包
使用 Docker 就轻松很多了,有多轻松,看一下便知 。
1. 首先要在 GitHub 上获取 paddlepaddle 源码

git clone https://github.com/PaddlePaddle/Paddle.git
2. 切入到项目的根目录下

cd Paddle
3. 生成安装包
下面一行代码,提醒一下,这个过程非常长,一定要有耐心,顺便把编译测试关了,减少空间

docker run -it -v $PWD:/paddle -e "WITH_GPU=OFF" -e "WITH_AVX=OFF" -e "-DWITH_TESTING=OFF" docker.paddlepaddlehub.com/paddle:latest-dev bash -x /paddle/paddle/scripts/docker/build.sh
同样会在 Paddle/build/python/dist 下生成一个安装包,这对比在本地生成的安装包,是不是要简单很多,没错这就是 Docker 强大之处,所有的依赖环境都帮我们安装好了,现在只要安装这个安装包就行了:

# 请切入到该目录
cd build/python/dist/
# 每个人的安装包名字可能不一样。如果权限不够,请在 root 下执行命令
pip install paddlepaddle-0.11.0-cp27-cp27mu-linux_x86_64.whl
同样我们要测试看看 paddlepaddle 有没有安装成功了,在 python 的命令终端中试着导入 paddlepaddle 包:

import paddle.v2 as paddle
如果没有报错的话就证明 paddlepaddle 安装成功了。
编译 Docker 镜像
如果你比较喜欢使用 Docker 来运行你的 paddlepaddle 代码,但是有没有你想要的镜像,这是就要自己来制作一个 Docker 镜像了,比如笔者的电脑是不支持 AVX 指令集的,还只有 CPU,那么我就要一个不用 AVX 指令集和使用 CPU 训练的镜像。好吧,我们开始吧
1. 我们要从 GitHub 下载源码:

git clone https://github.com/PaddlePaddle/Paddle.git
2. 安装开发工具到 Docker image 里

# 切入到 Paddle 目录下
cd Paddle
# 下载依赖环境并创建镜像,别少了最后的.

docker build -t paddle:dev .
有可能它不能够命名为 paddle:dev,我们可以对他从重新命名,ID 要是你镜像的 ID

# docker tag <镜像对应的 ID> <镜像名:TAG>
例如:docker tag 1e835127cf33 paddle:dev
3. 编译
# 这个编译要很久的,请耐心等待

docker run --rm -e WITH_GPU=OFF -e WITH_AVX=OFF -v $PWD:/paddle paddle:dev
安装完成之后,使用 docker images 查看刚才安装的镜像。
测试安装环境
我们就使用官方给出的一个例子,来测试我们安装 paddlepaddle 真的安装成功了
1. 创建一个记事本,命名为 housing.py,并输入以下代码:

import paddle.v2 as paddle
# Initialize PaddlePaddle.
paddle.init(use_gpu=False, trainer_count=1)
# Configure the neural network.
x = paddle.layer.data(name='x', type=paddle.data_type.dense_vector(13))
y_predict = paddle.layer.fc(input=x, size=1, act=paddle.activation.Linear())
# Infer using provided test data.
probs = paddle.infer(
output_layer=y_predict,
parameters=paddle.dataset.uci_housing.model(),
input=[item for item in paddle.dataset.uci_housing.test()()])
for i in xrange(len(probs)):
print 'Predicted price: ${:,.2f}'.format(probs[i][0] * 1000)
2. 执行一下该代码
在本地执行代码请输入下面的命令
python housing.py
在 Docker 上执行代码的请输入下面的代码

docker run -v $PWD:/work -w /work -p 8899:8899 docker.paddlepaddle.org/paddle python housing.py
-v 命令是把本地目录挂载到 docker 镜像的目录上,-w 设置该目录为工作目录,-p 设置端口号,使用到的镜像是在使用 Docker 安装部分安装的镜像 docker.paddlepaddle.org/paddle
3. 终端会输出下面类似的日志

I0116 08:40:12.004096 1 Util.cpp:166] commandline: --use_gpu=False --trainer_count=1
Cache file /root/.cache/paddle/dataset/fit_a_line.tar/fit_a_line.tar not found, downloading https://github.com/PaddlePaddle/book/raw/develop/01.fit_a_line/fit_a_line.tar
[==================================================]
Cache file /root/.cache/paddle/dataset/uci_housing/housing.data not found, downloading https://archive.ics.uci.e/ml/machine-learning-databases/housing/housing.data
[==================================================]
Predicted price: $12,316.63
Predicted price: $13,830.34
Predicted price: $11,499.34
Predicted price: $17,395.05
Predicted price: $13,317.67
Predicted price: $16,834.08

Predicted price: $16,632.04
如果没有成功运行该代码,报错信息如下,说明安装的 paddlepaddle 版本过低,请安装高版本的 paddlepaddle

I0116 13:53:48.957136 15297 Util.cpp:166] commandline: --use_gpu=False --trainer_count=1
Traceback (most recent call last):
File "housing.py", line 13, in <mole>
parameters=paddle.dataset.uci_housing.model(),

AttributeError: 'mole' object has no attribute 'model'
最后提示
有很多学习者会出现明明安装完成 PaddlePaddle 了,但是在 PaddlePaddle 的时候,在初始化 PaddlePaddle 这一行代码出错

paddle.init(use_gpu=False, trainer_count=1)
这个多数是读者的电脑不支持 AVX 指令集,而在 PaddlePaddle 的时候,安装的是支持 AVX 指令集的版本,所以导致在初始化 PaddlePaddle 的时候报错。所以在安装或者编译 PaddlePaddle 安装包时,要根据读者电脑本身的情况,选择是否支持 AVX 指令集。查看电脑是否支持 AVX 指令集,可以在终端输入以下命令,输出 Yes 表示支持,输出 No 表示不支持。
if cat /proc/cpuinfo | grep -i avx; then echo Yes; else echo No; fi
项目代码
GitHub 地址:https://github.com/yeyupiaoling/LearnPaddle
参考资料
http://paddlepaddle.org/
https://pip.pypa.io/en/stable/
http://www.runoob.com/
http://www.linuxidc.com/Linux/2016-12/138489.htm
https://www.jianshu.com/p/c6264cd5f5c7

㈤ Go语言的开源项目

1.Docker项目
网址为 https://github.com/docker/docker 。
介绍:Docker是一种操作系统层面的虚拟化技术,可以在操作系统和应用程序之间进行隔离,也可以称之为容器。Docker可以在一台物理服务器上快速运行一个或多个实例。例如,启动一个Cent OS操作系统,并在其内部命令行执行指令后结束,整个过程就像自己在操作系统一样高效。
2.golang项目
网址为 https://github.com/golang/go 。
介绍:Go语言的早期源码使用C语言和汇编语言写成。从Go 1.5版本自举后,完全使用Go语言自身进行编写。Go语言的源码对了解Go语言的底层调度有极大的参考意义,建议希望对Go语言有深入了解的读者读一读。
3.Kubernetes项目
网址为 https://github.com/kubernetes/kubernetes 。
介绍:Google公司开发的构建于Docker之上的容器调度服务,用户可以通过Kubernetes集群进行云端容器集群管理。
4.etcd项目
网址为 https://github.com/coreos/etcd 。
介绍:一款分布式、可靠的KV存储系统,可以快速进行云配置。
5.beego项目
网址为 https://github.com/astaxie/beego 。
介绍:beego是一个类似Python的Tornado框架,采用了RESTFul的设计思路,使用Go语言编写的一个极轻量级、高可伸缩性和高性能的Web应用框架。
6.martini项目
网址为 https://github.com/go-martini/martini 。
介绍:一款快速构建模块化的Web应用的Web框架。
7.codis项目
网址为 https://github.com/Codis Labs/codis。
介绍:国产的优秀分布式Redis解决方案。
8.delve项目
网址为 https://github.com/derekparker/delve 。
介绍:Go语言强大的调试器,被很多集成环境和编辑器整合。

㈥ golang 多人开发怎么保证源码安全

随着PHP有着越来越深入的了解,以及遇到越来越多的不同业务时,使用PHP总会让我有一种莫名的无力感。当然,并不是我一个人在使用PHP的时候遇到了问题。事实上,每个略微有一些经验,接触过一些需求的人都会有同样的困惑。各种配合LAMP(或者LNMP?)架构的后端技术也因此被发明或被发现,进而整合到PHP的开发的技术体系中。从简单的Memcached作为数据中转,cron后端定时处理;到Gearman、RabbitMQ这些队列神器;最近Laruence甚至封装了利用libcurl的异步特性实现并发RPC调用的yar扩展。几乎整个社区都在寻找PHP的摩西之路。好吧,说了一大堆,回归主题。之前我写了一篇英文练笔《》,获得不少国际友人的关注。排除拼写和语法被他们诟病外,主要是有许多朋友觉得我没把事情说清楚。所以这里我用母语重新聊聊这个事情,只是这些国际友人什么时候能学会阅读中文呢?;)Go或者Golang,是由Google支持的快速、一致、稳定的,有活跃的社区支持的开源编程语言。越来越多的应用选择使用Golang进行构建。虽然RobPike说“…我们希望C++程序员来了解Go并作为一个可选的语言…”,不过我真得认为:PHPer应当学习Golang!接下来我们就来谈谈原因。容易学习PHP相当容易学习。Golang也是!在这点上,一群大老外对我的观点进行了猛烈的抨击。他们认为我羞辱了PHPer,说得好像只有简单的东西PHPer才能学会一样。但是,这难道不是事实吗?或者换个说法:像我一样的喜欢PHP的人,或多或少都会更喜欢简单的东西。PHP的语法接近C族编程语言(C/C++/Java等等)。如果有这些语言的经验,在第一次遇到PHP的时候立刻就能开始上手编写代码。在我看来,编写PHP代码或许更加考验程序员的记忆力,而不是智力(当你面对各种不同风格的函数定义、各种扩展的特殊约定时,你一定会相当认同我的观点)。Golang同样是一个C族编程语言。呃,或者有一些不同吧。例如关键字“for”,功能上和PHP的接近,但是没有括号。条件语句“if”同样无需括号。可以阅读EffectiveGo了解内容。Golang只有3025个关键字和47个操作符号、分隔符号或其他特殊标记。记住这些标记确实不需要什么特别的努力。精巧的类型系统相当容易使用。实用的,具有方法的结构体类型代替了笨重的对象系统。接口的设计是Golang中我最喜欢的部分。当完成了《Go指南》的学习之后,利用PHP积累的经验,立刻就可以开始使用Golang处理一些简单的任务。容易使用PHP脚本是由SAPI组件进行解析执行的,如Web服务器模块、PHP-FPM或者CLI。部署PHP所需要的全部东西就是一个SAPI环境。配置这个环境对于新手来说可能是学习PHP过程中最为困难的部分。所有的Golang代码会编译和链接为本地码。所以除了编译环境,执行时无需再为其进行任何特别的部署。对比PHP环境的配置,这要简单很多。你真得认为配置PHP环境很复杂吗?我不觉得,真的!而配置Golang编译环境比那还要简单点。我确信已经有大量的Golang相关的书籍、文章介绍过如何进行编译环境的配置了。为了更加清晰,我这里梳理一下思路。有三个步骤需要处理:下载Golang的源代码;根据《[翻译]Go环境设置》的提示设置环境变量;运行源代码src目录中的all.bash。或者一步到位:使用二进制包进行安装。然后就会得到一个叫做“go”的工具集合。使用“go”工具和使用PHP的CLI工具一样简单。《[翻译]go工具》对此进行了详细的解释。PHP的迷思如果一个编程语言容易学习和使用,我们是不是就应当学习它呢?有许多容易学习和使用的编程语言。难道要把它们都学一遍?答案是显然的:NO!但是呢?只是因为它很酷!是的,我在开玩笑,但是这是真的。无论如何先从PHP自身谈起吧。PHP“原本是为了开发动态的Web页面而设计的服务器端通用语言(Wikipedia)”。PHP一个重要的特性就是可以嵌入到HMTL中。代码编写在“”标签内;HTML写在标签外。它有一个强大的扩展系统。扩展使用C调用ZendAPI编写。数据的处理实际上要利用这些扩展完成。在我看来,PHP是世界上最好的模板语言。但是当积累了一些PHP的经验,并且开始面对一些更加复杂的Web应用时,你一定会对PHP产生一种无力的感觉。它没有内建的并行机制,没有线程、进程(你真得认为那个简陋的进程控制可以不加改造的用在高并发的生产环境?),或者其他某“程”。一个慢数据源可以阻塞整个页面的处理。消息队列、缓存、代理……系统开始不仅仅是PHP这么单纯,还包括了许多服务和系统组件。这时,PHP只处理很少的业务逻辑,成为真正的模板语言了。PHPer们总是在寻找解决这一问题的法,如“PHPmultithread”或者PHPRPC并发框架。我很难说哪种会更好一些。不过我肯定你会需要选择一些编程语言用于后端工作的开发。就我自己的经验,我尝试过C(一直在和malloc/free进行搏斗)/Java(陷入到了jar地狱中)/Python(从来没能做到Pythonic不说,还总是在错误的类型中打转)……如果想要获得性能,就得同内存管理进行搏斗;如果用GC,就得部署和调优VM;当获得便利性的时候,同时也是走在刀尖上,一个小错误就引起巨大的灾难……每个都有优势,同样每个都有问题。好吧!现在回到Golang!Golang有GC,无需关心内存管理(或者可以用较少的精力去关注它)。代码被编译为本地码,因此“cp”和“mv”就是部署Golang编写的应用所需要的全部工具。噢,我刚才已经说过了,Golang是一个具有静态类型系统的编译语言。所以你没有机会弄乱变量的类型。当然,PHPer应该学习Golang的一个重要原因是“转到Go是因为他们并未放弃太多的表达能力,但是获得了性能,并且与并发共舞(RobPike)”。《WhyNotGo?(英文)》对此进行了深入的分析。我可以分享一些我的经验:有一个Gearman的worker用于处理后端数据。PHP通过其API连接到Gearman的JobServer向worker发起请求。最初worker是使用python编写的(还有更加原始的版本,PHP的,但是你能想象它工作起来……唉,不说了……)。这个版本有许多的问题(是我们自己的问题,不关Python的事),但是至少它能工作。后来用Golang重写了这个worker。为此我开发了Golang的GearmanAPI,并使用ZendAPI编写了一个在Golang中执行PHP脚本的包。然后将它们放在一起:一个可以执行PHP的Gearmanworker。它已经工作了一段时间了,看起来还不错!哦,受到Yar的启发,这里还有一个Golang编写的RPC合并器,用来合并PHP脚本中的RPC调用。现在还是个玩具,不过或许日后能用得着。这其实是将Golang的channel当作消息队列来用。我在《Golang:有趣的channel应用》中对此有一些说明。世界真美好啊。谢谢Golang!无论如何,大多数PHPer在进行后端开发的时候都会需要学习一些其他语言。如果你正在寻找,或者已经尝试了一些其他语言。为什么不来试试Golang?它真得可以让你的生活更加轻松和快乐。让你可以有的时间陪伴你的家人和朋友,吃你爱吃的东西,去你想去的地方。貌似我还是没说清楚啊?好吧,没关系,在下个月的中国软件开发者大会上再跟大家就这个话题做一个探讨吧。

阅读全文

与golang项目源码下载相关的资料

热点内容
库房管理系统源码 浏览:59
安卓应用多为什么会卡 浏览:10
php程序员工作职责 浏览:306
程序员可以转行做运维吗 浏览:323
如何检测到服务器端口是否通 浏览:851
linuxsed正则 浏览:109
linux安装gz文件 浏览:357
linux如何卸载编译的软件 浏览:929
高三解压活动视频 浏览:780
如何把服务器卡爆 浏览:949
饿了么java程序员 浏览:960
python编译时找不到路径 浏览:910
jpg转换pdf软件 浏览:103
php读取json文件 浏览:866
螺杆压缩机的功率计算 浏览:74
谷轮压缩机c 浏览:338
苹果app如何复制到另一个手机 浏览:834
javasession超时 浏览:831
易金通app怎么更改手机号 浏览:493
plc数控编程的方法 浏览:989