Why not Go ? Golang入门笔记1

各位狗(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)))
}

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值