GO笔记-基础语法
第一个go程序,让我们打开go PlayGround,你可以在这里编写你的第一个go程序,
// You can edit this code!
// Click here and start typing.
package main //main是包名
import "fmt" //导入fmt包
func main() { //main函数是程序起点
fmt.Println("Hello, 世界")
}
每个go文件都已package关键字开头,后面跟着包的名称,go文件有一个或者多个import语句,文件需要导入其它的包 才能使用其代码。
变量声明
变量声明格式 var 变量名 类型 = 表达式。如果声明一个变量而没有给它赋值,该变量将包含其类型的零值。对于数值类型,零值实际上就是0.
var num int
var width, length float64
有时候我们会将变量的类型省略,这个时候编译器会根据等号右边的值来推导变量的类型完成初始化。
var q = 2
var width, length = 1.2, 1.3
var a = 1
短变量声明
如果你声明变量时就知道它的初始值是什么,那么更具有代表性的是使用短变量声明。
width, length := 1.2, 1.3
命名规则
- 名称必须以字母开头,并且可以有任意数量的额外的字母和数字。
- 如果变量、函数或类型的名称以大写字母开头,则认为它是导出的,可以从当前包之外的包访问它,如果变量 函数/类型的名称是以小写字母开头的,则认为该名称是未导出的,只能在当前包中使用。
- 如果一个名称由多个单词组成,则用驼峰格式。
go的安装
去官网下载对应系统安装即可
go的编译
% go build main.go
% ls
main main.go
% ./main
hello world
go run 快速执行
go run main.go
go 函数多个返回值
但在Go中,它们可以返回任意数量的值。Go中多个返回值最常见的用法是返回一个额外的错误值,可以通过查询该错误值来确定函数或方法运行时是否发生了错误
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
reader := bufio.NewReader(os.Stdin)
input, err := reader.ReadString('\n')
if err != nil {
log.Fatal(err)
}
fmt.Print(input)
}
- "_"标识符,用来忽略函数的某个返回值
- 没有参数的 return 语句返回各个返回变量的当前值
if代码块
if err != nil {
log.Fatal(err)
}
使用Printf和Sprintf格式化输出
package main
import (
"fmt"
)
func main() {
fmt.Printf("format %s", "123")
}
格 式 | 描 述 |
---|---|
%b | 整型以二进制方式显示 |
%o | 整型以八进制方式显示 |
%d | 整型以十进制方式显示 |
%x | 整型以十六进制方式显示 |
%X | 整型以十六进制、字母大写方式显示 |
%c | 相应Unicode码点所表示的字符 |
%U | Unicode 字符, Unicode格式:123,等同于 "U+007B" |
函数声明
func add(n1, n2 int) int {
return n2 + n1
}
函数的值传递
调用一个声明了形参的函数时,你需要为调用提供实参。每个实参中的值被复制到相应的形参变量
指针
&符号获取一个变量的地址
package main
import "fmt"
func main() {
var f float64 = 10
println(&f)
}
.
0xc00003c760
指针类型
指针的类型可以写为一个符号,后面跟着指针指向的变量的类型。例如,指向一个int变量的指针的类型将被写为int, 可以使用reflect.TypeOf函数来显示之前程序中指针的类型
package main
import "fmt"
func main() {
var f float64 = 10
fmt.Println(reflect.TypeOf(f))
}
改变指针的值
package main
import "fmt"
func main() {
myInt := 4
fmt.Println(myInt)
myPointer := &myInt
*myPointer = 8
fmt.Println(*myPointer)
fmt.Println(myInt)
}
4
8
8
函数返回指针
package main
import "fmt"
func main() {
pointer := getPointer()
fmt.Println(*pointer)
}
func getPointer() *int {
myInt := 10
return &myInt
}