Open
Description
这条学习路线出自:快速掌握一个语言最常用的50%。
Go语言示例部分出自:GO 语言简介(上)— 语法
本系列将以Go语言为例,详细实践这条路线,展示上手一个语言基本内容的主要过程。
本系列主要针对的是具有编程经验的人,且只适用于学习支持过程式/函数式编程的语言。
第一章:基本数据类型,基本语法和主要语言构造,主要数学运算符和print函数的使用;数组和其他集合类的使用。
1 Hello World
第一步即是最经典的Hello World,展现print函数的使用。从这步也可以最快地了解该语言写出来的最简单的程序形式。
package main
import "fmt"
func main() {
fmt.Println("Hello World")
}
然后是格式化的输出:
package main
import "fmt"
func main() {
fmt.Printf("%t\n", 1 == 2)
fmt.Printf("二进制:%b\n", 255)
fmt.Printf("八进制:%o\n", 255)
fmt.Printf("十六进制:%X\n", 255)
fmt.Printf("十进制:%d\n", 255)
fmt.Printf("字符串:%s\n", "hello world")
}
2 基本数学运算
学习基本的加减乘除,能够将该语言作为计算器使用。
package main
import "fmt"
func main() {
fmt.Println(1 + 1)
fmt.Println(2.0 - 1.1)
fmt.Println(2 * 1024)
fmt.Println(256 / 128)
fmt.Println(2 ^ 1) // 移位
fmt.Println(math.Pow(2, 3)) // 次方
// 高级的数学计算参见math包。
}
3 变量声明
package main
import "fmt"
func main() {
var a int = 1
i := 1
j, k := 1.1, 2.1
l := true
const m = "hello" // 常量
fmt.Println(a, i, j, k, l, m)
}
4 分支循环语句
图灵完备所需要的流程控制语法。
判断:
if x % 2 == 0 {
//...
}
//if - else
if x % 2 == 0 {
//偶数...
} else {
//奇数...
}
//多分支
if num < 0 {
//负数
} else if num == 0 {
//零
} else {
//正数
}
循环:
//经典的for语句 init; condition; post
for i := 0; i<10; i++{
fmt.Println(i)
}
//精简的for语句 condition
i := 1
for i<10 {
fmt.Println(i)
i++
}
//死循环的for语句 相当于for(;;)
i :=1
for {
if i>10 {
break
}
i++
}
5 练习:用循环求斐波那契数列第n个数
package main
import "fmt"
func main() {
n := 7
a := 0
b := 1
for n >= 2 {
a, b = b, a+b
n -= 1
}
fmt.Println(a)
}
6 数组
func main() {
var a [5]int
fmt.Println("array a:", a)
a[1] = 10
a[3] = 30
fmt.Println("assign:", a)
fmt.Println("len:", len(a))
b := [5]int{1, 2, 3, 4, 5}
fmt.Println("init:", b)
var c [2][3]int
for i := 0; i < 2; i++ {
for j := 0; j < 3; j++ {
c[i][j] = i + j
}
}
fmt.Println("2d: ", c)
}
7 数组切片
a := [5]int{1, 2, 3, 4, 5}
b := a[2:4] // a[2] 和 a[3],但不包括a[4]
fmt.Println(b)
b = a[:4] // 从 a[0]到a[4],但不包括a[4]
fmt.Println(b)
b = a[2:] // 从 a[2]到a[4],且包括a[2]
fmt.Println(b)
8 map
func main(){
m := make(map[string]int) //使用make创建一个空的map
m["one"] = 1
m["two"] = 2
m["three"] = 3
fmt.Println(m) //输出 map[three:3 two:2 one:1] (顺序在运行时可能不一样)
fmt.Println(len(m)) //输出 3
v := m["two"] //从map里取值
fmt.Println(v) // 输出 2
delete(m, "two")
fmt.Println(m) //输出 map[three:3 one:1]
m1 := map[string]int{"one": 1, "two": 2, "three": 3}
fmt.Println(m1) //输出 map[two:2 three:3 one:1] (顺序在运行时可能不一样)
for key, val := range m1{
fmt.Printf("%s => %d \n", key, val)
/*输出:(顺序在运行时可能不一样)
three => 3
one => 1
two => 2*/
}
}
Activity