成功最有效的方法就是向有经验的人学习!

GO基本语法

介绍

  • Go 即 Golang,是 Google 公司 2009 年 11 月正式对外公开的一门编程语言。
  • 根据 Go 语言开发者自述,近 10 多年,从单机时代的 C 语言到现在互联网时代的 Java,都没有令人满意的开发语言,而 C++往往给人的感觉是,花了 100%的经历,却只有 60%的开发效率,产出比太低,Java 和 C#的哲学又来源于 C++。
  • 并且,随着硬件的不断升级,这些 语言不能充分的利用硬件及 CPU。
  • 因此,一门高效、简洁、开源的语言诞生了。
  • Go 语言不仅拥有静态编译语言的安全和高性能,而且又达到了动态语言开发速度和易 维护性。
  • 有人形容 Go 语言:Go = C + Python , 说明 Go 语言既有 C 语言程序的运行速度,又能达到 Python 语言的快速开发。
  • Go 语言是非常有潜力的语言,是因为它的应用场景是目前互联网非常热门的几个领域比如 WEB 开发、区块链开发、大型游戏服务端开发、分布式/云计算开发。
  • 国内比较知名的B 站就是用 Go 语言开发的,像 Goggle、阿里、京东、百度、腾讯、小米、360 的很多应用也是使用 Go 语言开发的。

命名规范

Go是一门区分大小写的语言。命名规则涉及变量、常量、全局函数、结构、接口、方法等的命名。 Go语言从语法层面进行了以下限定:任何需要对外暴露的名字必须以大写字母开头,不需要对外暴露的则应该以小写字母开头。当命名(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,如:Analysize,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包),这被称为导出(像面向对象语言中的 public);命名如果以小写字母开头,则对包外是不可见的,但是他们在整个包的内部是可见并且可用的(像面向对象语言中的 private )

  • 包名称

    • 保持package的名字和目录保持一致,尽量采取有意义的包名,简短,有意义,尽量和标准库不要冲突。包名应该为小写单词,不要使用下划线或者混合大小写。
      package domain
      package main
  • 文件命名

    • 尽量采取有意义的文件名,简短,有意义,应该为小写单词,使用下划线分隔各个单词。
      approve_service.go
  • 结构体命名

    • 采用驼峰命名法,首字母根据访问控制大写或者小写struct 申明和初始化格式采用多行,例如下面:
      type MainConfig struct {
      Port    string `json:"port"`
      Address string `json:"address"`
      }
  • 接口命名命名规则基本和上面的结构体类型单个函数的结构名以 “er” 作为后缀,例如 Reader , Writer 。

    • 命名以“er”结尾,如:WriterxxxHandlerHelperManager
    • 接口方法声明 = 方法名+方法签名如:methodA (param1, param2)outputTypeList
      type Reader interface {
      Read(p []byte) (n int, err error)
      }
  • 变量命名

    • 和结构体类似,变量名称一般遵循驼峰法,首字母根据访问控制原则大写或者小写
    • 但遇到特有名词时,需要遵循以下规则:如果变量为私有,且特有名词为首个单词,则使用小写
    • 如 appService若变量类型为 bool 类型,则名称应以 Has, Is, CanAllow 开头
      var isExist bool
      var hasConflict bool
      var canManage bool
      var allowGitHook bool

常量命名常量均需使用全部大写字母组成,并使用下划线分词

const APP_URL = " https://www.baidu.com "

如果是枚举类型的常量,需要先创建相应类型:

const (
    HTTP  Scheme = "http"
    HTTPS Scheme = "https"
)

golang中关键字

varconst :变量和常量的声明
package and import: 导入
func: 用于定义函数和方法
return :用于从函数返回
defer someCode :在函数退出之前执行
go : 用于并行
select 用于选择不同类型的通讯
interface 用于定义接口
struct用于定义抽象数据类型
breakcasecontinueforfallthroughelseifswitchgotodefault 流程控制
chan用于channel通讯
type用于声明自定义类型
map用于声明map类型数据
range用于读取slicemapchannel数据

