重学go语言

数据类型

说明最开始我们只需要关注基础类型即可

基础类型:数字,字符串,布尔类型

数字类型包括

变量/常量声明

//比较完整的方式
var a string = "hello go"
var a bool = true
var a int = 12
const PI int = 3.14
//我们尽量简短,所以我们更加推荐下边的写法
a:=32
var a = "hello go"
var a = true
var a = 12
const PI = 3.14

运算符

算术运算 :

运算符 说明
+ - * / 加减乘除
% 取余
++/– 自增

关系运算:

运算符 说明
> < >= <= 大小比较
!= 不等于
== 值的比较

逻辑运算

运算符 说明
&&
||

位运算:

运算符 说明
& 加减乘除
| 取余
^ 自增
>> 右移
<< 左移

条件循环

go语言的判断语句是不加括号的

if

if num := 9; num < 0 {
    
    
        fmt.Println(num, "is negative")
    } else if num < 10 {
    
    
        fmt.Println(num, "has 1 digit")
    } else {
    
    
        fmt.Println(num, "has multiple digits")
    }

switch

go语言的switch是匹配之后自动结束的

var grade string = "B"
   var marks int = 90

   switch marks {
    
    
      case 90: grade = "A"
      case 80: grade = "B"
      case 50,60,70 : grade = "C"
      default: grade = "D"  
   }

循环

go语言只有for循环,没有while,do while之类的

for init; condition; post { }


for condition { }


for { }

循环控制关键字

break  
continue
goto 

容器

go的容器包含数组,切片,map

var balance = [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}

var slice1 []type = make([]type, len)

也可以简写为

slice1 := make([]type, len)


countryCapitalMap := map[string]string{"France": "Paris", "Italy": "Rome", "Japan": "Tokyo", "India": "New delhi"}

函数定义

func function_name( [parameter list] ) [return_types] {
   函数体
}

面向对象

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


func main() {

    // 创建一个新的结构体
    fmt.Println(Books{"Go 语言", "www.runoob.com", "Go 语言教程", 6495407})

    // 也可以使用 key => value 格式
    fmt.Println(Books{title: "Go 语言", author: "www.runoob.com", subject: "Go 语言教程", book_id: 6495407})

    // 忽略的字段为 0 或 空
   fmt.Println(Books{title: "Go 语言", author: "www.runoob.com"})
}

接口

type Animal interface {
    call()
}

type Frog struct {
}

func (frog Frog) call() {
    fmt.Println("gua gua gua")
}

type Cuckoo struct {
}

func (cuckoo Cuckoo) call() {
    fmt.Println("布谷 布谷")
}

func main() {
    var animal Animal

    phone = new(Frog)
    phone.call()

    phone = new(Cuckoo)
    phone.call()
}

错误处理

Go 语言通过内置的错误接口提供了非常简单的错误处理机制。

error类型是一个接口类型,这是它的定义:

type error interface {
    Error() string
}
func Sqrt(f float64) (float64, error) {
    if f < 0 {
        return 0, errors.New("math: square root of negative number")
    }
    // 实现
}
result, err:= Sqrt(-1)

if err != nil {
   fmt.Println(err)
}

模块化

  • 1.5 版本之前的 gogo get 命令会将包会下载到 GOPATH 路径中
  • 1.5 及以上版本,添加了 依赖的组织名
  • vgo 被提议作为 Go 模块支持的原型
  • Go 1.11 (beta) 版本中,vgo 被合并到主干代码并改进为 go mod ( 实验性质 )

在项目中使用

在一个空的文件夹中,使用go mod init初始化生成 go.mod 文件。

go.mod 文件一旦创建后,它的内容将会被 go toolchain 全面掌控,go toolchain 会在各类命令执行时,比如go getgo buildgo mod等修改和维护 go.mod 文件。

go.mod 提供了 module、require、replace 和 exclude 四个命令:

  • module 语句指定包的名字(路径);
  • require 语句指定的依赖项模块;
  • replace 语句可以替换依赖项模块;
  • exclude 语句可以忽略依赖项模块。

新建main文件

package main

import (
    "net/http"
    "github.com/labstack/echo"
)

func main() {
    e := echo.New()
    e.GET("/", func(c echo.Context) error {
        return c.String(http.StatusOK, "Hello, World!")
    })
    e.Logger.Fatal(e.Start(":1323"))
}

改造项目

├─ main.go
│
└─ api
      └─ apis.go
package main

import (
    api "hello/api" // 这里使用的是绝对对路径
    "github.com/labstack/echo"
)

func main() {
    e := echo.New()
    e.GET("/", api.HelloWorld)
    e.Logger.Fatal(e.Start(":1323"))
}
package api

import (
    "net/http"

    "github.com/labstack/echo"
)

func HelloWorld(c echo.Context) error {
    return c.JSON(http.StatusOK, "hello world")
}

猜你喜欢

转载自blog.csdn.net/lin819747263/article/details/128769279
今日推荐