首页 > 其他分享 >【golang语言】

【golang语言】

时间:2024-03-18 11:04:39浏览次数:25  
标签:Map 函数 defer int 接口 golang string 语言

目录

在这里插入图片描述
数据类型
基础数据类型
bool
string
int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
byte
rune
float32 float64
complex64 complex128

类型转换
    go语言不允许隐式转换
    别名类型和原有类型也不能进行隐式转换

类型的预定义值
    math.MaxInt64
    math.MaxFloat64
    math.MaxUint32

指针类型 - 要比想象的简单的多
    不支持指针运算
    只有值类型和引用类型
    string是值类型,其默认为"",而不是nil

自定义类型
    type IntConvertionFn func(n int) int
    type MyPoint int

类型转换
    ex:   x.(int) ,x.(type)

空接口
    空接口口可以表示任何类型
    通过断言言来将空接口口转换为制定类型
        v, ok := p.(int) //ok=true 时为转换成功

运算符
算术运算符
+
-
*
/
%
++

go语言没有前置的++ 和 –

比较运算符
    ==
    !=
    >
    <
    >=
    <=
    相同维数且数量一致的数组才可以进行比较,每个元素都一致才为相等。

逻辑运算符
    &&
    ||
    !

位运算符
    &
    |
    ^
    <<
    >>
    &^ 按位置零  功能与  a&(^b) 功能一致

结构化程序
循环
循环的关键字只有for

if条件
    条件表达式必须为布尔值
    支持变量赋值


switch条件
    条件表达式不限制为整数或者常量
    单个 case 中,可以出现多个结果选项, 使用用逗号分隔
    与 Java 语言言等规则相反,Go 语言言不不需要用用break来明确退出一一个 case
    可以不不设定 switch 之后的条件表达式,在此种情况下,整个 switch 结构与多个 if...else... 的逻辑作用用等同https://mubu.com/doc/iy2N5v-Ilv

    使用 fallthrough 会强制执行后面的 case 语句,fallthrough 不会判断下一条 case 的表达式结果是否为 true。

数组和切片
数组
声明
var a [3]int //声明并初始化为默认零值
b := [3]int{1, 2, 3} //声明同时初始化
c := [2][2]int{{1, 2}, {3, 4}} //多维数组初始化

    遍历
    截取
        a[开始索引(包含), 结束索引(不不包含)]


切片
    声明
        var s0 []int
        s := []int{}
        s1 := []int{1, 2, 3}
        s2 := make([]int, 2, 4)

    len() 和 cap()
        cap()是指底层数组的大小,len()指可以使用的大小


数组 vs 切片
    容量量是否可伸缩
    是否可以进行行行比比较

Map映射
Map基础
声明
m := map[string]int{“one”: 1, “two”: 2, “three”: 3}
m1 := map[string]int{}
m2 := make(map[string]int, 10 /Initial Capacity/)

    访问
        在访问的 Key 不不存在时,仍会返回零值,不不能通过返回 nil 来判断元素是否存在

    遍历


Map高级
    Map和工厂模式
        Map 的 value 可以是一一个方方法
        与 Go 的 Duck Typing接口口方方式一一起,可以方方便便的实现单一一方方法对象的工工厂厂模式


    实现Set
        Go 的内置集合中没有 Set 实现, 可以 map[type]bool
            元素的唯一一性
            基本操作
                添加元素
                判断元素是否存在
                删除元素
                元素个数



    线程安全 - sync.Map
        适合读多写少,且 Key 相对稳定的环境

    线程安全 - Concurrent Map
        适用用于读写都很频繁的情况

字符串
区别于其他语言
string 是数据类型,不不是引用用或指针类型
string 是只读的 byte slice,len 函数可以它所包含的 byte 数
string 的 byte 数组可以存放任何数据

字符串函数
    strings
    strconv

函数 - 一等公平
其他语言的差异type MyPoint int
可以有多个返回值
所有的参数都是值传递 , slice,map,channel会有引用传递的错觉
函数可以作为变量的值
函数可以作为参数和返回值

可变参数
    func sum(ops ... int) 

defer 函数   延迟函数
    defer是return之后添加一个函数调用
    当defer被声明时,其参数就会被实时解析
        defer fmt.Println(i)

封装数据 - struct
创建
e := Employee{“0”, “Bob”, 20}
e1 := Employee{Name: “Mike”, Age: 30}
e2 := new(Employee) //注意这里里里返回的引用用/指针,相当于 e := &Employee{}

初始化
    e2.Id = “2" //与其他主要编程语言言的差异:通过实例例的指针访问成员不不需要使用用->

行为定义  结构体指针函数、结构体函数
    func (e Employee)  test()
        在实例例对应方方法被调用用时,实例例的成员会进行行行值复制

    func (e *Employee)  test()
        指针实例会避免内存拷贝

接口 - interface (交互协议)
Duck Type式接口

差异
    接口口为非非入入侵性,实现不不依赖于借口口定义
    所以接口口的定义可以包含在接口口使用用者包内

