Go语言中文网 为您找到相关结果 149

golang判断文件或文件夹是否存在

golang判断文件或文件夹是否存在的方法为使用os.Stat()函数返回的错误值进行判断: 如果返回的错误为nil,说明文件或文件夹存在如果返回的错误类型使用os.IsNotExist()判断为true,说明文件或文件夹不存在如果返回的错误为其它类型,则不确定是否在存在 func PathExists(path string) (bool, error) { _, err := os.Stat(path) if err == nil { return true, nil } if os.IsNotExist(err) { return false, nil } return false, err ...阅读全文

博文 2015-11-28 16:00:01 xielingyun

学习go语言碰到的问题:main redeclared in this block

E:\goapp 是我的GOPATH目录 分别建立了2个文件: hello.go // hello package main import "fmt" func main() { fmt.Println("Hello World! 你好,世界!") } sandbox.go // sandbox package main import ( "fmt" "time" ) func main() { fmt.Println("Welcome to the playground!") fmt.Println("The time is ", time.Now()) } 在liteide运行BR的时候报错了:main redeclared in this block previous declarat...阅读全文

博文 2015-06-17 23:02:23 lz0426001

无法安装 golang.org/x/tools/的库

安装godep 官方的安装文档是使用go get github.com/tools/godep,很可惜,因为“网络”问题会报一个找不到golang.org/x/tools/go/vcs的错误。 而https://github.com/golang/tools 是 golang.org/x/tools的一个镜像,代码是一样的,所以我是如下安装的。 go get github.com/golang/tools 在GOPATH\src\github.com目录下就有tools文件夹。 在src下和github.com平级新建golang.org文件下,在此文件夹下建x文件夹,然后将tools都复制进去。 然后再执行go get github.com/tools/godep。 此时godep安装在你...阅读全文

博文 2016-05-20 02:00:01 diegodu

GO语言学习: 项目构建 及编译 初步

一个GO工程中主要包含以下三个目录: src:源代码文件 pkg:包文件 bin:相关bin文件 step1: 建立工程文件夹 goproject step2: 在工程文件夹中建立src,pkg,bin文件夹 step3: 在GOPATH中添加projiect路径 例 e:/goproject step4: 如工程中有自己的包examplepackage,那在src文件夹下建立以包名命名的文件夹 例 examplepackage step5;在src文件架下编写主程序代码代码 goproject.go step6;在examplepackage文件夹中编写 examplepackage.go 和 包测试文件 examplepackage_test.go step7; 编译调试包 go bui...阅读全文

博文 2015-06-04 18:00:00 phlong999

golang kafka

golang kafka – hello world https://github.com/Shopify/sarama https://shopify.github.io/sarama/ consumer.go package main import ( "fmt" "github.com/Shopify/sarama" "log" "os" "strings" "sync" ) var ( wg sync.WaitGroup logger = log.New(os.Stderr, "[srama]", log.LstdFlags) ) func main() { sarama.Logger = logger consumer, err := sarama.NewConsumer(stri...阅读全文

博文 2016-05-13 02:00:02 simbadan

Go语言中Path包用法

// path package main import ( "fmt" "os" "path" "path/filepath" ) func main() { //Path操作 fmt.Println("Path操作-----------------") fmt.Println(path.Base("http://www.baidu.com/file/aa.jpg")) //aa.jpg fmt.Println(path.Clean("c:\\file//abc///aa.jpg")) //c:\file/abc/aa.jpg fmt.Println(os.Getwd()) //D:\Projects\GoPath\source\demo\syntax\path fmt.Prin...阅读全文

博文 2016-04-07 05:00:00 songxingzhu

golang 创建,读取,写入文件

golang创建文本文件 f,err := os.Create(fileName) defer f.Close() if err !=nil { fmt.Println(err.Error()) } else { _,err=f.Write([]byte("要写入的文本内容")) checkErr(err) } golang读取文本文件 f, err := os.OpenFile(fileName, os.O_RDONLY,0600) defer f.Close() if err !=nil { fmt.Println(err.Error()) } else { contentByte,err=ioutil.ReadAll(f) checkErr(err) fmt.Println(strin...阅读全文

博文 2018-08-13 14:31:34 ILVNMM

go package的理解

golang package是基本的管理单元, 同一个package下面,可以有非常多的不同文件,只要 每个文件的头部 都有 如 "package xxx" 的相同name, 就可以 在主方法中使用 xxx.Method()调用不同文件中的方法了。 文件夹名字可以和这个package 名称不一致, 比如我有个文件夹名字是mypackage,其中包含了a.go,b.go, c.go三个文件 : mypackage | --a.go | --b.go | --c.go 比如a.go中有 Saya(),b.go中有Sayb() 而几个文件共同的package name 确是testpackage 所以在 主函数中调用a.go 和b.go文件中的各自方法只要用,testpackage.Saya() ...阅读全文

博文 2015-04-24 00:00:00 rojas

Go 解决"no buildable Go source file in"问题

【问题】 我有一个文件夹,文件夹名字叫 12 ,并且我创建了一个Go源文件 12_test.go,代码如下: package main import "fmt" func main() { fmt.Println("Hello world") } 运行下面命令时出了错: go build 12_test.go "go build command-line-arguments: no buildable Go source files in D:\12" 【解决】 _test后缀在Go语言中有着特殊含义,是用来给Go程序做测试的,build工具会忽略它们,它们会运行 go test。从文件名中删除_test,或者重命名就可以解决这个问题...阅读全文

博文 2016-12-15 13:00:02 吃一堑消化不良

基于vim的golang开发环境配置

我用的操作系统为ubuntu14.04 用惯了命令行下裸的vim,有些厌倦,尝试着去emacs里打了个滚,各种快捷键让我觉得惨不忍睹。回到vim感觉像是回到了天堂,想想又不是只有emacs才有图形界面,虽然我已经弃用gvim很久,不代表它不存在。故而转投gvim的怀抱。 而最近正好开始学golang,尝试着写些小程序,却发现vim对golang的原生支持实在是糟糕,于是重新走上了配置vim的不归路…… 插件: pathogen 我使用pathogen来管理所有的插件,这是因为它比vundle简单……在vim当中安装东西的手感不如一句简单的git clone来的好。 安装: https://github.com/tpope/vim-pathogen,按照说明完成安装即可 它的用法很简单,便是把...阅读全文

博文 2014-10-04 19:26:05 winkar

Go实战--golang中文件以及文件夹路径相关操作

生命不止,继续 go go go!!! 之前介绍过golang的标准库:path/filepath, os Go语言学习之path/filepath包(the way to go) Go语言学习之os包中文件相关的操作(The way to go) 今天就跟大家分享几个关于文件以及文件夹的相关操作。 获取目录中所有文件 使用包: io/ioutil 使用方法: ioutil.ReadDir 读取目录 dirmane 中的所有目录和文件(不包括子目录) 返回读取到的文件的信息列表和读取过程中遇到的任何错误 返回的文件列表是经过排序的 FileInfo type FileInfo interface { Name() string // base name of the file Size() ...阅读全文

博文 2017-09-20 04:31:03 wangshubo1989

LiteIDE设置

我在windows下使用LiteIDE写go程序 go安装在c:\go path里添加了c:\go\bin LiteIDE安装在e盘 gopath也设置正确 能编译运行 但我的go源文件都放在e盘的一个文件夹里 当这个文件夹只有一个源文件时,编译运行正常,生成的可执行文件名为当前文件夹名 当有多个源文件时,就无法编译运行了 这是什么原因,要怎么设置? ...阅读全文

Go语言(遍历文件夹)

今天来讲一个Go语言操作文件的问题,即如何遍历一个文件夹下的所有文件。 代码如下 package main import ( "path/filepath" "os" "fmt" "flag" ) func getFilelist(path string) { err := filepath.Walk(path, func(path string, f os.FileInfo, err error) error { if f == nil { return err } if f.IsDir() { return nil } println(path) return nil }) if err != nil { fmt.Printf("filepath.Walk() returned %v\n...阅读全文

博文 2015-06-17 23:00:30 ACHelloWorld

windows配置goprotobuf插件,源码安装——Golang环境配置

本来应该在Linux下搭建golang开发环境,下载protobuf源码,便可在Linux下直接编译,不用像在windows下安装配置起来这么麻烦了。但由于电脑内存有4g,开一个虚拟机电脑卡得十分拖慢工作效率。就只想在windows中搭建好golang环境。折腾了一天多,终于把这个问题搞定了,最终提出了源码安装的方案。 一、下载安装Golang for windows 1.下载golang:http://golang.org/dl/ windows系统下下载所需版本的msi或zip文件。两者区别主要是:zip版本直接解压即可完成安装。msi的需要像正常windows安装程序一样进行安装,最后也会生成跟zip文件解压后一样的目录文件。 2.设置环境变量 $GOROOT 指向golang安装之后...阅读全文

博文 2014-10-04 19:26:04 u011490813

studygolang源码阅读小结(一)

最近待业在家,闲来无事。在博主大神@polaris的指点下,开始探索studygolang的源码。最初定的题目是studygolang源码剖析,想想不合适,牛皮吹的有点大了。还是叫源码阅读小结吧。写一些个人的浅薄理解与看法,可能会有错误,希望大伙儿指正。 ## 第一节 源码的获取与本地化运行 ## 本文的目的在于把源码本地运行起来 ###准备工作### 首先源码地址 https://github.com/studygolang,下载最新代码 在本地要编译并执行源码还需要安装下面3个package,使用go get工具 go get github.com/Go-SQL-Dr...阅读全文

golang test模块

1 创建文件夹testing101 2 被测试程序 package testing101 func Sum(numbers []int) int { sum :=0 for _,n :=range numbers { sum +=n } return sum } 3 测试程序 package testing101 import ( "testing" ) func TestSum(t *testing.T) { numbers := []int{1, 2, 3, 4, 5} expected := 15 actual := Sum(numbers) if actual != expected { t.Errorf("Expected the sum of %v to be %d but in...阅读全文

博文 2018-01-05 00:30:00 peterinblog

golang run时报undefined错误

问题现象:同一个文件夹下面有多个go文件,a.go,b.go,c.go,其中main在a.go中,直接go run a.go,报undefined 错误12原因:go在run之前会先进行编译操作,而在此处的编译它只会以这个a.go为准,导致其他几个引用文件中的方法出现找不到的情况 (而采用go build的方式又不一样,他会自动查找引用文件并打包)123解决方法:go run a.go b.go c.go 或go run *.g...阅读全文

博文 2018-07-13 15:35:23 hgqxjj

golang文件读写

读写文件要用到os包中的 func OpenFile(name string, flag int, perm FileMode) (*File, error) 该方法第一个参数为文件路径,第二个参数控制文件的打开方式,第三个参数控制文件模式 可用的打开方式有 const ( //只读模式 O_RDONLY int = syscall.O_RDONLY // open the file read-only. //只写模式 O_WRONLY int = syscall.O_WRONLY // open the file write-only. //可读可写 O_RDWR int = syscall.O_RDWR // open the file read-write. //追加内容 O_APPE...阅读全文

博文 2016-09-01 12:00:02 cjh1005221032

go 生成的exe不在bin文件夹里

GO项目目录解释 src存放源代码 pkg编译后生成的文件 bin编译后生成的可执行文件 背景 在src目录下,新建文件test.go,编写代码。 控制台执行go build test.go 之后发现: 生成的test.exe并没有在bin生成,而是在与源码test.go同级目录src下生成。 解决 控制台执行go install $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('

    ').addClass('pre-numbering').hide(); $(this).addCl...阅读全文

运行`$ govendor init`时,Error: Package not a go package or not in GOPATH

我本打算使用vendor进行项目的包管理,但是在进入项目文件夹后运行`$ govendor init` 时报错,但是我的项目确实放在$GOPATH 目录下的文件中了。我所用代码如下: `$ cd ~/go/workplace/test` `$ govendor init` 此时,系统提示错误: `Error: Package "/home/zxt/go/workplace/test" not a go package or not in GOPATH.` 使用`$ go env`命令后显示如下: `GOARCH="amd64" GOBIN="/home/zxt/go/bin" GOEXE="" GOHOSTARCH="amd64" ...阅读全文

Golang练手小项目系列

本系列整理了10个工作量和难度适中的Golang小项目,适合已经掌握Go语法的工程师进一步熟练语法和常用库的用法。golang练手小项目系列(1)-位向量golang练手小项目系列(2)-并发爬虫golang练手小项目系列(3)-并发读取文件夹信息golang练手小项目系列(4)-网络聊天室golang练手小项目系列(5)-并发无阻塞缓...阅读全文

博文 2019-06-29 01:32:41 李说的对

golang 插件安装

1、在%GOPATH%\src\ 目录下,建立golang.org 文件夹,并再新建x文件夹。 目录为 "%GOPATH\src\golang.org\x\" 2、进入%GOPATH\src\golang.org\x\目录 3、完成目录切换后,开始下载插件包:git clone https://github.com/golang/tools.git tools 4、进入“%GOPATH”目录,执行: go install github.com/ramya-rao-a/go-outline go install github.com/acroca/go-symbols go install golang.org/x/tools/cmd/guru go install golang.org/x/...阅读全文

博文 2018-05-04 20:33:04 李琼涛

使用 emacs 结合 xcscope 阅读 go 代码

#-TITLE: xcscope 支持 go 语言 Table of Contents 1 下载源码,编译 ./configure make sudo make install ,会把 cscope 生成到 usr/local/bin/ 下面 2 为 mac 添加补丁 2.1 patch -p0 < cscopeosx.patch 2.2 cscopeosx.patch 如下 3 把cscope源码中的contrib/xcscope/xcscope.el 拷贝到 emacs 的 load-path 中,并在 emacs 中添加如下代码 4 为源码生成 cscope 文件 4.1 find . -name "*.go" > cscope.file...阅读全文

golang---vim语法高亮

下载   在http://www.golangtc.com/download上下载 go1.3beta2.src.tar.gz版本,高于这个版本中没有vim的配置了。 解压 tar zxf go1.3beta2.src.tar.gz 配置 方式一   将下载目录的go/misc/vim/中有对应的 syntax, ftplugin, indent, compiler 中的go.vim文件复制到/usr/share/vim/vim74/对应目录,ftdetect文件夹包括文件复制到vim74中 方式二(无需root权限)   go/misc/vim/目录下文件拷贝到~/.vim/目录下(如果没有该目录则新建) mkdir ~/.vim cp -r vim/* ~/.vim/   新建~/.vi...阅读全文

博文 2016-07-09 13:00:01 FreeApe

关于beego继承的问题

我现在在controllers目录新建一个base.go的文件 ``` package controllers import ( "github.com/astaxie/beego" ) type BaseController struct { beego.Controller ControllerName string ActionName string } //直接在页面输出字符串 func (this *BaseController) html(str string) { this.Ctx.WriteString(str) } ``` 然后controllers/home/新建一个user.go的文件 ``` package...阅读全文

studygolang源码阅读小结 <二>

## 准备数据库模块 ## 1. 数据库创建 首先安装MySql,地址http://www.mysql.com/downloads/mysql/,Macos下选择DMG安装,否则需要手动安装。100多M,需要注册登陆之后才能下载。 安装完成之后创建一个数据库服务器,(使用MySql Workbench GUI更方便一些),**并使用database/文件夹下的两个sql文件创建并初始化数据表** 2.DSN设置 studygolang的数据库采用MySql数据库的go语言实现版本,在conf文件夹下找到config.json文件,里面有这样两个key value值 "drive_name": "mysql" ...阅读全文

[golang把文件复制到另一个目录]

//本程序 主要功能是把A文件夹下的文件与B目录下文件对比,如果找到就覆盖到B相应的目录下。 // 用法: merge A目录 B目录 // merge.go package main import ( "flag" "fmt" "os" "path/filepath" "strings" "time" "github.com/Unknwon/com" ) const ( IsDirectory = iota IsRegular IsSymlink ) type sysFile struct { fType int fName string fLink string fSize int64 fMtime time.Time fPerm os.FileMode } type F struct ...阅读全文

博文 2016-09-07 12:00:02 zistxym

golang判断文件/文件夹是否存在

使用os包,os.stat返回err==nil,说明存在; os.IsNotExist(err)为true,说明不存在;否则不确定是否存在 func DelJar(fileName string) error{ //err := os.Remove(fileName) //if err != nil { // logs.Error("删除文件[%v]失败!%v", fileName, err) //} // 移动到备份目录,不做物理删除 _, err := os.Stat("recycle") if err != nil{ if os.IsNotExist(err){ os.Mkdir("recycle", 0777) // Everyone can read write and execu...阅读全文

博文 2018-01-07 18:30:00 dannyyao

go语言之监控文件夹

//在执行文件中 // conf // |--app.conf // monitor.exe // app.conf中的内容 // command="ls -l" // monitordir ="c:\\test" // 在windows下会执行两次 // https://github.com/howeyc/fsnotify/issues/106 package main import ( "fmt" "github.com/astaxie/beego" "gopkg.in/fsnotify.v1" "os/exec" "strings" ) func mkcmd(command string) error { argArray := strings.Split(command, " ") ...阅读全文

博文 2015-06-17 23:02:20 zistxym

golang 包的管理

以前看golang包管理时,感觉有点混乱,套用python,lua包管理的方式不行,直到今天(2018.10.19)才基本搞清楚golang包管理的意思。 使用包package目的 使用包的目的是为了更加方便的管理源码。golang的理念是用文件夹来管理(或者叫约束)同种类型或同种功能的源码,例如数学计算的源码都放入math文件夹下,系统相关的放入os文件夹下。 一个文件夹下的源码中所有包名必须一样,但是包名可以与文件名不一样。例如项目中涉及到数学计算,建立一个文件夹为math,为了让功能独立,我们每一个功能使用一个go文件,诸如add.go,sub.go,div.go等。一个go文件必须要在开头指定所在的包,语法为package xxx,我们可以写为package "mymath"。 如何...阅读全文

博文 2019-04-29 07:31:37 zxm342698145

使用Go语言完成文件夹的MD5计算

案例需求:我们的监测系统会定期的检查配置文件的变动,这些配置文件放置在一个独立的文件夹下面,我们可以通过对于整个的文件夹内所有文件进行md5的计算来完成监测,本文就通过Go语言实现了一个命令行工具,完成上述的需求。 1. 单一文件的md5计算 我们首先将需求任务进行分解,既然需要计算文件夹下的所有文件md5值,我们必须先考虑如何实现单一文件的md5值计算。 下面就是一个简单的md5求值程序,这里我们通过参数传递进去需要计算的文件,然后调用go语言提供的内置的crypto包中的函数来完成取值,计算得出的结果使用16进制的方式打印出来。 package main import ( "crypto/md5" "fmt" "io/ioutil" "os" ) func Md5SumFile(file...阅读全文

博文 2017-01-08 17:01:46 u014029783

在Windows下为Go安装goprotobuf

步骤如下: 1. 安装Go for windows(测试版本v1.1.2),设置好GOPATH,GOROOT等环境变量 2. 安装protoc windows binary:直接下载protoc-2.5.0-win32.zip,解压protoc.exe到path所包含的目录即可 3. 拿到goprotobuf的source code: go get code.google.com/p/goprotobuf/{proto,protoc-gen-go} 以上是官网做法,一般在windows下还需要先搞定hg等等工具 其实也可以直接从https://code.google.com/p/goprotobuf/source/browse/ 下载,点击"download zip"即可 下载之后,需要手工...阅读全文

博文 2014-10-04 19:26:02 yhcharles

Golang判断文件是否存在及递归创建文件夹

一、判断文件或文件夹是否存在golang 判断文件或者文件夹是否存在可以通过os.stat() 方法和os.IsExist() 方法来判断: 1234567891011121314func isExist(path string)(bool){ _, err := os.Stat(path) if err != nil{ if os.IsExist(err){ return true } if os.IsNotExist(err){ return false } fmt.Println(err) return false } return true} 二、递归创建文件夹递归文件夹用到os.MkdirAll() 方法: 1func MkdirAll(path string, perm File...阅读全文

博文 2018-05-17 09:48:33 马谦的博客

golang--Redis最佳的Go语言驱动

Redis可以缓存数据,这使得操作数据可以达到一个较快的速度,在一些需要数据较快存储的场合,例如微博,redis发挥着不可替代的作用。在redis的官网,golang驱动有几个,忽然来了兴致,那个才是redis最佳的Go语言驱动? 这些驱动都处于开发的前期,还没有发行正式版,有些已经很久没更新了。从更新日期来看,Gary Burd的radigo和gosexy的redis最近有更新,而且从他们的README文件来看,他们对redis的支持还不错。很有可能,他们两者会有1个胜出。但到底谁才是最佳的,这个现在还是不能判断。在gosexy的redis源码库中的有个_benchmarks文件,里面就是一些对各个redis的Go驱动的一些简单的性能测试。简单看了一下,里面的代码就是调用他们各自包中的函数...阅读全文

博文 2014-10-04 19:26:04 getong

xp下面的golang的sublime text3项目配置

这里讲解在xp下面的golang环境配置. 你已经配置好了sublime text的golang开发环境,即可以运行helloworld,有代码自动提示.如果还未,参考 这里假设项目名字为projcetDemo,c盘建立如下文件夹结构c:\godemo\src\projectdemo.在下面建立一个main.go文件.如下图: 用sublime打开.然后选择保存到工程,我这里就用projectDemo作为工程名.如下图: 添加文件夹到工程,这里选择是projectDemo文件夹,结果如下图(前提是你安装了side bar): 打开sublime自动产生的工程文件,添加该项目的gopath,这样你就可以直接在sublime里面执行go命令,如下图: 假设你现在引用项目hanlder包中的函数,...阅读全文

博文 2015-03-11 01:00:03 朋在无锡

go语言工程管理

1.建立工程 1---设置$GOPATH环境变量 如在~/.bashrc中加入如下语句export $GOPAHT=/home/jj/goproj (别忘了source ~/.bashrc) 2--建立工程目录 cd /home/jj mkdir goproj cd goproj mkdir src (此文件夹必须命名为src) mkdr bin (此文件夹可任意命名) 3--在src目录下添加源文件 cd ./src vim main.go (main 这个名字不是必须的可以是任意名字) mkdir lib cd ./lib vim lib1.go (编辑一个库,供main.go调用,可以是多个 ,且名字任意的) 2.编译工程 cd $GOPATH/bin go build main (必...阅读全文

博文 2014-12-25 07:00:01 plc_jianghao

linux下golang

linux下golang的配置 linux下golang的配置 之前开发golang一直在windows下,今天在linux下试了一下 ,遇到一些梗,比如go 找不到 sync包。花了一小时全部解决,把过程记录一下。 安装 go 我的系统是ubuntu ,完全可以用apt-get 安装,简单方便,但这样安装之后就出现了上面提到的找不到sync包的问题。后来卸载了已经安装的go,选择从官网下载安装包。下载地址 选择合适的安装包,我选择的是go1.6.1.linux-amd64.tar.gz。然后在你的系统里面建一个文件夹用来放安装包,建好之后使用wget 加下载地址,把安装包下载到建好的文件夹下。 然后键入tar -xzf go1.6.1.linux-amd64.tar.gz 解压安装包到已经...阅读全文

博文 2016-04-16 03:00:03 Leo_wl

golang不能使用debug

golang更新到1.11后debug功能使用报错 问题 Goland和Idea使用debug报错,如下:could not launch process: decoding dwarf section info at offset 0x0: too short。 解决方法 1,更新dlv go get -u github.com/derekparker/delve/cmd/dlv 2.修改goland或idea配置 更新后的div在$gopath路径下的bin文件夹下。 替换到idea或goland的这个目录下 image.png 重启ide,问题解...阅读全文

博文 2019-03-02 23:34:40 Selv

如何使用Python删除文件、目录

在进行Python项目实战(http://www.maiziedu.com/course/python/)时,会经常使用到Python删除文件、删除目录等操作方法,今天小编详细的分析了涉及Python文件操作的各种方法,需要的朋友可以参考下 下面来看一下python里面是如何删除一个文件及文件夹的~~ 首先引入OS模块 import os 删除文件: os.remove() 删除空目录: os.rmdir() 递归删除空目录: os.removedirs() 递归删除目录和文件(类似DOS命令DeleteTree): 方法1: # Delete everything reachable from the directory named in 'top', #...阅读全文

golang chan 超时

golang chan 超时 Posted on 2013-12-24 13:03 oathleo 阅读(4227) 评论(0) 编辑 收藏 package mainimport ( "fmt" "time")var ch chan int = make(chan int, 1)func main() { go aaa() select { case <-ch: //拿到锁 fmt.Println("call") case <-time.After(5 * time.Second): //超时5s fmt.Println("5 sec call") }}func aaa() { time.Sleep(time.Second * 3) ch <- 1...阅读全文

博文 2016-09-06 11:00:05 zhangym

/src/pkg/math/abs.go源码阅读兼谈golang与汇编

开头的碎碎念: 对接微信公众平台的时候,开始有个字符串排序,我接触golang毕竟时间尚浅,很多东西都是能从网上找到就直接从网上找,结果就是找了好几个示例代码都不好用,好容易一个好用的,从头开始实现的,代码太多了。我就想,google应该把这些玩意都封装好了吧,不然一个新出的语言只有基础语法,没有强大的标准库,谁用这玩意啊。也就是那时候第一次接触src文件夹,后来发现pkg里的那些go文件是绝好的学习资料。 那么多文件、文件夹从哪开始看呢,我的原则,先找没有依赖性的,也就是没有import的,这么寻摸着就找到了math文件夹。笨方法,从a开始按顺序来呗,这不就碰到了abs.go 难以理解的第12行: // Copyright 2009 The Go Authors. All rights r...阅读全文

博文 2014-10-04 19:26:06 wlts

阅读go语言源代码1

前面大概说过bison与yacc的语法,那么其实go也是用bison来实现的,下面来说说怎么阅读go语言源代码。要看代码首先得找到代码的入口,怎么找呢?你可能首先想到grep main是的,一般来说这是一个没有争议的办法,但是对于go语言来说,这个办法对,也不对。怎么说呢?我们用gdb来进行debug就会看到所有的go语言程序的入口居然都在src/lib9/main.c里的main函数。 #include #define NOPLAN9DEFINES #include extern void p9main(int, char**); int main(int argc, char **argv) { p9main(argc, argv); exits("main...阅读全文

博文 2014-10-04 19:26:01 HopingWhite

Golang学习笔记:包制作

golang的包跟java as js之类的大不一样,一定要存在GOPATH里面,GOPATH是专门用于存放golang第三方的库,里面有两个文件夹, src:源代码目录 pkg:编译后的第三方包,这个是go install的时候生成的,不能手动去改 这两个文件夹有相同的文件结构,如下: 我们要制作自己的代码库的话,那么就要到src下面新建自己的包,这里的文件的包名应该都是一致的。 例如,我在src下面新建一个叫做hehe的文件夹: 然后在编辑器中打开,建立一个叫做hehe的包,以及随便写一个方法: build之后如果没有问题,执行install操作,然后我们在pkg文件夹下面可以看到生成的包了。 然后我们可以在别的项目中使用这个包了...阅读全文

博文 2015-11-24 03:00:00 adoontheway