Go lang phase 1
Last Update:
Word Count:
Read Time:
Go First
Env
go 1.21.2 Stable Version
Goland 2023.2.2
Hello World
1 |
|
package main
:Go
感觉上和Java
有点像,都需要声明该源文件属于哪个包,package main
代表其是一个可以独立执行的程序,同样和Java
一样,每个Go
应用程序都需要有一个main
包
import "fmt"
:告诉ide这个程序需要用fmt
这个包,而fmt
中实现了格式化IO函数
func main()
:除init()
外启动后第一个执行的函数
fmt.Println()
:格式化输出,会在字符串后自动增加\n
对于一个标识符,如果其以大写字母开头,则可以被包外引用,类似于public
;而如果以小写字母开头,则只能在包内使用,类似于protected
在Go
中,{
是不能单独放在一行里的,意味着在上方的helloworld.go
中,只能写作func main() {
而不能分在两行
Run Go
Go
的源文件后缀为.go
,在使用cli
而非Goland
等工具编写时,可以使用run
和build
指令
1 |
|
Basic Syntax
Line separator
在Go
中,每一行代表着一条语句的结束,而不需要使用;
,但如果要在一行内执行多条语句,则需要使用;
将他们分隔开
Exegesis
1 |
|
Identifier
在Go
中,标识符的命名和大多数语言一样,可以由大小写字母、数字、下划线共同构成,同样,必须以字母或下划线开头,而非使用数字
Strings
Concatenation
在Go
中,字符串拼接非常简单,只需要使用+
即可
1 |
|
Formation
在Go
中,可以使用fmt.Sprintf
和fmt.Printf
来格式化字符串
func Sprintf(format string, a ...any) string
:格式化字符串并赋值给新串
根据格式化参数生成格式化的字符串并返回该字符串,格式化样式中,格式化符号以%
开头,%s
为字符串,%d
为十进制整数;参数列表中,各个参数之间以,
隔开,其个数必须与前面的格式化样式对应
1 |
|
常用的格式化符号
%v | 按值的本来值输出 |
---|---|
%+v | 在 %v 基础上,对结构体字段名和值进行展开 |
%#v | 输出 Go 语言语法格式的值 |
%T | 输出 Go 语言语法格式的类型和值 |
%% | 输出 % 本体 |
%b | 整型以二进制方式显示 |
%o | 整型以八进制方式显示 |
%d | 整型以十进制方式显示 |
%x | 整型以十六进制方式显示 |
%X | 整型以十六进制、字母大写方式显示 |
%U | Unicode 字符 |
%f | 浮点数 |
%p | 指针,十六进制方式显示 |
func Printf(format string, a ...any) (n int, err error)
:格式化字符串并写入标准输出
大体上和Sprintf
类似,但不是赋值而是直接输出
Variable
声明变量一般使用var
,格式为var name1, name2, ... type
,如果定义一个变量但没有初始化,则会默认为零值,在Go
中,变量也会自动判断类型,比如var name = value
,会将name
认为成和value
一样的类型,
:=
:在Go
中可以使用该符号来快速定义一个变量,name := 1
等价于var name int; name = 1
,所以我们不能对一个已经声明过的变量使用:=
_
在Go
中,_
是空白标识符,作用是用来抛弃某个值,其存在的意义与Go
对变量的要求有关
Go
要求所有局部变量必须被使用(全局变量不需要,赋值不算做使用),而如果一个函数的返回值有多个,但我们不想全部使用,则可以如下操作:
1 |
|
而与此同时,由于Go
中相同类型的变量可以使用a, b = b, a
进行快速的数值互换,所以在_, b = b, a
中,b
原先的值就被抛弃了
Constant
常量实在程序运行时不会被修改的量,定义如下
1 |
|
这里的type
可以省略,让其自行判断类型
1 |
|
使用常量进行枚举时,函数必须得是内置函数,比如len()
,unsafe.Sizeof()
等等
iota
iota
是Go
中一个特殊的常量,其可以被编译器进行修改。iota
在const
出现时会被重置为0
,而在之后每新增一项声明就会使iota += 1
1 |
|