Go备注

作者: loongod | 来源:发表于2021-10-19 13:55 被阅读0次

环境变量:

  • $GOROOT:
    表示Go的安装目录。也就是上面我们解压出来的文件夹里面的go文件夹。

  • $GOPATH:
    表示我们的工作空间。用来存放我们的工程目录的地方。


GOPATH目录:

一般来说GOPATH下面会有三个文件夹:binpkgsrc,没有的话自己创建。每个文件夹都有它的作用。

  • bin:编译后可的执行文件的存放路径
  • pkg:编译包时,生成的.a文件的存放路径
  • src:源码路径,一般我们的工程就创建在src下面。

注意
如果要用Go Mod(Go1.11及以上支持)进行包管理,则需要在 GOPATH 以外的目录创建工程。


Go程序主要组成:

  • 包声明
  • 导入包
  • 函数
  • 变量
  • 语句和表达式
  • 注释
package main // 包声明

import "fmt" // 导入包

func main() {
   /* This is my first sample program. */
   fmt.Println("Hello, World!")
}

让我们来看看上面的程序的各个部分:

  1. 程序包体的第一行定义了这个程序包的名称。这是一个必须声明为Go程序运行在什么包。main包是起始点来运行程序。每个包都有一个与之关联的路径和名称。

  2. 下一行import "fmt" 是告诉编译器去包含文件在包fmt的预处理命令。

  3. 下一行 func main()主要功能是为程序执行的开始。

  4. 下一行/*...*/会被编译器被忽略,它已被加入到程序添加注释。因此,这样的行称为程序中的注释。注释也使用//类似于JavaC++注释。

  5. 下一行fmt.Println(...)是提供另一种功能,使消息“Hello, World!”要显示在屏幕上。这里fmt包已导出,println方法用来在屏幕上显示消息。

  6. 注意println方法。在Go语言中,一个名字如果它用大写字母开头为导出。导出是指一个函数或变量/常访问到相应的包导入。


fmt 打印

    fmt.Println("helloworld")
    fmt.Println("a=", a)
    var x float32
    fmt.Println(x)
    fmt.Printf("x is of type %T\n", x) // x is of type float32

结构体

结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。

结构体定义

type struct_variable_type struct {
   member definition
   member definition
   ...
   member definition
}

一旦定义了结构体类型,它就能用于变量的声明,语法格式如下:

variable_name := structure_variable_type {value1, value2...valuen}
或
variable_name := structure_variable_type { key1: value1, key2: value2..., keyn: valuen}

例子:

package main

import "fmt"

type Books struct {
   title string
   author string
   subject string
   book_id int
}

func main() {
    // 创建一个新的结构体
    fmt.Println(Books{"Go 语言", "张一", "Go 语言教程", 6495407})
    // 也可以使用 key => value 格式
    fmt.Println(Books{title: "Go 语言", author: "张二", subject: "Go 语言教程", book_id: 6495407})
    // 忽略的字段为 0 或 空
   fmt.Println(Books{title: "Go 语言", author: "张三"})
}

访问结构体成员

如果要访问结构体成员,需要使用点号 . 操作符,格式为:

结构体.成员名"

结构体指针

你可以定义指向结构体的指针类似于其他指针变量,格式如下:

var struct_pointer *Books

以上定义的指针变量可以存储结构体变量的地址。查看结构体变量地址,可以将 & 符号放置于结构体变量前:

struct_pointer = &Book1

使用结构体指针访问结构体成员,使用 . 操作符:

struct_pointer.title

外接方法

语法

func (variable_name variable_data_type) function_name() [return_type]{
   /* function body*/
}
package main

import (
   "fmt"
   "math"
)

/* define a circle */
type Circle strut {
   x,y,radius float64
}

/* define a method for circle */
func(circle Circle) area() float64 {
   return math.Pi * circle.radius * circle.radius
}

func main(){
   circle := Circle(x:0, y:0, radius:5)
   fmt.Printf("Circle area: %f", circle.area())
}

切片

子切片

    numbers = []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
    // 子切片
    subSlice1 := numbers[1:4]
    fmt.Println("subSlice1 = ", subSlice1) // subSlice1 =  [1 2 3]
    subSlice2 := numbers[:4]
    fmt.Println("subSlice2 = ", subSlice2) // subSlice2 =  [0 1 2 3]
    subSlice3 := numbers[4:]
    fmt.Println("subSlice3 = ", subSlice3) // subSlice3 =  [4 5 6 7 8 9]

