20

Go语言入门初体验

 4 years ago
source link: http://www.xetlab.com/2020/01/11/Go语言初体验/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
  1. 简单
  2. 编译快
  3. 部署,运行简单
  4. 很多区块链开源项目使用go语言开发
  5. 学习应该是码农的本能

Hello World

package main

import "fmt"

func main() {
	fmt.Printf("hello world")
}

hello world的代码看上去还好,比java简洁,和python一样语句不用分号来结束。

变量

var i int = 0

上面是一个最完整的变量声明语句,这个看着就稍微有点奇怪了,有点像javascript,后面又多了个类型声明,习惯了java里类型声明在前面,或者像javascript,python一样没有类型声明。

不过就如刚才所说,上面是一个最完整的变量声明语句,实际还可以这样声明使用:

var i = 0
var msg = "hello, world"

嗯,这还差不多,很javascript了。变量的类型由变量的初始化值决定。

还可以更简单吗?

i := 0
msg := "hello, world"

啧啧,nice!不过注意,这种写法是声明变量的同时进行初始化,当已经写过一个i := 0时,后面就不能再来个i := 1了,因为这样表示声明了两个变量,名字都为i,:=在这里是声明变量且赋值初始化。

再来个惊叹的:

x, y := 1, 2
x, y = y, x

上面的两个语句做了什么?第一行是声明并初始化了两个整型变量x和y,第二行把x和y的值对调!对调两个变量的值竟然可以这么简单!对比下java的版本:

int x = 1;
int y = 2;
int tmp = x;
x = y;
y = tmp;

条件分支

i := 10
if i < 1 {
    fmt.Println("i < 1")
} else if i >= 1 && i < 5 {
    fmt.Println("i >= 1 && i < 5")
} else {
    fmt.Println("i >= 5")
}

lang := "go"
switch lang {
    case "go":
    	fmt.Println("go is best")
    case "java":
    	fmt.Println("java is best")
    case "python":
    	fmt.Println("python is best")
    default:
    	fmt.Println("go is best")
}

条件分支看起来就差不多了,和java相比省略了括号,别的差不多。

循环

for

for i := 0; i < 5; i++ {
	fmt.Println("go语言的for循环长这样")
}

for循环看起来也差不多,和java相比,少了括号。

range

word := []string{"h", "e", "l", "l", "o"}
for index, char := range word {
    fmt.Println(index, char)
}
for _, c := range word {
    fmt.Println(c)
}
for i, _ := range word {
    fmt.Println(i)
}
for i := range word {
    fmt.Println(i)
}

关于range,可以用来遍历数组,列表,键值对,这里仅以数组为例说明。

当对数组使用range时,会返回两个变量,第一个变量是数组的索引,第二个变量是数组对应索引的值。

这和java里的for … in …有点像,但这个支持取索引,和javascript中的each也挺像。

上面第二个for写法第一个变量是一个下划线,表示对index不感兴趣,这里就用下划线来占位。

类似,第三个for对value不感兴趣,就把value用下划线来占位。

第四个for其实效果和第三个for一样,如果只写一个变量,默认是index。

while

for {
    fmt.Println("go语言很奇葩,没有while")
}

i := 1
for i <= 5 {
    fmt.Printf("%d:go语言很奇葩,没有while\n", i)
    i++
}

i = 1
for true {
    if i > 5 && 1 > 0 {
        break
    }
    fmt.Printf("%d:go语言很奇葩,没有while\n", i)
    i++
}

go语言很奇葩,竟然没有while,上面的三个for分别对应java里的:

while (true) {
    //xxx;
}

while (i <= 5) {
    //xxx;
}

while (true) {
    if (i > 5 && 1 > 0) {
        break;
    }
    //xxx;
}

结语

go语言的初体验先到此为止,语法上确实有它简单的地方,也有它奇葩的地方,看看,写写,跑跑,go语言之路走起。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK