Skip to content

快速上手一个语言的学习路线(Go语言描述):一 #27

Open
@bieberg0n

Description

@bieberg0n
Owner

这条学习路线出自:快速掌握一个语言最常用的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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @bieberg0n

        Issue actions

          快速上手一个语言的学习路线(Go语言描述):一 · Issue #27 · bieberg0n/blog