Go学习笔记

    技术2026-01-16  8

    go是一门编译型语言,运行效率高,开发高效,部署简单。语言层面支持并发,易于运用多核处理器实现并发。

    go的使用场景: go常被用于:服务器编程如:处理日志,数据打包,虚拟机处理,文件系统等;还用于分布式系统,数据库代理器,中间件;网络编程,web应用,API应用等;云平台应用如:docker,k8s

     

    go常用命令: go version  //查看go版本 go get:动态获取远程包(需 提前安装 git或hg) go run:编译并运行go源码文件 go build:用于编译(源码文件,代码包,依赖包);检查是否有编译错误 go fmt:格式化源码(部分IDE在保存时自动调用) go install:编译包文件并编译整个程序 go test:运行测试文件 go doc:查看文档(CHM手册) go mod: 依赖管理

    操作案例: go build .   //构建当前项目 go build test.go  //会生成一个test.exe(win系统下) go run test.go go get github/xxxxxx

    Go常用关键字: 通过 import 关键字来导入其它非 main 包 通过 const 关键字来进行常量的定义 通过在函数体外部使用 var 关键字来进行全局变量的声明与赋值 通过 type 关键字来进行结构(struct)或接口(interface)的声明 通过 func 关键字来进行函数的声明

    go的注释: // :单行注释 /* */:多行注释

    GO的结构实例: package main import "fmt" const VERSION1 ="V1.1" const VERSION2 string ="V1.1" var myName1="zhang san" var myName2 string ="zhang san" type diyType int  //一般类型声明,这里diyType可看做int的别名,但也不能与int类型数值进行混合运算 type Mystruct struct { //定义结构体

    } type Iperson interface { //声明一个接口

    } func Myfunc(){//声明一个函数     fmt.Println("myfunc") } func main(){     Myfunc();     fmt.Println("hello go!") }

    GO语言Package: package是基本的分发单位;每个go文件开头都要有package的声明;如果要生成go的可执行文件,必须有main的package,且该包下必须有main函数;同一个路径下只能存在一个package,一个package可拆分成多个源文件

    GO的import:导入源码所依赖的package;不得导入没有使用的包,会报错。 import原理:一个源代码包含多个包时会按照顺序导入; 如果当前文件导入了a包,而a包中又导入了b包,那么先初始化b包中的变量,常量和init函数,然后初始化a包中的常量,变量,init函数,最后初始化当前包中的常量,变量,init函数 如果一个包被导入多次则只会被导入一次

    格式如下: import (     "fmt"     "time" )

    import的其他用法: import aa "fmt" //给fmt包定义别名,以后使用的时候用别名访问里面的方法:例如:aa.Println()

    import . "fmt" //用点后这个包里面的所有方法使用的时候不用加前缀。例如fmt.Println()简写为Println()

    import _ "xxx" //用这个标识的包,只会初始化该包的常量,变量,以及init方法。不能通过包名调取其他方法

     

    GO的数据类型:

    //var i byte =8 //unsafe.Sizeof输出结果1,表示1个字节,共8位 //var i uint8=8 //unsafe.Sizeof输出结果1,表示1个字节,共8位 //var i int32=1 //unsafe.Sizeof输出结果4,表示4个字节,共32位 //var i rune=8 //unsafe.Sizeof输出结果4,表示4个字节,共32位 //var i int=1; //这个类型会根据操作系统位数而定,64位系统就是8字节,32位系统就是4个字节 //var i uint=1; //这个类型会根据操作系统位数而定,64位系统就是8字节,32位系统就是4个字节 //var i float32 =1.2 //unsafe.Sizeof输出结果4,表示4个字节,共32位 //var i float64 =1.2 //unsafe.Sizeof输出结果8,表示8个字节,共64位 //var i complex64 =1.2 //unsafe.Sizeof输出结果8,表示8个字节,共64位 var i complex128 =1.2 //unsafe.Sizeof输出结果16,表示16个字节,共128位 //fmt.Println(unsafe.Sizeof(i)) //var b bool=false //布尔类型的值只能是true或false,不能是其他值 //fmt.Println(b)

    GO的派生类型: 指针类型,数组类型,结构化类型,Channel类型,函数类型,切片类型,接口类型,Map类型

    GO类型默认值与别名: 布尔类型的默认值是false,string类型的默认值是空字符串,值类型默认值是0(包括:整形,浮点型,复数类型,其他类型)

    别名实例:type aaa int   //声明aaa为int的别名,注意两种类型不能混合计算

     

    GO语言的变量,常量

    分组声明: var( i int name string )

     

    go变量实例:

    package main

    import "fmt" import "reflect"

    var a int var b int =345 var(     c string="kkk"     d int ) var f,g int=1,2

    func main() {     l,m:=11,22     var h,i="hhh",55     var(         e int=5     )     g,k := 55,"kk" //不能放在函数体外,在函数外部var不能省     n,_,o:=111,222,"aaa"     /*相关变量打印代码忽略*/ }

    go变量类型判断fmt.Println(reflect.TypeOf(b))

     

    GO类型转换

    go语言中的类型转换必须是显示的,并且类型转换两种类型必须相互兼容才行。

    package main

    import "fmt" import "reflect"

    func main() {     var a int=3     b:=float32(a)     fmt.Println(b)     fmt.Println(reflect.TypeOf(b))          var c float32=3.01     d:=int32(c)     fmt.Println(d)     fmt.Println(reflect.TypeOf(d)) }

    首字母大写的变量是公共变量,首字母小写的是私有变量

     

     

     

     

     

     

     

     

    Processed: 0.036, SQL: 9