0.安装
0.1.下载安装包
linux下载go1.Xxx.Yyy.linux-amd64.tar.gz版本安装包
0.2.解压
bash
tar -C /usr/local -xzf go1.4.linux-amd64.tar.gz
0.3.安装
修改/etc/profile文件, 添加一行
bash
export PATH=$PATH:/usr/local/go/bin
或者修改~/.bash_profile
文件也是可以的
刷新资源文件
bash
source /etc/profile
1.基本入门
go
package main
import "fmt"
func main() {
fmt.Println("Hello World, Go!")
}
main方法为项目的起始方法
2.简单语法
2.1.init方法
go
package main
import "fmt"
func init() {
fmt.Println("Init~~")
}
func main() {
fmt.Println("Hello World, Go!")
}
打印结果:
Init~~
Hello World, Go!
init方法优先于main方法执行。
2.2.字符串
2.2.1.字符串打印
go
func test1() {
fmt.Println("test1--->", "Hello, World!")
}
2.2.2.字符串和数字拼接
go
func test3() {
var a string = "123456"
d := fmt.Sprint(a, 54321)
fmt.Println("test3--->", d)
}
2.3.多变量赋值
2.3.1.成员变量
go
var e , f = 1, "321"
func test4() {
fmt.Println("test4--->", e, f)
}
2.3.2.局部变量
go
func test5() {
g, h := 3, "333"
fmt.Println("test5--->", g, h)
}
2.4.常量
go
func test6() {
const i = 100
fmt.Println("test6--->", i)
}
2.5.基本运算
go
func test7() {
j := 15
k := 10
fmt.Println("test7(+)--->", j + k)
fmt.Println("test7(-)--->", j - k)
fmt.Println("test7(*)--->", j * k)
fmt.Println("test7(/)--->", j / k)
fmt.Println("test7(%)--->", j % k)
j++
fmt.Println("test7(++)--->", j)
k--
fmt.Println("test7(--)--->", k)
}
2.6.判断相等
go
func test8() {
m := 10
n := 10
o := 11
if (m == n) {
fmt.Println("test8--->", "等于")
}
if (m != o) {
fmt.Println("test8--->", "不等于")
}
}
2.7.或与判断
go
func test9() {
p := true
q := false
if (p && q) {
fmt.Println("test9--->", "and true")
} else {
fmt.Println("test9--->", "and false")
}
if (p || q) {
fmt.Println("test9--->", "or true")
} else {
fmt.Println("test9--->", "or false")
}
if (!(p || q)) {
fmt.Println("test9--->", "not true")
} else {
fmt.Println("test9--->", "not false")
}
}
2.8.数据类型
2.8.1.类型判断
go
func test10() {
r := 10
s := "test"
t := true
fmt.Printf("test10--->r type:%T\n", r)
fmt.Printf("test10--->s type:%T\n", s)
fmt.Printf("test10--->t type:%T\n", t)
}
结果:
go
test10--->r type:int
test10--->s type:string
test10--->t type:bool
2.8.2.类型转换
2.8.2.1.数字类型之间转换
go
func test37() {
var a int = 100
var b int = 13
var c float32 = float32(a) / float32(b)
fmt.Printf("c is %f, type is %T\n", c, c)
var d float64 = float64(a) / float64(b)
fmt.Printf("d is %f, type is %T\n", d, d)
}
结果:
go
c is 7.692307, type is float32
d is 7.692308, type is float64
2.8.2.2.字符串转换数字
go
func test37() {
var e string = "20"
var f int
f, _ = strconv.Atoi(e)
fmt.Printf("f is %d, type is %T\n", f, f)
}
结果:
go
f is 20, type is int
2.8.2.3.数字转字符串
go
func test37() {
g := 132
var h string = strconv.Itoa(g)
fmt.Printf("h is %s, type is %T\n", h, h)
}
结果:
go
h is 132, type is string
2.8.2.4.字符串转为浮点型
go
func test37() {
i := "3.1415926"
j, err := strconv.ParseFloat(i, 64)
if err != nil {
fmt.Println("parse string to float error, ", err)
} else {
fmt.Printf("j is %f, type is %T\n", j, j)
}
}
结果:
go
j is 3.141593, type is float64
3.语句
3.1.if...else语句
go
func test11() {
u := 80
if u >= 90 {
fmt.Println("你的成绩为优秀")
} else if u >= 80 {
fmt.Println("你的成绩为良")
} else if u >= 70 {
fmt.Println("你的成绩为一般")
} else if u >= 60 {
fmt.Println("你的成绩为及格")
} else {
fmt.Println("你的成绩为不及格")
}
}
3.2.switch语句
3.2.1.switch语句常规使用
go
func test12() {
v := 30
switch v {
case 10:
fmt.Println("1--->你的成绩为10")
case 20:
fmt.Println("1--->你的成绩为20")
case 30:
fmt.Println("1--->你的成绩为30")
}
w := 100
switch {
case v == 20, w == 100: // 或的关系
fmt.Println("2--->你的成绩为20, 100")
case v == 30, w == 100: // 或的关系
fmt.Println("2--->你的成绩为30, 100")
}
switch {
case v == 20 && w == 100: // 并且的关系
fmt.Println("3--->你的成绩为20, 100")
case v == 30 && w == 100: // 并且的关系
fmt.Println("3--->你的成绩为30, 100")
}
var x interface{}
switch x.(type) {
case int:
fmt.Println("x 是 int 型")
case float64:
fmt.Println("x 是 float64 型")
case func(int) float64:
fmt.Println("x 是 func(int) 型")
case bool, string:
fmt.Println("x 是 bool 或 string 型")
default:
fmt.Println("未知型")
}
}
结果:
go
1--->你的成绩为30
2--->你的成绩为20, 100
3--->你的成绩为30, 100
未知型
3.2.2.fallthrough语句
强制执行下一个case
go
func test12() {
switch {
case false:
fmt.Println("test 1")
fallthrough
case true:
fmt.Println("test 2")
fallthrough
case false:
fmt.Println("test 3")
fallthrough
case true:
fmt.Println("test 4")
case false:
fmt.Println("test 5")
}
}
结果:
go
test 2
test 3
test 4
3.3.select语句
go
package main
import (
"fmt"
"time"
)
func main() {
test13()
}
func test13() {
test1 := make(chan string)
test2 := make(chan string)
go func() {
time.Sleep(1 * time.Second)
test1 <- "one"
}()
go func() {
time.Sleep(2 * time.Second)
test2 <- "two"
}()
for i := 0; i < 2; i++ {
select {
case m1 := <-test1:
fmt.Println("print", m1)
case m2 := <-test2:
fmt.Println("print", m2)
default:
fmt.Println("no data...")
}
}
}
结果:
go
print one
print two
3.4.循环语句
3.4.1.for语句
go
func test14() {
for i := 0; i < 5; i++ {
if i == 5 {
continue
} else if i == 8 {
break
}
println(fmt.Sprint("num-", i))
}
}
结果:
go
num-0
num-1
num-2
num-3
num-4
num-6
num-7
3.4.2.goto跳转制定代码
go
func test15() {
var a int = 10
var b bool = false
label:
if b {
fmt.Println("---aaa---")
}
for a < 20 {
if a == 15 {
a = a + 1
b = true
goto label //跳转到制定代码快
}
fmt.Printf("a的值为 : %d\n", a)
a++
}
}
结果:
go
a's alue is : 10
a's alue is : 11
a's alue is : 12
a's alue is : 13
a's alue is : 14
---aaa---
a's alue is : 16
a's alue is : 17
a's alue is : 18
a's alue is : 19