复合
    Go 不不支支持继承,但可以通过复合的方方式来实现继承

错误机制
差异 error
没有异常机制
error 类型实现了了 error 接口口
可以通过 errors.New 来快速创建错误实例例

panic
    panic 用用于不不可以恢复的错误
    panic 退出前会执行行行 defer 指定的内容
    os.Exit 退出时不不会调用用 defer 指定的函数
    os.Exit 退出时不不输出当前调用用栈信息

recover
    形成僵尸尸服务进程,导致 health check 失效。
    “Let it Crash!” 往往是我们恢复不不确定性错误的最好方方法。


基本复用用模块单元
以首首字母母大大写来表明可被包外代码访问

代码的 package 可以和所在的目目录不不一一致
同一一目目录里里里的 Go 代码的 package 要保持一一致
init方法
    在 main 被执行行行前,所有依赖的 package 的 init 方方法都会被执行行行
    不不同包的 init 函数按照包导入入的依赖关系决定执行行行顺序
    每个包可以有多个 init 函数
    包的每个源文文件也可以有多个 init 函数

标签:Map,函数,defer,int,接口,golang,string,语言
From: https://blog.csdn.net/qq_31532979/article/details/136458458

相关文章

  • 地理探测器R语言实现:geodetector
      本文介绍基于R语言中的geodetector包,依据多张栅格图像数据,实现地理探测器(Geodetector)操作的详细方法。  需要说明的是,在R语言中进行地理探测器操作,可以分别通过geodetector包、GD包等2个包实现。其中,geodetector包是地理探测器模型的原作者团队早先开发的,其需要保证输入的......
  • 架构知识-编程语言的演进
    架构学习-编程语言的演进前言什么是冯·诺伊曼结构中央处理器存储器输入输出设备汇编语言编程范式的进化1、过程式2、函数式3、面向对象参考架构学习-编程语言的演进前言这里开始来尝试了解下架构层面的知识。什么是冯·诺伊曼结构冯·诺伊曼结构(英语:V......
  • 内存函数(C语言)
    文章目录内存函数memcpymemmovememsetmemcmp内存函数使用内存函数需要包含头文件<string.h>memcpy将内存的数据拷贝到新空间void*memcpy(void*destination,constvoid*source,size_tnum);memcpy函数能将源地址后num个字节的数据拷贝到目标空间区别内存......
  • 如何使用 c 语言进行文件读取存储
    #include<stdio.h>//读取文件内容的函数voidreadFile(constchar*fileName){  FILE*file=fopen(fileName,"r");  if(file==NULL){    printf("无法打开文件\n");    return;  }  charline[100];  while(fgets(lin......
  • 【华为OD】C卷真题 100分:Wonderland游乐园 C语言代码实现[思路+代码]
      C++、java、python代码:【华为OD】C卷真题100分:Wonderland游乐园C/C++代码实现[思路+代码]-CSDN博客【华为OD】C卷真题100分:Wonderland游乐园Java代码实现[思路+代码]-CSDN博客【华为OD】C卷真题100分:Wonderland游乐园python代码实现[思路+代码]-CSDN博客  题......
  • c语言的基础
    一:数据类型1:整数类型包括整型,长整型。短整型。区别在于,采用不同位数的二进制编码表示,占用不同的存储空间,表示不同的数值范围,32位操作系统类型说明符数的范围字节数int(整型)-2147483648到21474836474unsignedint(无符号整型)0~65535,即0~(2-1)4......
  • 【C语言——浮点数在内存中的存储(补充篇)】
    一.概况     根据国际标准IEEE(电气和电子工程协会)754,任意一个二进制浮点数都可以表示为以下形式:V=(-1)^s*M*2^E1.(-1)^表示符号位,当s=0时,V为正数;当s=1,V为负数。2.M表示有效数字,M是大于等于1,小于2的。3.2^E表示指数。  二.存储过程IEEE754对有效数字M......
  • go语言请求http接口示例 并解析json
    本例请求了天气api接口对接流程注册一个账号,对接免费实况天气接口阅读接口文档http://tianqiapi.com/index/doc?version=day请求接口解析json开发流程创建一个json.go文件需要引入的包import( "encoding/json" "fmt" "io/ioutil" "net/http")定义Wea......
  • PTA浙大版《C语言程序设计(第4版)》2—6
    练习2-6计算物体自由下落的距离一个物体从100米的高空自由落下。编写程序,求它在前3秒内下落的垂直距离。设重力加速度为10米/。输入格式:本题目没有输入。输出格式:按照下列格式输出height=垂直距离值代码长度限制  16KB时间限制  400ms内存限制  64MB......
  • 实验一 c语言开发环境使用和数据类型、运算符、表达式
    task1`#include<stdio.h>include<stdlib.h>intmain(){printf("o\to\n");printf("<H>\t<H>\n");printf("II\tII\n");system("pause:");return0;}`task2`#include......