当前位置: 首页 > news >正文

Go语言基础快速上手

1、Go语言关键字

在这里插入图片描述

2、Go数据类型

在这里插入图片描述

3、特殊的操作

3.1、iota关键字

Go中没有明确意思上的enum(枚举)定义,不过可以借用iota标识符实现一组自增常亮值来实现枚举类型。

const (a = iota // 0b        // 1c = 100  // 100d        // 100 (与上一行常量值表达式一致)e = iota // 4 (恢复iota自增,计数包括c、d)f        // 5
)

3.2、数组初始化

arr3 := [4]int{5, 3:10} // 可指定索引位置初始化fmt.Println(arr3) // [5 0 0 10]arr4 := [...]int{1,2,3} // 编译器按照初始化值数量确定数组长度fmt.Println(arr4) // [1 2 3]

3.3、字符串默认不是nil,而是""

3.4、切片

切片(slice)本身不是动态数组或动态指针。只是它内部采用数组存储数据,当数组长度达到数组容量时,会进行动态扩容

大白话就是切片功能和Java中的List集合类似,动态添加数据。不像数组(array)长度是固定的,需要事先知道数据长度。

// 方式一a := make([]int,5) // 初始化长度为5的slice,默认值为零for i := 0; i <5; i++ {a = append(a, i)}a = append(a, 6)fmt.Println(a) // [0 0 0 0 0 0 1 2 3 4 6] // 方式二    var a []intfor i := 0; i < 5; i++ {a = append(a, i)}fmt.Println(a) // [0 1 2 3 4]

3.5、map字典

// 定义 变量strMapvar strMap map[int]string// 进行初始化strMap = make(map[int]string)// 给map 赋值for i := 0; i < 5; i++ {strMap[i]  = "迈莫coding"}// 打印出map值for k, v := range strMap{fmt.Println(k, ":", v)}// 打印出map 长度fmt.Println(len(strMap))   

3.6、结构体

type user struct {name stringage  int
}// 结构体user Read方法
func (u *user) Read() string {return fmt.Sprintf("%s 已经 %d 岁了", u.name, u.age)
}func main() {// 初始化u := &user{name: "迈莫coding",age:  1,}fmt.Println(u.name, "已经", u.age, "岁了")// 调用结构体user的 Read方法fmt.Println(u.Read()) // 迈莫coding 已经 1 岁

4、接口

接口是一组方法的集合

4.1、接口实现

  1. 接口的方法与实现结构的类型方法格式一致
  2. 接口中所有方法均被实现
// 定义接口 包含公共方法
type user interface{talking()
}// 定义一个struct类
type memo struct{
}// 实现接口user中方法talking,非侵入式
func (m *memo) talking() {fmt.Println("迈莫coding欢迎您...")
}func main() {mm := memo{}mm.talking

4.2、空接口

空接口没有任何办法,任何类型都无需实现空接口,空接口类型可以保存任何值,也可以从空接口中取出原值,在需要使用的地方使用。本身为nil

type A interface{}{var a Afmt.Printf("%T", a) // nila = 3a= "hello"fmt.Printf("%T", a) // String
}

很多函数和方法都借助了空接口,比如打印函数

func Println

Func Println(a …interface{}) (n int, err error)

4.3、断言

如果我们反向想要知道这个接口变量里面实际存储的是哪个类型的对象,可以使用断言->对类型进行转换来判断类型

package main
import"fmt"type Animal interface {Eat()Talk()
}
type Dog struct {}
func (d *Dog) Eat(){fmt.Println("dog eating.....")
}
func (d *Dog) Talk(){fmt.Println("dog talking....")
}type Cat struct {}
func (c*Cat) Eat(){fmt.Println("cat eating.....")
}
func (c *Cat) Talk(){fmt.PrintIn("cat talking....")
}
func justify(a Animal){
//进行强制转换,如果转换失败则提示错误dog,ok := a.(*Dog)if !ok{fmt.Println("convert to dog failed")return}dog.Eat()
}func main() {
// 分别实例化一个Dog和Cat,并通过justify来进行判断d := &Dogvar a Animala=da.Eat()justify(a)c := &Cat{}a = cjustify(a)
}
http://www.lryc.cn/news/284300.html

相关文章:

  • Excel 根据日期按月汇总公式
  • 使用 crypto-js 进行 AES 加解密操作
  • Vue-30、Vue非单文件组件。
  • 7-6 实验2_1_判断两数的大小
  • POKT Network (POKT) :进军百亿美元市场规模的人工智能推理市场
  • 【STM32】STM32学习笔记-I2C通信外设(34)
  • 从数据角度分析年龄与NBA球员赛场表现的关系【数据分析项目分享】
  • 深入浅出Spring AOP
  • 火速收藏!2024 新年微信红包封面领取全攻略
  • 【RabbitMQ】RabbitMQ安装与使用详解以及Spring集成
  • 企业多云组网怎么办?
  • 背包问题(贪心) 二维01背包问题 Java
  • 2019年认证杯SPSSPRO杯数学建模D题(第二阶段)5G时代引发的道路规划革命全过程文档及程序
  • 可视化k8s页面(Kubepi)
  • 1434. 数池塘(四方向)-深度优先搜索-DFS
  • Mysql:重点且常用的操作和理论知识整理 ^_^
  • 小车辅助脚本编写
  • Modern C++ 一个例子学习条件变量
  • ora-12154无法解析指定的连接标识符
  • rust跟我学三:文件时间属性获得方法
  • 解决一个mysql的更新属性长度问题
  • [网络安全]DHCP 部署与安全
  • 自建ES集群
  • git rev-parse v406 ‘v4.0.4‘^{} master什么意思?
  • AI 编程的机会和未来:从 Copilot 到 Code Agent
  • git push --set-upstream origin master时超时失败的解决方案
  • beego的模块篇 - config自定义文件配置
  • YOLOv5-第Y2周:训练自己的数据集
  • 解决fxml图标无法显示
  • React Store及store持久化的使用