Chapter 1 Golang Basics

Go003 Chapter 1 Golang Basics

Chapter 1 Golang Basics
Page content

Golang 基础

Hello, World!

package main

import "fmt"

func main() {
    fmt.Pritln("Hello, World!")
}

1.1 golang 变量和类型推断

使用var关键字来申明变量

var (
    name string
    gender string 
    age uint8
)

可以一行声明多个变量

var (
    name, hometown string
    haveJob, schoolBoy bool
    age uint8
)

当然,通常是一个变量一行的申明,当需要定义多个变量时使用上面的方式

var name string
var gende string
var age uint8

声明的同时也可以初始化变量

var (
    name string = "suo.li"
    gender string = "female"
    age uint8 = 25
)

初始化变量时可以省略类型(类型推断)

var (
    name = "suo.li"
    gender = "female"
    age = 25
)

也可以在同一行初始化多个不同类型的变量(类型推断)

var (
    name, age, hobby = "suo.li", 25, []string{"coding", "gaming"}
)

在一个函数中,可以使用短变量申明省略var关键字,赋值使用符号:=,声明变量的同时给其初始化一个值

func sayHi() {
    name := "suo.li" // 使用短变量声明语法时不需要var关键字
    fmt.Println("hi, my name is ", name)
}

一个变量的类型可以是go语言中的任何类型,包括函数类型

func sayHi() {
    say := func() {
        fmt.Println("hi, my name is suo.li.")
    }()
    say()
}

需要特别注意的是,golang语言中,在函数(func)外的所有结构都以某个关键字开头(var, func, …), 并且短变量声明使用的:=符号不能出现在函数外

1.2 golang中的常量

常量的定义使用const关键字

const pi = 3.14
const (
    StatusOK               = 200
    StatusNotFound         = 404
    StatusBadGateway       = 502
    StatusMovedPermanently = 301
    StatusFound            = 302
)
package main // golang语言中每个源代码文件都属于一个包, 一个工程中只允许有一个main包

import (
    "fmt" // 引入fmt包
)

const (
    lightSpeed = 299792458
    CIFV = 376.730313668
    greeting = "你好!"
    name = "suo.li"
    bigN = 2 << 45
    smallN = 5 >> 46
)

func main() {
    const localN = 2
    fmt.Println(localN)

    fmt.Println(lightSpeed)
    fmt.Printf("%v my name is %v\n", greeting, name)
}

1.3 包和导入包

导入包使用import关键字来操作

import "fmt"
import "net/http"
import "github.com/astaxie/beego"

或者:(常用)

import (
    "fmt"
    "net/http"
    "github.com/astaxie/beego"
)

导入包时可以给包取个别名

import (
    format "fmt"  // format 是包 fmt 的别名
    "net/http"
    beego "github.com/astaxie/beego" // beego 是包 github.com/astaxie/beego 的别名
)

有的时候可以使用_下划线来作为包别名,表示导入该包而不使用该包(但是该包的init函数会在程序运行时运行)

import (
    "math/rand"
    _ "gitbub.com/go-sql-driver/mysql"  # 该包下的init函数会在主程序运行到本文件的代码时运行
)