Go学习笔记

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))
}

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

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值