Go学习笔记(5)Go编程基础

x33g5p2x  于2022-03-06 转载在 其他  
字(2.4k)|赞(0)|评价(0)|浏览(374)

写在前面

本文主要介绍关于Go语言编程的一些基础知识,包括Go编程的一些规则格式标识符关键字包导入一般结构等内容。

Go标识符

在Go中,几乎所有的东西(变量、常量、函数…)都会有一个标识符,关于Go中标识符的命名规则,要注意以下几点:

  • 区分大小写

  • 有效的标识符必须以字母(可以适用任何UTF-8编码的字符)或者下划线开头

  • 以下是无效的标识符

  • 1ab(以数字开头)

  • a+b(包含运算符)

  • case(关键字)

Go关键字

Go中一共有25个关键字,都是小写,如下表所示

breakdefaultfuncinterfaceselect
casedefergomapstruct
chanelsegotopackageswitch
constfallthroughifrangetype
continueforimportreturnvar

Go注释方法

  • 单行注释 //
  • 多行注释 /* */

Go大括号使用规则

首先需要注意一点:Go语句的结尾不需要加分号;
     因为这个工作编译器在编译的时候已经自动帮我们做了,编译器会根据一些规则在判断出语句末尾的地方自动添加上分号;
    接下来回到正题,这里的大括号是{},像我们写一个函数、或者是写个if,for语句都会用到大括号,在使用大括号时需要注意:

  • 左大括号 { 必须与方法的声明放在同一行
  • 右大括号 } 需要被放在紧跟函数体的下一行
  • 如果在你的函数语句特别短的情况下,也可以将所有内容都放在一行搞定,比如
func sum(a int, b int) int {return a+b}

当然并不推荐这样写。
    根据上面1、2点的规则,使用大括号的时候都必须强制这么写:

func printHW(){
	fmt.Println("Hello World")
}

这么做的原因,可以结合以下一开始提到的编译器自动帮我们添加上分号这个机制,假如把左括号放在声明语句的下面一行,那么在编译的时候声明语句将被添加上分号,如func printHW();导致编译出错。

Go程序一般结构

下面先展示一段Go的模板程序

package main

import "fmt"
const c = "C"
var v int = 5
type T struct{}
func init() { 
}
func main() {
   var a int
   Func1()
   // ...
   fmt.Println(a)
}

func Func1() { // exported function Func1
   //...
}

Go程序一般结构:

  • Go 程序是通过package来组织的,每个Go文件都属于且仅属于一个包,一个包可以由许多go文件组成。必须在Go源文件中非注释的第一行指明这个文件属于哪个包

  • 通过import关键字来导入其它的包

  • 通过const关键字来进行常量的定义

  • 函数体外部使用var关键字来进行全局变量的声明和赋值

  • 通过type关键字来进行结构体struct和接口interface的声明

  • 通过func关键字来进行函数的声明

  • 关于init() 函数:

  • 它是一个初始化函数,如果某个包里面有init()的话,会首先调用init(),当然可以不包含该函数

  • 它不能被人为调用,而是在每个包完成初始化后自动执行,并且执行优先级比main高

  • 每个源文件都只能包含一个 init 函数。初始化总是以单线程执行,并且按照包的依赖关系顺序执行

Go程序的执行顺序如下:

  1. 每个源文件都只能包含一个 init 函数。初始化总是以单线程执行,并且按照包的依赖关系顺序执行
  2. 如果该包又导入了其它的包,则从第一步开始递归执行,但是每个包只会被导入一次
  3. 然后以相反的顺序在每个包中初始化常量和变量,如果该包含有 init 函数的话,则调用该函数
  4. 在完成这一切之后,main 也执行同样的过程,最后调用 main 函数开始执行程序

Go的package(包)导入用法

Go程序是通过package来组织的。我们上面的程序首行是package main,是将包含main函数的Go源文件包含在main包里面。这里有两点需要注意:

  • 只有package名称为main的包可以包含main函数
  • 一个可执行程序有且只有一个main

导入包的格式 :import "packageName"
    如果有多个包需要导入,也可以采用合并的写法

import {
	"fmt"
	"io"
}

导入包后,可以使用packageName.funcName来对包中的函数进行调用,如fmt.Println("hello,world")
    导入包之后如果未调用其中的函数或者类型将会报出编译错误imported and not used: xxx (坚决不冗余一行代码~~~)
    当使用第三方包时,不同的包名字可能会相似或者相同,这时候可以使用别名来进行区分和调用

import io "fmt"
func main(){
	io.Println("io is anorther name of fmt")
}

还有另一种省略调用包的方式,导入包时用一个.来表示,调用时可以省略包名,这种方式不能和别名同时使用。(不推荐使用这种省略调用,容易混淆)

import . "fmt"
func main(){
	Println("hello,world")
}

可见性规则

所谓“可见性”,是指程序定义的变量、常量、函数等是否可以被外部的包所调用。在Go中,使用大小写来决定该变量、常量、类型、接口、结构或函数是否可以被外部包所调用。根据约定:

  • 当标识符(包括变量、常量、类型、函数、结构字段等)以一个大写字母开头,那么使用该标识符的对象就可以被外部包的代码所使用(类似于面向对象语言中的public)
  • 当标识符(包括变量、常量、类型、函数、结构字段等)以一个小写字母开头,则使用该标识符的对象对外部包是不可见的,但它们在整个包的内部是可见并可用的(类似于面向对象语言中的private)

相关文章