开始写一个程序声明变量几乎是在完成“hello world”之后第一件要做的事,所以我单独作为一个章节来写。 Go语言的声明变量用var关键词实现,很多语言里也是这样。 var 变量名 类型 var book string var num int 批量声明变量 var { book string num int } 变量初始化 var book string = "php" var book = "php" 在第二种方式里我并没有声明类型,同样可以成功,原因是Go会在编译时根据value自动推导变量类型,但是如果我这么写会怎么样? var book 答案是编译时会报错,因为Go会在编译时根据value推导类型,但前提是你得给个value,这里不同于php,php是弱类型的语言,php在类里定义一个变量的语法是 class A { public $book ; } 变量初始化还有一个更便捷的方法,事实上大多数时候我们只用这种方式,可以用 := book := "php" 但是这种方式有一点要注意,以这种方式声明一个变量必须是该变量第一次出现,举个例子 var book string book := "php" 这样的代码是不被编译器允许的,为什么会写出这样的代码呢?我是一个phper,很自然以为这个符号就是变量赋值语句,其实不然
在程序语言里包就是独立的代码块或者功能块,有的包只实现特别简单的功能,比如字符串处理,有些包实现一个比较复杂的功能,比如无限极分类。很多语言都有包的概念,例如,php里用composer来管理包,方便开发者下载更新,Go语言里的包也是类似概念 以mac系统为例,打开/usr/local/go/src 这里就是Go内置的所有包 通过文件夹名可以看到 包的命名规范 : Go语言包的命名,遵循简洁、小写、和go文件所在目录同名的原则 这样做的优点是便于我们引用,书写以及快速定位查找 简洁、小写很好理解,那么什么是go文件所在目录同名呢? 如:在/usr/local/go/src 下有一个小写fmt的文件夹,进入fmt文件夹有诸多小写英文命名以.go为后缀的文件,这些文件就是包,打开任何一个文件,在第一行非注释代码里都声明了:package fmt,这里的fmt就是包名,包名与go文件所在目录fmt同名 声明包: 我们用关键字 package来声明包,如果你用IDE的话,当你打出package就会自动高亮 导入包: Go用import关键字来导入, 只导入一个包 : import "fmt" 导入多个包: import ( "net/http" "fmt" ) 问题一:net/http 很明显,我们要导入的是net下的http.go这个包,但是fmt呢?刚才打开fmt下有很多文件,具体导入哪个呢? 如果导入的时候你没有指定到具体的文件,那么Go默认导入这个包的所有文件。 问题二:程序怎么知道去哪个路径找到相应的包呢? 如果你有印象的话在安装Go的时候,要求你配置过两个环境变量,一个是GOROOT,另一个是GOPATH,这就是配置这两个环境变量的作用之一,我们一般会把GOROOT配置为Go的安装目录,GOPATH配置为我们的工程目录,Go编译器会优先在GOROOT里搜索包,如果没搜到会继续在GOPATH里搜索,一旦找到就停止搜索,如果都没找到,编译就不成功。 这里有个有趣的事情,我们导入了一个包,这个包也存在,但是程序里没有用到这个包里的任何方法,会怎么样呢?如果是php里inclu