1 下载依赖包问题
cannot find package "github.com/gocql/gocql" in any of:
/usr/local/src/go/src/github.com/gocql/gocql (from $GOROOT)
($GOPATH not set)
解决方式;
1. 设置GOROOT、GOPATH
GOPATH用来存在下载第三方的依赖包。
go build会从GOROOT和GOPATH中寻找依赖包
如:
export GOROOT=/usr/local/src/go
export PATH=$PATH:$GOROOT/bin
export GOPATH=/Users/Test/gopath/go_workspace
2 下载依赖包
go get github.com/gocql/gocql
2 IDEA
2.1 intellij idea 14 使用go插件
http://blog.csdn.net/zhouzme/article/details/44133507
3 字节与字符区别
golang采用utf-8编码存储。一个中文可以采用3个字节或者4个字节存储。如果采用字符表示,则用rune表示。 []byte表示字节数组,[]rune表示字符数组。
4 采用代理下载项目的依赖包
http_proxy=hx.gy:1080 go get -d -v google.golang.org/grpc
hx,gy 代理支持的域名
android.com
bitbucket.org
bintray.com
chromium.org
clojars.org
registry.cordova.io
dartlang.org
download.eclipse.org
github.com
githubusercontent.com
golang.org
googlesource.com
storage.googleapis.com
code.google.com
dl.google.com
dl-ssl.google.com
getcomposer.org
gradle.org
gopkg.in
ionicframework.com
plugins.jetbrains.com
macports.org
maven.org
melpa.org
mendeley.com
www.nuget.org
npmjs.com
npmjs.org
pypi.python.org
packagist.org
packagecontrol.io
rubygems.org
repo.typesafe.com
5 gopm 代替go 下载第三方依赖包
在国内采用go get有时会下载不到一些网站如golang.org的依赖包。
可以采用gopm从golang.org一些镜像网站上下载。
1) 安装gopm
go get -u github.com/gpmgo/gopm
执行该命令的用户需要设置GOPATH参数
2)gopm get 如果不携带-g采用,会把依赖包下载.vendor目录下面。
采用-g 参数,可以把依赖包下载到GOPATH目录中
gopm get -g golang.org/x/net
5 defer 执行过程
defer是在return之前执行的。这个在 官方文档中是明确说明了的。要使用defer时不踩坑,最重要的一点就是要明白,return xxx这一条语句并不是一条原子指令!
函数返回的过程是这样的:先给返回值赋值,然后调用defer表达式,最后才是返回到调用函数
6 包初始化顺序
若包p导入了包q,则包q的init函数会在包p的任何函数运行前执行。
即函数main.main()会在所有的init()函数结束后运行
7 channel
分为缓冲channel和无缓冲channel,对于无缓冲channel,则channel的接受发生再 channel的发送完成之前。
即go 协程发送信息时,一直阻塞到其它协程接受了信息为止。
8 go运行时 协程的调度
当因某一协程阻塞导致物理线程阻塞时,go 运行时会把其它协程分配到其它物理线程上执行。
9 方法 传递值和传递指针
传递值,是某个对象(各个属性值)的copy,方法不会改变实参的属性值。
传递指针,方法可以改变实参的属性值。
10 goroutine
在同一个原生线程里,如果当前goroutine不发生阻塞,其不会让出cpu供该线程的其它gorountine执行。
如果goroutine发生阻塞,go 自动会把其它与该goroutine处于同一线程的goroutine分配到其它线程执行。
11 golang的值、引用和指针
原始类型和自定义类型作为函数的参数时,都是值传递。 因此当自定义类型作为参数传递给函数时,实际参数的值不会改变。
(Java自定义对象均是引用类型)。
golang中得map、数组、channel是引用类型。
12 golang的工程结构
工程名
--包1
---1.go
--包2
--2.go
main.go
本工程内的包引入,采用相对路径方式
如 import "工程名/包名" 在原文件中,如果某一个变量或者方法不属于某一个类,则属于该包。 导入该包,就可以使用该方法
该工程需要在$GOPATH/src目录下面 (建议GOPATH的第一个目录)
13 golang的代码组织单位为包
包由其导出的类型和函数组成部分(Java以类为单位,Java导入也可以具体到类)
golang包import只能到包,可以引用包到处的类型或者函数。
14 GOROOT和GOPATH区别
GOROOT是go的安装目录,
GOPATH下载第三方的依赖包和本地开发项目
http://www.jianshu.com/p/4e699ff478a5
GO安装和常见命令
https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/01.1.md
15 go get
使用命令go get
可以下载一个单一的包或者用...
下载整个子目录里面的每个包