目录
一、Mac brew 安装go环境
1.1 安装步骤
1.2 设置GOPATH 及环境变量
1.3 编写第一个go程序
二、快速入门
1.1 快速入门需求
1.2 go学习(自用)
一、Mac brew 安装go环境
1.1 安装步骤
1)终端输入,也可以指定下载go版本
brew install go
2)查看golang当前版本
go version
3)查看当前golang环境 执行
go env
1.2 设置GOPATH 及环境变量
1)GOPATH 是工作目录,工作空间目录 go_project 就是一个目录,其中包含三个子目录:
src
目录包含Go的源文件,它们被组织成包(每个目录都对应一个包),pkg
目录包含包对象,bin
目录包含可执行命令。
如下图:
2) 终端输入 vim .zshrc
添加:
GOPATH 后面加你自己的工作空间,这里是我自己建立的go_project
export GOPATH="/Users/mima6ge0/Documents/yanhan_practice/go_project"
export PATH = $PATH:$GOPATH/bin
执行 source ~/.zshrc
生效,使用go env查看是否修改成功
1.3 编写第一个go程序
1)新建hellow.go文件
package main
import "fmt"
func main() {
fmt.Println("hello, world")
}
2)进入文件所在目录,执行go run hellow.go,成功,如下图
二、快速入门
1.1 快速入门需求
- 具备1种后端编程语言开发经验(C/C++/Java/Python/PHP)
- 等具备基本的网络编程能力和并发思想
- 了解计算机基本体系结构
- 了解Linux基础知识
1.2 go学习(自用)
1.2.1 go基础程序
package main //程序的包名
// main函数
//多个文件导入
import (
"fmt"
"time"
)
func main() { //函数的"{"必须和函数名在一行,换到下一行就是语法错误,强制代码风格
fmt.Println("hellow Go!")
//go语言不需要";",可有可无
time.Sleep(10 * time.Second)
}
1.2.2 变量声明
package main
/*
变量的声明方法
*/
import "fmt"
//全局变量,冒等方法不支持全局,其他的都可以
var A int = 100
func main() {
//声明变量默认值是0
var a int
fmt.Println("a = ", a)
fmt.Printf("type of a = %T\n", a)
//声明变量,初始化
var b int = 100
fmt.Println("b = ", b)
fmt.Printf("type of v = %T\n", b)
//初始化可以省去变量类型,通过值去匹配变量的树枝类型
var c = 100
fmt.Println("c = ", c)
fmt.Printf("type of c = %T\n", c)
//字符串
var d string = "dasda"
fmt.Println("d = ", d)
fmt.Printf("type of d = %T\n", d)
//最常用方法:冒等,省略var,直接自动匹配,":="初始化加赋值,函数内部使用
e := 3213.432
fmt.Println("e = ", e)
fmt.Printf("type of e = %T\n", e)
fmt.Println("A = ", A)
fmt.Printf("type of A = %T\n", A)
//声明多个变量
var x, y int = 100, 100
fmt.Println("x = ", x, ", y = ", y)
var m, n = 100, "88090"
n = "kjuhku"
fmt.Println("m = ", m, ", n = ", n)
//多行多变量声明
var (
xx int = 121
zz bool = true
)
fmt.Println("xx = ", xx, ", zz = ", zz)
}
1.2.3 常量和枚举
package main
import "fmt"
//const 可以定义枚举类型
const (
//可以在const里面添加一个关键字 iota,每行的iota都会累加1,第一行的iota的默认值是0
BEIJING = 10 * iota // iota = 0
SHANGHAI //iota = 10
SHENZHEN //iota = 20
)
const (
a, b = iota + 1, iota + 2 //iota = 0, a = 1, b = 2
c, d //iota = 1, c = 2, d = 3
e, f //iota = 2, e = 3, f = 4
g, h = iota * 2, iota * 3 //iota = 3, g = 6, h = 9
i, k //iota = 4, i = 8, k = 12
)
func main() {
//常量,只读,不允许修改
const a int = 100
fmt.Println("a = ", a)
fmt.Println("BEIJING = ", BEIJING)
fmt.Println("SHANGHAI = ", SHANGHAI)
fmt.Println("SHENZHEN = ", SHENZHEN)
fmt.Println("a = ", a, "b = ", b)
fmt.Println("c = ", c, "d = ", d)
fmt.Println("e = ", e, "f = ", f)
fmt.Println("g = ", g, "h = ", h)
fmt.Println("i = ", i, "k = ", k)
//iota只能在const里面使用,var里面不可以
}
1.2.4 函数与多种返回值
package main
import "fmt"
//返回一个值,匿名
func foo1(a string, b int) int {
fmt.Println("a = ", a)
fmt.Println("b = ", b)
c := 100
return c
}
//返回多个值,匿名
func foo2(a string, b int) (int, int) {
fmt.Println("--------foo2----------")
fmt.Println("a = ", a)
fmt.Println("b = ", b)
return 888, 9999
}
//返回多个返回值,有形参名称
func foo3(a string, b int) (r1 int, r2 int) {
fmt.Println("--------foo3----------")
fmt.Println("a = ", a)
fmt.Println("b = ", b)
r1 = 1000
r2 = 100000
return
}
func foo4(a string, b int) (r1, r2 int) {
fmt.Println("--------foo4----------")
fmt.Println("a = ", a)
fmt.Println("b = ", b)
//r1, r2属于foo3的形参,初始化默认的值是0,作用域空间是整个foo4函数{}的整体
fmt.Println("未赋值:r1 = ", r1)
fmt.Println("未赋值:r2 = ", r2)
r1 = 1000
r2 = 100000
return
}
func main() {
c := foo1("func1", 1)
fmt.Println("c = ", c)
ret1, ret2 := foo2("func2", 2)
fmt.Println("ret1 = ", ret1)
fmt.Println("ret2 = ", ret2)
r1, r2 := foo3("func3", 3)
fmt.Println("r1 = ", r1)
fmt.Println("r2 = ", r2)
r1, r2 = foo4("func4", 4)
fmt.Println("r1 = ", r1)
fmt.Println("r2 = ", r2)
}
1.2.5 init函数与import导包
文件目录树状图
lib1.go 代码:
package lib1
import "fmt"
//当前lib1包提供的API
//首字母大写的话代表当前接口对外开放,首字母小写只能在该文件下使用
func Lib1Test () {
fmt.Println("Lib1Test() ...")
}
func init () {
fmt.Println("lib1 init ...")
}
lib2.go 代码:
package lib2
import "fmt"
//当前lib2包提供的API
func Lib2Test () {
fmt.Println("Lib2Test() ...")
}
func init () {
fmt.Println("lib2 init ...")
}
main.go代码:
package main
//需要在GOPATH下
import (
"GolangStudy/5_init/lib1"
"GolangStudy/5_init/lib2"
)
func main () {
lib1.Lib1Test()
lib2.Lib2Test()
}