go初探 [起步]
最近开始学习go,边学边做一份笔记,帮助自己,帮助他人,如果有写错的地方,欢迎大家纠正,感激不尽。
安装
这里以二进制包为例
下载二进制包
wget https://studygolang.com/dl/golang/go1.15.7.linux-amd64.tar.gz
将下载的二进制包解压至 /usr/local目录
tar -C /usr/local/ -xzf go1.15.7.linux-amd64.tar.gz
将
/usr/local/go/bin
目录添加至PATH环境变量export PATH=$PATH:/usr/local/go/bin
hello world
//创建一个hello.go文件 package main //声明包,每个脚本中必须包含 import "fmt" //下面代码中会使用到的包,没使用到不要import,否则报错 func main() { //主函数,每个程序文件中必须有,第一个执行的函数(有init则init先执行) fmt.Println("hello world") //使用fmt包中的Println打印,fmt.Println(...) 可以将字符串输出到控制台,并在最后自动增加换行字符 \n ,使用 fmt.Print("hello, world\n") 可以得到相同的结果 } //使用go run执行 $ go run hello.go hello world //使用go build来生成二进制可执行文件 go build hello.go $ ./hello hello world windows上编译后,.exe后缀,同样可以执行,这样就很容易跨平台,并且单独执行一些自动化的任务
可以看到init函数比main函数先执行,因为可以做一些初始化任务
特别说明
go和php一些不一样的地方,特此说明
go中,一个大写开头的变量,常量,函数等名称的,比如上面的Println(), 则可以被包外部代码所使用,可以看作PHP中的public,比如一个脚本中调用某个类,在类外部,我们只能使用public声明的方法和属性;如果是小写开头的,则包外部是不可见的,包内部是可见可用的,类似protected
花括号问题
func main() { // 错误,不能单独作为一行(php中是可以的) fmt.Println("Hello, World!") }
结束分隔符问题
go中,一条代码语句结束,作为一行,是不需要加结束分隔符的;当然,加了也不会报错的
如果多条代码语句在同一行,则必须加分隔符,否则报错字符串拼接符
+
php中是.
, js和java,go中都是+
空格的使用
加空格,有些是必须的,有些会更具可读性var age int fruit = apples + oranges
go中字符串必须使用双引号,使用单引号会报错,这个和php很不一样,php中都可以使用,php的双引号可以解析变量; go中并不能
go中变量必须先声明才能使用,并且变量必须在程序中被使用过,否则编译报错
可以看到我声明了一个name变量,但是没有使用过它,编译时直接报错,其实和上面fmt包引入后,没有使用其中的任何元素,会报错是一个意思;go中的变量声明是可以省略数据类型的,声明时是可以赋初值的,不给初值,系统会默认给一个的,变量的声明使用后面会讲到;
总结:
- 可以看到go可以很方便的编译打包成各平台的,可执行的,程序文件运行,并且不依赖多余的运行环境,这样我们除了写大型项目,也可以写一些实用的小脚本跨平台运行;
- 还可以看到go中的代码风格是比较严谨的,比如变量声明就必须得使用,这一点可以让我们很方便的检测出代码中哪些变量没有被使用到,避免内存浪费;当然可能会导致函数返回值多余问题,这个后面讲到;
本作品采用《CC 协议》,转载必须注明作者和本文链接
多多更新呀,老哥