加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

golang

发布时间:2020-12-16 19:11:16 所属栏目:大数据 来源:网络整理
导读:(一)go包 包的概念:golang语言中方便组织代码的单元 main包:一个golang工程中包含main包时,表示这是一个可执行的程序,main包中必须包含一个main函数(且只能在main包中),表示程序的入口。 init函数:每个包中可以包含多个init函数,如果程序引用的包

(一)go包

  • 包的概念:golang语言中方便组织代码的单元
  • main包:一个golang工程中包含main包时,表示这是一个可执行的程序,main包中必须包含一个main函数(且只能在main包中),表示程序的入口。
  • init函数:每个包中可以包含多个init函数,如果程序引用的包中包含init函数,则init函数会先于main函数执行,一般用于做初始化工作。
  • 重命名:导入的包可以重命名,只需在导入包路径前面加上命名即可,如

    import(
    xxx “net/http”
    )

    (二)go 命令

  • go build:编译工程生成可执行文件
  • go install:编译工程并把生成的可执行文件或库文件放到 GOPATH/bin GOPATH/pkg中
  • go run:编译生成并运行,并不会保存生成可执行文件
  • go clean:清除编译生成的文件
  • go env:显示环境信息
  • go get:从代码仓库中下载包
  • go fmt:格式化代码
  • go test:单元测试,测试文件以_test.go结尾
  • go doc:
    go doc
    godoc -http=:8080

(三)数据类型

  • 数组:存储某一类型的数据集合,数组长度固定,在存储中地址是连续的

    func main() {
    var aa [5]int64
    for i,_ := range aa {
    fmt.Printf(“%pn”,&aa[i])
    }
    }
    输出:
    0xc042039f80
    0xc042039f88
    0xc042039f90
    0xc042039f98
    0xc042039fa0

    指针数组: [5]*int
    数组指针:*[5]int
    遍历数组:for …range
    数组参数:数组很大时,可考虑使用数组指针传递,但存在数组值被修改的可能行
    作为参数传递:会复制一个副本,在函数内的操作不会影响原数组的值

  • 切片:可理解为动态数组,底层基于数组,包含3个字段的数据结构,一个是指向底层数组的指针,一个切片的长度(len),一个是切片的容量(cap)
    初始化:make

    格式:make([]type,len,cap),cap>=len
    例如:slice:=make([]int,5,10)
    slice2:=[]int{1,2,3,4,5}//len=cap

    nil切片:指向底层数组的指针为nil,即没有指向任何内存空间

    var slice []int

    空切片:指向底层数组的指针是个地址,地址对应的内存为0

    slice:=[]int{}

    append:切片追加,返回的切片可能是原来的切片也可能是新的切片,如果追加的内容


作为参数传递:会复制一个切片副本(三个字段,指针,len和cap),但是还是共用一个底层数据,在函数内的操作会影响原来切片的值
  • map:key-value对集合,无序

    初始化

    //使用make初始化
    person := make(map[string]interface{})
    person[“name”] = “dawing”
    person[“age”] = 20
    fmt.Println(person)
    //或者直接初始化
    person:=map[string]interface{}{“name”:”dawing”,”age”:20}
    //如果不知道初始值,则为一个空的map
    person:=map[string]interface{}{}

使用map

//获取map值(如果该键值不存在,则返回nil)
name:=person[“name”]
//判断某个键值是否存在
_,exists := person2[“name”] //exists为true表示存在,false表示不存在
//修改值(如果该键值不存在,则会创建)
person[“name”]=”dazuming”
//删除键值
delete(person,”name”)

作为参数传递:传递的不是副本,在函数内的操作会影响原来的值

(四)go类型

基础类型
包括:数值(整形、浮点型)、字符型、布尔型

引用类型
包括:切片、map、接口、函数类型、chan
实际操作中使用的是一个指向底层的指针,修改该指针指向的值,会改变原来的值
自定义类型(结构类型)
包括:结构体

type person struct { age int name string }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读