【Day 0】跟着Google学Go——A Tour of Go

在这里插入图片描述
图片来源:samjoule/Shutterstock


开始学习go语言,官方给了一个入门教程:
英文地址:https://tour.golang.org/list
在这里插入图片描述
中文地址:https://tour.go-zh.org/list

但是强烈建议看英文的,原因就不多说了


Day 0:

可能是go在大陆太火爆了,教程一开始就能看到熟悉的中文,左边是文字说明,右边是代码编辑与输出,可以在看完文字说明后立即上手练一练,非常方便
在这里插入图片描述
选择语言,强烈建议直接看英文的
在这里插入图片描述
官方除了在线的教程外,还提供离线的教程
在这里插入图片描述
这里说明了一下该教程是基于go游乐场的服务:

  • 开始时间始终为2009-11-10 23:00:00 UTC(golang的生日),这一点很重要,因为你没有办法获取到变化的时间,也就没有办法通过时间获取随机数,这点后面会讲到
  • 对运行时间、CPU、内存、外网访问都存在限制(白嫖的别期待太多)
  • 始终使用最新版本的go
    在这里插入图片描述
    Here we go!
    在这里插入图片描述
    搞清楚三个名称:
  • 包名
  • 路径名
  • 文件名
    文件名和包名、路径名的关系不大,基本可以认为随便起
    示例代码中的math/rand为路径名,函数中的rand为包名
    所以可以猜想src目录下文件结构为:
.
├── package.go
└── math
    └── rand
        └── xxxx.go

xxxx.go文件:

package rand

import (
	...
)

func Intn() {
	...
}

参考:https://www.jianshu.com/p/07ffc5827b26
虽然此处math是go自带的包

由于没有加随机种子,所以此处代码每次运行都始终是同一个值
所以我们可以通过获取当前时间,设置变化的随机种子

package main

import (
	"fmt"
	"math/rand"
	"time"
)

func main() {
	rand.Seed(time.Now().UnixNano())
	fmt.Println("My favorite number is", rand.Intn(10))
}

但你会发现还是一个固定值,这就是因为go游乐园的开始时间始终为2009-11-10 23:00:00 UTC
在这里插入图片描述
这里主要说明了import可以写在一起也可以分开写,官方更推荐写在一起,这和Python正好相反
在这里插入图片描述
这里和Python不一样,如果希望函数或者变量被其他包使用,则名字开头必须大写,否则会报错
在这里插入图片描述
函数结构包括:

  • func关键字
  • 函数名
  • 用()包裹的参数(可以为空也可以多个)、参数类型
  • 用{}包裹的函数体,如果函数有return,则在{}前需有返回值类型

参数的写法可以是

(x int, y int)
(x, y int)

在这里插入图片描述
在这里插入图片描述
返回值存在多个,则返回值类型也需要写多个,且使用()包裹
在这里插入图片描述
下面的返回值写法正确,但是不推荐使用
在这里插入图片描述
使用var关键字声明变量,var语句可以存在于函数体外也可以存在于函数体内
在这里插入图片描述
使用var声明变量的同时也可以进行初始化赋值,而且类型默认与赋值的类型一致
在这里插入图片描述
短变量声明 (直译过来真的很难理解)
简单来说就是用:=替代var
但是由于在函数体外,每一条语句开头都需要有关键字,所以:=不被允许

Python 3.8新加的海象运算符和这个功能可不太一样

if (n := len(a)) > 10:
    print(f"List is too long ({n} elements, expected <= 10)")

参考:https://docs.python.org/3/whatsnew/3.8.html#assignment-expressions
在这里插入图片描述
基础类型
int、uint、uintptr长度随系统变化而变化,32位系统32字节,64位系统64字节
在这里插入图片描述
零值
变量如果没有初始化赋值则会被赋值为零值

  • 数值类型的零值为0
  • 布尔类型的零值为false
  • 字符串类型的零值为""
    在这里插入图片描述
    类型转换
    与C语言不同,Go语言在不同类型之间转换时需要显式类型转换
    Python则是分情况
    隐式:
num_int = 123
num_flo = 1.23
num_new = num_int + num_flo

显式:

num_str = "123"
num_flo = 1.23
num_new = int(num_str) + num_flo

在这里插入图片描述
类型推断
在声明变量时,如果没有指定类型,则会默认根据所赋值的类型进行类型推断
在这里插入图片描述
常量
使用const关键字进行声明
常量可以是字符、字符串、布尔以及数值类型
常量不能使用:=语法进行声明
在这里插入图片描述
数值常量
数值常量是高精度值

<<移位操作符,1 << 100就是将二进制数1左移100位,变为二进制数100…000,相对的>>是右移
参考:https://stackoverflow.com/a/23189744
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值