注释

多行注释用/* */
单行注释 //
在goland中注释快捷键为:ctrl+/

GO main函数和init函数

package main

import "fmt"

func main() {
    fmt.Println("Hello world")
}

在同一个包中仅允许有一个main函数,main函数是整个程序的入口,而且必须存在。此时package后面也必须跟main

go语言中 init 函数用于包 (package) 的初始化,该函数是go语言的一个重要特性。
有下面的特征:

  • 1、init函数是用于程序执行前做包的初始化的函数,比如初始化包里的变量等
  • 2、每个包可以拥有多个init函数
  • 3、包的每个源文件也可以拥有多个init函数
  • 4、同一个包中多个init函数的执行顺序go语言没有明确的定义(说明)
  • 5、不同包的init函数按照包导入的依赖关系决定该初始化函数的执行顺序
  • 6、init函数不能被其他函数调用,而是在main函数执行之前,自动被调用

init函数和main函数的异同

相同点:

两个函数在定义时不能有任何的参数和返回值,且Go程序自动调用。
不同点:

  • init可以应用于任意包中,且可以重复定义多个。
  • main函数只能用于main包中,且只能定义一个。
  • 两个函数的执行顺序:

对同一个go文件的init()调用顺序是从上到下的。
对同一个package中不同文件是按文件名字符串比较“从小到大”顺序调用各文件中的init()函数。
对于不同的package,如果不相互依赖的话,按照main包中”先import的后调用”的顺序调用其包中的init()
如果package存在依赖,则先调用最早被依赖的package中的init(),最后调用main函数。
如果init函数中使用了println()或者print()你会发现在执行过程中这两个不会按照你想象中的顺序执行。
这两个函数官方只推荐在测试环境中使用,对于正式环境不要使用。

init()函数介绍
在Go语言程序执行时导入包语句会自动触发包内部init()函数的调用。
需要注意的是: init()函数没有参数也没有返回值。
init()函数在程序运行时自动被调用执行,不能在代码中主动调用它。

包初始化执行的顺序如下图所示:

file

变量

在go中定义变量的形式有三种,在go语言中,定义的变量必须要使用,否则会报错。

标准的语法:var 变量名 变量类型 = 变量值

第一种形式:

    var num int = 100

第二种形式:

    num2 := 100       // (最常用的)

第二种形式也是我们推荐在生产环境中使用的,简洁。

第三种形式:

    var num3 int      // (先定义类型然后赋值,全局变量初始化)
    num3 = 100
    fmt.Println(num3)

批量定义变量

批量定义多个变量时,变量的类型是相同的,定义后再对变量进行赋值。

    var num4, num5 int
    num4 = 100
    num5 = 100
    fmt.Println(num4, num5)

如果定义的这批量变中类型不尽相同时,可以使用var进行批量声明变量的类型

    var (
        name string
        age  int
    )
    name = "zhangsan"
    age = 24
    fmt.Println(name, age)

常量

在GO语言中,定义的常量无法改变,以实际项目中一般用于定义一些环境变量和配置等。这一点和python还不一样,需要注意。

    const num10 = 100
    //num10 = 200  // 常量一旦定义,不可修改
    num11 := 100 // 变量可以修改同一种类型数据
    num11 = 200
    //num11 = "zhangsan"  // 不能将一个int类型的数据,修改成其他类型
    fmt.Println(num10, num11)

批量定义常量

    const (
        // 在同一个代码块里,相同的变量名字不能同时指定为变量和常量
        //name string = "zhangsan"
        age1 = 26
    )
    fmt.Println(name, age)
赞(2) 打赏
未经允许不得转载:陈桂林博客 » GO基本语法
分享到

大佬们的评论 抢沙发

全新“一站式”建站,高质量、高售后的一条龙服务

微信 抖音 支付宝 百度 头条 快手全平台打通信息流

橙子建站.极速智能建站8折购买虚拟主机

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏

登录

找回密码

注册