[js go]从你好世界到变量与常量

234 阅读3分钟

开启go之旅

从Hello world开始吧

搭建开发环境, 此处可Google

# 创建helloworld文件夹, 进入helloworld文件夹, 创建main.go文件
$ mkdir helloworld && cd $_ && touch main.go   
package main

import (
	"fmt"
)

func main() {
	fmt.Print("Hello world!")
}

运行

# 运行main.go的代码
$ go run main.go

或者

# 构建hellowworld可执行文件
$ go build
$ ./helloworld

上注释

// go自带lint和format工具, 类似eslint和prettier, 统一了代码规范, 程序的可读性, 可维护性更强
// 包名, 如果是main, 从此处作为入口, 编译成可执行文件, 类似webpack配置的entry或者rollup配置的input
package main

// 引入go官方的包或者第三方的包, 引入多个包可写在括号里用逗号分隔, 编辑器可自动检测你需要引用什么包
import (
	"fmt"
)

// 程序的入口, 没有参数和返回, func关键字声明函数, 同js中的function
func main() {
	// 使用fmt包对外暴露的Print方法, 注意P大写, 字符串必须用双引号, 单个字符才能用单引号
	fmt.Print("Hello world!")
}

变量

语法规则

  • 可用var关键字声明变量, 同js
  • 变量命名规范同js, 只能包含字母数字下划线, 不能以数字开头
  • 可批量命名, 用括号括起来, 用逗号分隔, 同批量引入包
  • 命名变量后必须定义类型, 或者由赋值推导类型
  • 命名后如果不赋值, 默认为该变量类型的零值
  • 函数内部声明的变量必须使用, 不然会报错, 函数外声明的全局变量不使用不会报错但是不推荐
  • 同一作用域内不能重复命名
// 批量声明变量
var (
	name   string    // ''
	age    int       // 0
	isOk   bool      // false
	a0   = "hello" // 类型推导为string, 注意字符串不能用单引号 
	a1, a2 = 1, 0 // 同时声明和赋值多个变量
        a1 = 1 // 重复命名, 报错
	a3 // 未定义类型, 报错
)

简短变量声明

在函数体内部可使用:=声明变量

str := "Hello world!"
fmt.Print(str)
a1, a2 := 0, 1
fmt.Print(a1, a2)

匿名变量

因为go中函数可以返回多个值, 某些情况下我们只需要使用其中一部分值, 这种场景可使用匿名变量, 即下划线_

func ret3string() (string, string, string) {
	return "res1", "res2", "res3"
}

func main () {
	s1, _, _ := ret3string() // _ 匿名变量, 不占用内存和命名空间, 不会产生重复声明
        fmt.Print(s1)
}

常量

常量即在程序的运行期间内不会改变的量

语法规则

  • 用const关键字声明常量, 同js
  • 可批量声明, 用逗号隔开
  • 批量声明时, 如果某一行没有赋值, 则和上一行的值一样
const (
	a1 = 1
	a2 // 默认和上一行的值一样, 即a2的值也
)

iota

  • iota为常量计数器, 类似ts中的enum
  • const关键字出现时, iota被重置为0
  • const中, 没新增一行, iota += 1
const (
	b1 = iota // iota为0
	b2 // iota为1, b2等于b1
	b3 = 1 // iota为2
	_  = iota // iota为3
	b4 // iota为4, b4等于iota, 也为4
	b5, b6 = iota + 1, iota + 2 // iota为5
	b7, b8 = iota + 1, iota + 2 // iota为6
)

iota的应用

const (
	_  = iota
	KB = 1 << (10 * iota)
	MB = 1 << (10 * iota)
	GB = 1 << (10 * iota)
	TB = 1 << (10 * iota)
	PB = 1 << (10 * iota)
)