Golang基础

  • Post author:
  • Post category:golang




下载

官方下载地址:https://studygolang.com

// 查看是否安装成功
go version

// 查看环境变量
go env



配置国内镜像

// 设置国内镜像(适用于1.13及以上版本)
go env -w GOPROXY=https://goproxy.cn,direct

// 设置go module为on
go env -w GO111MODULE=on

// 安装goimports工具
go get golang.org/x/tools/cmd/goimports

说明:

  • goimports是在go文件保存时,会自动格式化代码,自动导入/删除相关的包



依赖管理

依赖管理的三个阶段:GOPATH、GOVENDOR、go mod



GOPATH

  • 默认在~/go(unix,linux),%USERPROFILE%\go(windows)

  • 相当于一个全局的库,所有的项目代码、第三方库都放在下面



GOVENDOR

  • 每个项目都有自己的vendor目录,用来存放第三方库
  • 一般使用第三方的依赖管理工具来管理项目的vendor目录,例如:dep、golide…



go mod

用来取代GOPATH和GOVENDOR,在项目中使用go.mod文件来管理引入的包、版本等,引入的包存储在%GOPATH%/pkg/mod下面。

  • 由go命令统一管理,用户不必关心目录结构
  • 初始化:go mod init
  • 增加依赖:go get…
  • 更新依赖:go get[@version],go mod tidy
  • 将历史项目(GOPATH…)迁移到go mod:go mod init, go build ./…


说明:

go语言不允许在同一个包下,存在多个main函数,既,一个包只允许存在一个main函数



程序结构

  1. 必须在源文件指明这个文件属于哪个包;package main 表示一个可独立执行的程序,每个Go程序都包含一个名为main的包
  2. 当标识符以一个大写字母开头时,表示其他包可用(public),以小写开头时,表示只能本包使用(protected)



基本变量类型

  • bool,string 布尔类型和字符串

  • (u)int,(u)int8,(u)int16,(u)int32,(u)int64,uintptr 整数(ptr表示指针)

  • byte,rune 字节类型和字符类型(go特有的)

  • float32,float64,complex64,complex128 浮点型和复数

可以使用括号+类型((int) xx),进行强制类型转换。



变量

  1. 声明格式: var name [type]
  2. 没有初始化时,默认零值:数值类型(0)、布尔类型(false)、字符串(“”)、其他(nil)
  3. 如果没有指定类型时,会根据值自动判断类型
  4. 省略var(只能在函数体中出现): v_name := value
  5. 全局变量允许只声明不使用,局部变量不允许,声明之后,必须使用



使用var关键字

// 示例
var a, b c bool
var s1, s2 string = "hello", "world"
// 可以放在函数内(局部变量),或者放在包内(全局变量)



使用:=符合定义

// 示例,相当于省略了var
s := "hello"

注:使用:=定义变量时,不可以使用在全局变量,只能使用在函数内



常量(枚举)

  • 声明格式: const name [type] = value
  • 特殊常量iota: 在const关键字出现时将被重置为0,const中每新增一行常量声明,都将使iota计数一次(可以理解为const语句块中的行索引)



条件和循环

  1. if…else if…else… 条件语句,需要注意的是:条件不需要加上括号()
  2. for循环(注意不需要括号):for init; condition; post {}
  3. for each range循环:对字符串、数组、切片等进行迭代输出元素



函数

  1. 定义:func function_name(xxx)[return_type]{}
  2. 可返回多个值:func func_name(xxx) (xx,xx) { return xx, xx}
  3. 函数作为参数:func func_name(op func(xxx) xx){}
  4. 没有默认参数、可选参数

示例:

func apply(op func(int, int) int, a, b int) int {
   
  fmt.Printf("calling %s with %d, %d\n", runtime.FuncForPC(reflect.ValueOf(op).Point()).Name(), a, b)
  return op(a, b)
}



指针

  • 指标变量声明:var name *type
  • 赋值(&):name = &a
  • 获取指针所指向的内容:*name
  • 指向指针的指针变量(多了一个*):

    • 声明:var name **type
    • 访问指向的内容:**name

示例:

var a int = 2
var ptr *int = &a



版权声明:本文为Mingway_X原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。