Go语言语法汇总



最近看了看GoLang,把Go语言的语法总结了一下,做个快速参考


数据类型


  • var varName typevar var1,var2… typevar varName type = Valuevar varName1,varName2 type = Value1,Value2var varName1,varName2=Value1,Value2varName1,varName2:=Value1,Value2,定义数据类型。

  • 声明了没有被使用的变量将在编译时报错。

  • 常量定义: const varName = Value , const varName type = Value

  • string字符串类型值不可改变,但是可以切片,字符串可以使用+进行连接

  • iota用来声明enum,表示自加1,初始为0

  • var arrayName [N]type用来声明数组,或者使用 arrayName := [N]type{ v1,v2…}来声明

  • 数组声明可以嵌套

  • slice用来表示切片,声明方式var sliceName []type或者sliceName := []type{v1,v2…}

  • slice保存的是引用而非实体

  • slice中有一些内置函数,len获取长度,cap获取最大容量,append追加数据,copy用来拷贝数据

  • map声明方式为var mapName map[keyType] valueType或者mapName := make(map[keyType]valueType)

  • map可通过 key : value 初始化

  • make用于内建类型的内存分配,new用于各种类型的内存分配,new返回指针而make返回非0的值

流程控制


  • if语句不需要括号,在if语句中可以声明变量,用分好分割if语句的条件判断

      if x:=function();x<10 {
          fmt.Printf("x < 10,%d\n",x);
      }else{
          fmt.Print("x >= 10 ,%d\n",x);
      }
    
  • goto语句类似C语言,但是跳转到必须在当前函数内定义的标签

  • for语句类似C语言,但是breakcontinue可以跟标号,跳出多重循环。

  • switch语句不用break,如果想强行执行下面的case可以使用fallthrough

函数


声明方式:

func funcName(input1 type1, input2 type2) (output1 type1, output2 type2)
  • func用来声明函数,函数名为funcName,后面跟输入,输出的数据类型。

  • 函数可以有多个返回值

  • 函数的值操作和指针操作类似C语言,内置类型中的string,slice,map直接使用的是类似的指针传递,不用使用取地址符,但是,如果需要改变slice的长度,则需要取地址穿指针。

  • defer语句用来表示在函数返回前执行的语句。

  • type typeName func(input1 inputType1 , input2 inputType2 [, ...]) (result1 resultType1 [, ...])用来声明一个函数类型,主要用于高阶函数中。

  • import用来导入包,package用来导出包,包操作使用.操作符

Struct类型


  • 声明方式:

      type Person struct {
      name string
      age int
      }
    
  • 匿名方式,匿名方式下A含有B的所有类型

      type Student struct {
      Person  // 默认Person的所有字段
      speciality string
      }
    
  • 如果匿名类型中有字段和本身有冲突,可以使用匿名类型+.访问

  • 类型的方法声明:

      func (r ReceiverType) funcName(parameters) (results)
    
  • 可以使用:type typeName typeLiteral来自定义类型,定义完以后可以使用方法来扩展类型的功能。

  • 需要改变struct内部的值时,需要将ReceiverType定义为*指针类型,但是调用的时候不需要,go语言自动帮你完成了。

  • 方法可以继承,可以重载

interface接口


  • type InterfaceName interface用来定义inerface

  • interface类型定义了一组方法,如果某个对象实现了某个接口的所有方法,则此对象就实现了此接口。

  • 空interface(interface{})不包含任何的method,正因为如此,所有的类型都实现了空interface

  • 一个函数把interface{}作为参数,那么他可以接受任意类型的值作为参数,如果一个函数返回interface{},那么也就可以返回任意类型的值

  • value, ok = element.(T),这里value就是变量的值,ok是一个bool类型,elementinterface变量,T是断言的类型,如果oktrue则表示,element确实是T类型的。

  • interface可以嵌套