append() 和 copy() 函数

    // append()  copy() 函数
    var appends_array []int
    appends_array = append(appends_array, 0)
    printSlice(appends_array)
    appends_array = append(appends_array, 1, 2, 3)
    printSlice(appends_array)

    appends_copy := make([]int, len(appends_array), cap(appends_array))
    copy(appends_copy, appends_array)
    printSlice(appends_copy)

range

    //  range
    range_array := []int{0, 1, 2, 3, 4, 5, 6, 7}
    for i := range range_array {
        fmt.Println("range item:", i)
    }
// --- console
range item: 0
range item: 1
range item: 2
range item: 3
range item: 4
range item: 5
range item: 6
range item: 7

map 字典

    // map 映射  就是字典
    var coutryMap map[string]string     // 声明一个key是string,值是string的map
    coutryMap = make(map[string]string) // 创建一个map
    coutryMap["France"] = "Paris"
    coutryMap["China"] = "Beijing"
    for i := range coutryMap {
        fmt.Printf("coutry %s capital is %s \n", i, coutryMap[i])
    }

    captial, ok := coutryMap["Janpan"]
    if ok {
        fmt.Println("capital of Janpan is ", captial)
    } else {
        fmt.Println("capital of Janpan is not present")
    }

--- console
coutry France capital is Paris
coutry China capital is Beijing
capital of Janpan is not present

delete() 函数

delete()函数是用于从映射中删除一个项目。映射和相应的键将被删除。下面是一个例子:

   delete(countryMap,"France");

类型转换

类型转换是一种可变从一种数据类型转换成另一种数据类型。例如,如果要存储一个long值转成一个简单的整数,那么可以强制类型转换 longint。可以从一种类型使用转换运算符将原类型值转换为另一种类型值,如下:
type_name(expression)

package main

import "fmt"

func main() {
   var sum int = 17
   var count int = 5
   var mean float32
   
   maen = float32(sum)/float32(count)
   fmt.Printf("Value of mean : %f\n",mean)
}

--- console
Value of mean : 3.400000

错误处理

Go编程提供了一个非常简单的错误处理框架,下面的声明中内置错误接口类型:

type error interface {
   Error() string
}

例子

// 错误处理
func sqrt(value float64) (float64, error) {
    if value < 0 {
        return 0, errors.New("Math: negative number passed to Sqrt")
    }
    return math.Sqrt(value), nil
}
---
    // 错误处理
    result, error := sqrt(-1)
    if error == nil {
        fmt.Println("sqrt: ", result)
    } else {
        fmt.Println("sqrt: ", error)
    }
---console
sqrt:  Math: negative number passed to Sqrt

相关文章

  • Go备注

    环境变量: $GOROOT:表示Go的安装目录。也就是上面我们解压出来的文件夹里面的go文件夹。 $GOPATH:...

  • Golang Module 帮助文档翻译

    备注:本猿翻译水平有限,请各位看客见谅 翻译内容: go1.11 版本中 go help modules文档内容 ...

  • 2021-05-15 go基础备注

    1、数组是值类型 运行结果 2、切片是引用类型 切片的容量是底层数组的容量 切片是引用类型,都指向了底层的一个数组...

  • 备注

    突然想起写点东西记录下工作学习上的东西,据说这里支持markdown。。。顺便看看自己能坚持写多久。。

  • 备注

    王友余 莫斯利安,王友余 门前犹存训孙棍,堂前再无唤孙声。 门前犹存搖孙椅,堂前再无唤孙声。

  • 备注

    胆囊 GB 膀胱 BL 妊娠囊 GS 胆总管CBD 肾脏 LK/RK 卵黄囊 YS 胰腺P...

  • 备注

    大学已经过去两年了,没有获得任何奖项,只是在学生会浪费生命,每每要申请各种奖项时就因为成绩不达标而不成功,所以我希...

  • 备注

    1、鮔表 2、大耳兔成长史(大耳兔图鉴) 3、猪王崛起(野猪图鉴) 4、猪王之后 5、蚌女(图鉴) 6、虹桥 7、...

  • 备注

    -1- “宝丽公司...” 李遇呢喃着,默默的给刚才新加的微信联系人改了个备注,将他分组到了“不能惹!”的标签中。...

  • 备注

    http://z77z.oschina.io/2017/01/14/%E5%85%8D%E8%B4%B9%E4%B...

网友评论

      本文标题:Go备注

      本文链接:https://www.haomeiwen.com/subject/acqaoltx.html