这是一篇写于2021年3月的总结稿,当时还立了Flag: 我打算从PHP转Go啦,坚持每天打卡,坚持每天学习新的知识点,为月薪30k+做准备。
接下来看看我当年学的Go基础知识点吧:编译、变量、常量、基本数据类型、字符串。
谁不是从易到难,一步一步学的呢?
编译
使用 go build
- 在项目目录下执行
- 在其他路径下编译 go build ,需要在后面加上项目的路径(项目路径从GOPATH/src后开始写起,编译之后的可执行文件就保存在当前目录了)
- 打包的时候支持自定义名字:go build -o 自定义包名
go run
像执行脚本文件一样执行 go 代码
go install
go install 分为两步:
- 先编译得到一个可执行文件
- 将可执行文件拷贝到'GOPATH/bin'
交叉编译跨平台编译
- Go支持跨平台编译
- 例如:在mac平台或者Windows平台编译出可以运行在Linux平台的二进制文件
- 示例代码:Mac 下编译 Linux 和 Windows平台 64位 可执行程序:
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build | |
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build |
go语言文件的基本结构
//导入语句 双引号包裹 | |
import "fmt" | |
//函数外只能放置标识符(变量,常量,函数,类型)的声明;不能放置语句 | |
//程序的入口函数 | |
func main() { | |
fmt.Println("hello world") | |
} | |
变量和常量
- 标识符和关键字
- 关键字
- 保留字
变量
go的变量要先声明再使用
声明变量
var sl string 声明一个保存字符串类型的变量s1
var age int
var isOk bool
注意事项
- 函数外的每个语句必须以关键字开始(比如:var、const、func、import等)
- := 不能在函数外使用
- _ 多用于占位,标识值可以忽略
package main | |
import "fmt" | |
//go语言中推荐使用驼峰命名 | |
// var studentName string | |
//声明变量 | |
// var name string | |
// var age int | |
// var isOk bool | |
//批量声明 声明全局变量建议使用批量声明,方便追加 | |
var ( | |
name string // "" | |
age int // 0 | |
isOk bool // false | |
) | |
//匿名变量使用_指定,匿名变量不占用命名空间,不会分配内存,所以匿名变量之间不存在重复声明。 | |
func main() { | |
name = "理想" | |
age = 18 | |
isOk = true | |
// var test = string | |
//go语言中非全局变量声明了就必须使用,不使用就无法编译(全局变量声明了不使用也可以编译通过) | |
fmt.Print(isOk) //在终端中输入要打印的内容 | |
fmt.Println() | |
fmt.Printf("name:%s\n", name) // %s是一个占位符 使用name这个变量的值替换%s占位符 | |
fmt.Println(age) //打印完指定的内容后,会加一个换行符 | |
// test = "111" | |
// fmt.Println(test) | |
//声明变量的同时赋值 | |
var s1 string = "wzy" | |
fmt.Println(s1) | |
//类型推倒 根据值判断变量是什么类型 | |
var s2 = "lizijie" | |
fmt.Println(s2) | |
//简短变量声明,只能再函数里面用 | |
s3 := "luanran" | |
fmt.Println(s3) | |
// 同一个作用域,不能重复声明同名变量 | |
// 简单理解作用域,同一个{}就是一个作用域 | |
// s3 := "huihui" | |
// 匿名变量 是一个特殊的变量:_ | |
} | |
注意 := 不能在函数外使用
因为有小伙伴在这里犯错,所以再再多说一句, := 是不能在函数外使用的。
基本数据类型
32位和64位操作系统的区别
程序寻址长度,最大支持多少内存,一个老旧的32位Windows操作系统最多只能读取3.8G的内存,安装16G的内存条也只能读取3.8G的内存
八进制和十六进制
- 八进制数的第一位就是0
- 十六进制数是0x开头的
字符串
- Go语言中的字符串是由双引号包裹的
s1 := "123" | |
s2 := "我们" | |
s3 := "mystring" |
- go语言中单引号包裹的是字符(单独的字母,汉字,符号,数字)
s1 := '1' | |
s2 := '我' | |
s3 := 's' | |
// 字节:1个字节=8Bit(8个二进制位) | |
// 一个字符'A' = 1个字节 | |
// 一个utf8编码的汉字一般占3个字节 (比如‘沙’) |