并发


  • 使用go关键字+函数名实现并发

  • 使用channel实现线程间通讯,channel通过make构造,使用<-来发送和接受数据。

  • chanchannel的关键字,后面跟数据类型ch <- v发送数据,v:=<-ch接收数据,chchan类型。

      package main
      import "fmt"
      func sum(a []int, c chan int) {
          total := 0
          for _, v := range a {
              total += v
          }
          c <- total  // send total to c
      }
    
      func main() {
          a := []int{7, 2, 8, -9, 4, 0}
          c := make(chan int)
          go sum(a[:len(a)/2], c)
          go sum(a[len(a)/2:], c)
          x, y := <-c, <-c  // receive from c
          fmt.Println(x, y, x + y)
      }
    
  • channel默认是阻塞形式的,可以进行线程同步。

  • ch := make(chan type, value)构造channel时可通过设置不同的value来设定channl的buffer长度。

  • close用来关闭channel

  • 使用select+case来选择多个channel

  • 使用select + case <- time.After(5 * time.Second)来设定超时

  • Goexit 退出当前执行的goroutine,但是defer函数还会继续调用

  • Gosched 让出当前goroutine的执行权限,调度器安排其他等待的任务运行,并在下次某个时候从该位置恢复执行。

  • NumCPU 返回 CPU 核数量

  • NumGoroutine 返回正在执⾏行和排队的任务总数

  • GOMAXPROCS 用来设置可以运行的CPU核数


06-22
### 得物技术栈及开发者文档分析 得物作为一家专注于潮流商品的电商平台,其技术栈和开发者文档主要围绕电商平台的核心需求展开。以下是对得物技术栈及相关开发资源的详细解析: #### 1. 技术栈概述 得物的技术栈通常会涵盖前端、后端、移动应用开发以及大数据处理等多个领域。以下是可能涉及的主要技术栈[^3]: - **前端开发**: 前端技术栈可能包括现代框架如 React 或 Vue.js,用于构建高效、响应式的用户界面。此外,还会使用 Webpack 等工具进行模块化打包和优化。 - **后端开发**: 后端技术栈可能采用 Java Spring Boot 或 Node.js,以支持高并发和分布式架构。数据库方面,MySQL 和 Redis 是常见的选择,分别用于关系型数据存储和缓存管理。 - **移动应用开发**: 得物的移动应用开发可能基于原生技术(如 Swift/Kotlin)或跨平台框架(如 Flutter)。这有助于确保移动端应用的性能和用户体验一致性。 - **大数据云计算**: 在大数据处理方面,得物可能会使用 Hadoop 或 Spark 进行数据挖掘和分析。同时,依托云服务提供商(如阿里云或腾讯云),实现弹性扩展和资源优化。 #### 2. 开发者文档分析 类似于引用中提到的 Adobe 开发者文档模板[^2],得物也可能提供一套完整的开发者文档体系,以支持内部团队协作和外部开发者接入。以下是开发者文档可能包含的内容: - **API 文档**: 提供 RESTful API 或 GraphQL 的详细说明,帮助开发者快速集成得物的功能模块,例如商品搜索、订单管理等。 - **SDK 集成指南**: 针对不同平台(如 iOS、Android 或 Web)提供 SDK 下载和集成教程,简化第三方应用的开发流程。 - **技术博客**: 分享得物在技术实践中的经验成果,例如如何优化图片加载速度、提升应用性能等。 - **开源项目**: 得物可能将部分技术成果开源,供社区开发者学习和贡献。这不仅有助于提升品牌形象,还能吸引更多优秀人才加入。 #### 3. 示例代码 以下是一个简单的示例代码,展示如何通过 RESTful API 调用得物的商品搜索功能(假设接口已存在): ```python import requests def search_items(keyword, page=1): url = "https://api.dewu.com/v1/items/search" headers = { "Authorization": "Bearer YOUR_ACCESS_TOKEN", "Content-Type": "application/json" } params = { "keyword": keyword, "page": page, "size": 10 } response = requests.get(url, headers=headers, params=params) if response.status_code == 200: return response.json() else: return {"error": "Failed to fetch data"} # 调用示例 result = search_items("Air Jordan", page=1) print(result) ``` 此代码片段展示了如何通过 Python 请求得物的 API,并获取指定关键词的商品列表。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值