Why not Go ? Golang入门笔记1

xiaoxiao2021-02-28  33

各位狗(Go)年大吉~

这是我的Golang入门笔记开篇之作(PS:重点是笔记,用来记录一些细节上的注意点而非入门教程) 接下来就开始我的表演~

0x00 我看Golang

第一次听说Golang,还是在学Python爬虫的时候,看到也有人用Golang写爬虫,但苦于只会一点Python和C,并不能完全看懂Go语言。如今来正式学习Golang,心情难免激动。看了一些Go语言的示例代码和语言特性,竟然有种似曾相识的感觉——仿佛有着C/Java/Python的影子。去某乎上逛了圈发现确实还有人这么评价Golang,"互联网时代的C语言"。

好了不扯了,先做笔记。

0x01 Helloworld

先看我写的第一段Go代码

// test1.go package main import ( "fmt" ) func main() { var year int fmt.Println("When?") fmt.Scanln(&year) if year == 2018 { fmt.Println(year, ",Hello World!") } }

不难发现,Golang代码基本上由三块组成,package&import&func,这里就非常像Java了,也可见Golang是典型的模块化语言。其次,不知道有没有人注意到,我所用到的输入输出函数开头首字母都是大写的。原因如下

大写字母开头的变量是可导出的,也就是其它包可以读取的,是公有变量;小写字母开头的就是不可导出的,是私有变量。 大写字母开头的函数也是一样,相当于class中的带public关键词的公有函数;小写字母开头的就是有private关键词的私有函数。

越看越像Java了233333。有没有人注意到那个取地址符&,关键的来了!Golang有指针!但是没有指针运算……C和Java的合体进化体出现了23333。

0x02 MD5

还是先看代码~

// test2.go package main import ( "crypto/md5" "encoding/hex" "fmt" "strings" // "reflect" ) func GetMD5(x []byte) []byte { h := md5.New() h.Write(x) CipherStr := h.Sum(nil) return CipherStr } func main() { //can not use 'a:=[]byte{"Golang"}' due to data type conversion var plain string fmt.Scanln(&plain) //change string into slice a := []byte(plain) b := GetMD5(a) c := strings.ToUpper(hex.EncodeToString(b)) fmt.Printf("%s\n%s\n", c, c[8:24]) //fmt.Printf("Type_of_a:%s;\nType_of_b:%s;\nType_of_HexEncodeToString(b):%s;\n", reflect.TypeOf(a), reflect.TypeOf(b), reflect.TypeOf(hex.EncodeToString(b))) }

这里有若干个要点……(我想到几个讲几个吧)

在Golang中array的数据类型比较奇葩……比如我var ar [3]int{1,2,3},你猜ar类型是啥?不是什么[]int,而是[3]int,所以在传参时,如果要传递数组,首先得获得数组长度……这多麻烦啊,所以就需要一个相对动态的类型来做中间介质了——slice势力登场!在GetMD5函数中传参传的就是slice(虽然我觉得string传参也没毛病)至于slice的详细特性,推荐一个大神的入门教程中对slice的介绍 Golang基础(包括对array/slice/map的详细介绍)Golang中获取变量类型的方法需要另外导入"reflect"包,调用Typeof方法a:=[]byte{'x','y','z'}是声明并定义一个[3]byte型变量,而a:=byte("xyz")则是定义了一个slice声明一个函数需要func关键字+args+returns,注意!Go支持函数多返回值!比如我声明一个函数multiret,就可以写成如下形式 func multiret(a int64,b float32)(int64,int64,[]byte){……}slice变量其实非常像python中的字符串,但是也有所不像,比图说某个slice来自于某个array,那么这个slice其实并没有独立于array,对slice的append方法就会改变所来源的array,以及slice的cap有限,受制于array的大小。…… 总而言之,Golang很有趣~ 夜深了,就先讲这些了,明天继续补Golang笔记2
转载请注明原文地址: https://www.6miu.com/read-2621014.html

最新回复(0)