golang 基础知识和注意事项

一,GOROOT和GOPATH

简单讲,

a、GOROOT是go的安装路径,比如/usr/local/go,把该目录的bin加入系统的path变量

    GOPATH你程序的路径,比如/home/user/myGoProgram;GOPATH可以是一个列表,go get下载的第三方库, 会下载到列表的第一个目录里面

    GOPATH目录下一般有三个目录,分别是 bin、pkg、src

    bin放可执行文件(go install 生成自己程序的可执行文件),该目录也要加入path变量中;

    pkg目录存放编译好的库文件, 主要是*.a文件; 

    src目录下主要存放go的源文件

二、main包,一个工程中有且仅有一个main包,包里有且仅有一个main函数

三、名称首字母大小写

常量、变量、类型、接口、结构、函数等的名称开头大小写区别,小写表示私有,跟其他语言不一样(类的私有),这里的私有是包的私有,包内还是可以调用的,大写表示公有,包外也可以调用

四、大括号

开大括号不能单独一行,比如主函数

func main(){  # { 不能单独一行

 ...

}

四、字符串不能复制为nil

在golang中,string类型的变量没有nil,只有""(空字符串)

五、数组和slice区别

切片可以理解为数组的引用,一个有 3 个域的结构体,分别是引用、长度、容量

a、数组是固定长度,声明和初始化:

    1、var arr [2]int #大小为2

    2、s := [3]int{1, 2} #大小为3

    3、s := [...]int{1, 2} #大小为2,[...]是数组

切片slice是不固定长度,

    1、var arr []int 

    2、arr := make([]int, 2,3) #容量为3,大小为2

    3、arr := []int{1, 2, 3} #实际上是数组并且创建了相关切片

b、切片使用append函数时,容量是翻倍增长的,比如

        arr := []int{1, 2, 3}
fmt.Println(len(arr), cap(arr))  #结果3 3
arr = append(arr, 1)

fmt.Println(len(arr), cap(arr)) #结果3 6

c、数组向函数传递时会复制,得到副本,不会影响原来数组,切片是引用,会影响原来切片(类似c++的数组)

你可能感兴趣的:(golang)