0.安装
0.1.下载安装包
https://golang.google.cn/dl/
linux下载go1.Xxx.Yyy.linux-amd64.tar.gz版本安装包
0.2.解压
tar -C /usr/local -xzf go1.4.linux-amd64.tar.gz
0.3.安装
修改/etc/profile文件, 添加一行
export PATH=$PATH:/usr/local/go/bin
或者修改~/.bash_profile
文件也是可以的
刷新资源文件
source /etc/profile
1.基本入门
package main
import "fmt"func main() {fmt.Println("Hello World, Go!")
}
main方法为项目的起始方法
2.简单语法
2.1.init方法
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.字符串打印
func test1() {fmt.Println("test1--->", "Hello, World!")
}
2.2.2.字符串和数字拼接
func test3() {var a string = "123456"d := fmt.Sprint(a, 54321)fmt.Println("test3--->", d)
}
2.3.多变量赋值
2.3.1.成员变量
var e , f = 1, "321"func test4() {fmt.Println("test4--->", e, f)
}
2.3.2.局部变量
func test5() {g, h := 3, "333"fmt.Println("test5--->", g, h)
}
2.4.常量
func test6() {const i = 100fmt.Println("test6--->", i)
}
2.5.基本运算
func test7() {j := 15k := 10fmt.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.判断相等
func test8() {m := 10n := 10o := 11if (m == n) {fmt.Println("test8--->", "等于")}if (m != o) {fmt.Println("test8--->", "不等于")}
}
2.7.或与判断
func test9() {p := trueq := falseif (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.类型判断
func test10() {r := 10s := "test"t := truefmt.Printf("test10--->r type:%T\n", r)fmt.Printf("test10--->s type:%T\n", s)fmt.Printf("test10--->t type:%T\n", t)
}
结果:
test10--->r type:int
test10--->s type:string
test10--->t type:bool
2.8.2.类型转换
2.8.2.1.数字类型之间转换
func test37() {var a int = 100var b int = 13var 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)
}
结果:
c is 7.692307, type is float32
d is 7.692308, type is float64
2.8.2.2.字符串转换数字
func test37() {var e string = "20"var f intf, _ = strconv.Atoi(e)fmt.Printf("f is %d, type is %T\n", f, f)
}
结果:
f is 20, type is int
2.8.2.3.数字转字符串
func test37() {g := 132var h string = strconv.Itoa(g)fmt.Printf("h is %s, type is %T\n", h, h)
}
结果:
h is 132, type is string
2.8.2.4.字符串转为浮点型
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)}
}
结果:
j is 3.141593, type is float64
3.语句
3.1.if…else语句
func test11() {u := 80if 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语句常规使用
func test12() {v := 30switch v {case 10:fmt.Println("1--->你的成绩为10")case 20:fmt.Println("1--->你的成绩为20")case 30:fmt.Println("1--->你的成绩为30")}w := 100switch {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("未知型")}
}
结果:
1--->你的成绩为30
2--->你的成绩为20, 100
3--->你的成绩为30, 100
未知型
3.2.2.fallthrough语句
强制执行下一个case
func test12() {switch {case false:fmt.Println("test 1")fallthroughcase true:fmt.Println("test 2")fallthroughcase false:fmt.Println("test 3")fallthroughcase true:fmt.Println("test 4")case false:fmt.Println("test 5")}
}
结果:
test 2
test 3
test 4
3.3.select语句
package mainimport ("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...")}}
}
结果:
print one
print two
3.4.循环语句
3.4.1.for语句
func test14() {for i := 0; i < 5; i++ {if i == 5 {continue} else if i == 8 {break}println(fmt.Sprint("num-", i))}
}
结果:
num-0
num-1
num-2
num-3
num-4
num-6
num-7
3.4.2.goto跳转制定代码
func test15() {var a int = 10var b bool = falselabel:if b {fmt.Println("---aaa---")}for a < 20 {if a == 15 {a = a + 1b = truegoto label //跳转到制定代码快}fmt.Printf("a的值为 : %d\n", a)a++}
}
结果:
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