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
}

results matching ""

    No results matching ""