Go初识与问题

变量&常量

变量

  • 命名

     由字母、数字、下划线组成,首个字符不能是数字关键字、保留字不能作为变量名变量名字区分大小写驼峰命名
    
  • 声明

     1. var : 全局变量var 变量名称 类型var 变量名称1,变量名称2 类型 (同一种类型)var (变量名称1 类型1变量名称2 类型2)2. 短变量声明( := ) : 局部变量变量名称 := 类型变量名称1, 变量名称2 := 类型1, 类型2变量声明后没有初始化,值为空变量需要声明后才能使用,同一作用域不支持重复声明
    

常量

  • 声明

     const 常量名称 = 值const (常量名称1 = 值1常量名称2 = 值2常量名称3 (省略赋值则为上一个 : 值二))常量声明时必须赋值且不可改变
    

数据类型

  • 整型

     默认为0int8(-128 - 127), int16, int32, int64uint8(0 - 255), uint16, uint32, uint64int类型转换:int8(), int16(), int32(), int64()数字字面量语法:fmt.Printf("%d:10进制输出 %b:2进制输出 %o:8进制输出 %x:16进制输出")
    
  • 浮点型

     默认为0float32, float64fmt.Printf("%.nf:保留n位小数")精度丢失:第三方包(decimal)解决float 转 int:int()int 转 float:float32()
    
  • 布尔型

     true, false(默认)不允许将整形强制转换为布尔型布尔型无法参与数值运算,也无法与其他类型进行转换
    
  • 字符串

     默认为空: ""转义字符: \r:回车符(返回行首) \n:换行符 \t:制表符 \':单引号 \":双引号 \\: 斜杠多行字符串: ``常用操作:len(str): 求长度+ 或 fmt.Sprint: 拼接字符串strings.Split: 切割strings.contains: 判断是否包含strings.HasPrefix, strings.HasSuffix: 前缀、后缀判断strings.Index(), strings.LastIndex(): 字串出现的位置strings.Join()其他类型 转 字符串:fmt.Sprint()strconv
    
  • byte&rune

     byte: uint8,代表ASCII码的一个字符rune: int32,代表一个UTF-8字符汉字占用3个字节,字母占用一个字节遍历字符串:for i := 0; i < len(str); i++ { //bytefmt.Println(str[i])}for _, i := range str { //runefmt.Println(i)}
    
  • 数组

     数组的长度必须是常量,并且长度是数组的一部分,不能改变var 数组名 [n]类型var 数组名 [...]类型{值, 值, ...}var 数组名 [...]类型{索引值: 值, 索引值: 值, ...}遍历:for i, v := range arr {// i 索引值, v 值}值类型:改变变量副本值的时候,不会改变变量本身的值引用类型:改变变量副本值的时候,会改变变量本身的值基本数据类型 和 数组都是值类型
    
  • 切片

     切片的长度可以改变var 切片名 []类型[l:r]: 获取切片值扩容: append()复制切片(不影响原切片):copy()删除: append([:n], [n:]...) 删除索引为n修改: 转换为byte或rune, 再进行修改排序: sort
    
  • map

     无序 key: valuemake(map[类型]类型)map[类型]类型{key: value}遍历:for k, v := range map {// k键, v 值}获取: v, ok := map[key] //ok(true || false)删除: delete(map, key)排序: 把key存入切片,将切片排序
    

运算符

  • 算术运算符

     + - * / %(被除数 - (被除数/除数) * 除数)++、-- 是单独的语句,并不是运算符
    
  • 关系运算符

     == != > < >= <=
    
  • 逻辑运算符

     && || !
    
  • 赋值运算符

     = += -= *= /= %=
    

流程控制

  • if else

     if 表达式 {分支1} else if 表达式 {分支2} else {分支3}
    
  • for

     for 初始语句(可省略); 条件表达式; 结束语句(可省略) {循环体语句}
    
  • switch

     switch expression {case condition: 语句 break(可以不写)case condition1, condition2: 语句 breakdefauit: 语句 }
    
  • break&continue

     label1:for xxx {for yyy {break label1 //跳出label1continue label1 //结束本次label1}}
    
  • goto

     	goto label1xxxlabel1:yyygoto跳转到label1
    

函数

  • 定义

     func 函数名 (参数 类型, 可变参数 ...类型) (返回值 类型){函数体}返回值命名: 函数定义时可以给返回值命名,并在函数体中直接使用这些变量,最后通过return返回
    
  • 类型与匿名函数

     type 函数类型名 func(参数 类型) 返回值匿名自执行函数: func(参数) 返回值{} (参数)
    
  • 闭包

     全局变量特点: 常驻内存,污染全局局部变量特点: 不常驻内存,不污染全局闭包: 常驻内存,不污染全局func 函数名() func() 类型 {return func() (返回值 类型) {return}} 
    
  • defer

     defer 会将其后面跟随的语句进行延迟处理,return之前逆序执行(最后的语句,最先执行)return x: 1. 返回值 = x 2. 运行defer3. RET指令
    
  • panic & recover

     panic(): 可以在任何地方抛出异常recover(): 只能在defer调用的函数中接收异常 panic("err")defer func() {err :=  recover()}
    

指针

指针是一个变量,存储另一个变量的内存地址
定义: &变量 	取值: *变量

结构体

type 类型名 struct {字段名	字段类型
}结构体函数:type Fxm intfunc (Fxm) 函数名() {}匿名字段: 声明时没有字段名只有类型(同种类型的匿名字段只有一个)结构体的类型是指针、切片、map时,如要使用,需要先makejson转换:jsonByte := json.Marshal()	(私有变量不能被json包访问) (生成字节切片)jsonStr := string(jsonByte)结构体标签:type Fxm struct {Id	int	`json:"id"`}

接口

type 接口名 interface {方法名(参数) 返回值
}空接口: 接口中不定义任何方法,可以表示任意数据类型
map的值、切片可以是空接口类型类型断言: (.(type)只能结合switch使用)switch v := interface1.(type) {case string: xxx}值接收者: 实例化后的结构体值类型和结构体指针类型都可以赋值给接口变量
指针接收者: 实例化后的结构体指针类型可以赋值给接口变量,结构体值类型不可

并发&并行

  • 协程

     goroutine: go 函数名等待goroutine执行完毕:var wg = sync.WaitGroupwg.Add(1) //协程计数器加1wg.Done(1) //协程计数器加-1wg.Wait() //等待协程执行完毕获取当前计算机cpu个数runtime.NumCPU()设置使用cpu个数runtime.GoMAXPROCS(cpu个数)
    
  • 管道Channel

     管道是goroutine之间的通讯方式,先入先出Golang 的并发模型是CSP,提倡通过通信共享内存,而不是通过内存实现通信
    
  • channel

     channel是一种引用类型声明: var 变量名 chan 类型管道声明后需要make初始化之后才能使用make(chan 类型, 容量)管道的发送和接收使用 <-发送: channel1 <- 值接收: 值 := <- channel1关闭: close(channel1)遍历管道: for(管道没有key)
    
  • 单向管道

     默认是双向只写: make(chan<- 类型, 容量)只读: make(<-chan 类型, 容量)
    
  • 多路复用 select

     同时从多个管道获取数据,不需要关闭管道select{case 值 :=  <- channel1: xxxcase channel2 <- 值: xxxdefault: xxx}
    
  • 互斥锁

     sync.Mutex:	Lock()	Unlock()
    
  • 读写互斥锁

     可以让多个读操作并发,但写操作是互斥的sync.RWMutex写操作:	Lock()	Unlock()读操作:	RLock()	RUnlock()
    

反射

需求: 一个函数有能力统一处理各种值类型,而这些类型可能无法共享同一个接口,可能这个类型不存在
反射: 在程序运行期间对程序本身进行访问和修改的能力
支持反射的语言可以在程序编译期将变量的反射信息整合到可执行文件,并给程序提供接口访问反射信息
  • reflect

     Go中的变量分为两部分: 类型信息、值信息reflect.TypeOf() //Name、Kindreflect.ValueOf()修改: Elem().Setxxx()
    

文件

  • 读取文件:

     file, err := os.Open(文件名) //只读defer file.Close()file.Read()file, err := os.Open(文件名) //只读defer file.Close()reader := bufio.NewReader(file)line, err := reader.ReadString('\n')ioutil.ReadFile(文件名)
    
  • 写入文件:

     file, err := os.OpenFile(文件名, os.O_CREATE|os.O_RDWR, 0666)defer file.Close()file.Write([]byte(str))file.WriteString(str)file, err := os.OpenFile(文件名, os.O_CREATE|os.O_RDWR, 0666)defer file.Close()writer := bufio.NewWriter(file)writer.WriteString(str)writer.Flush()ioutil.WriteFile(文件名, []byte(str), 0666)
    
  • 文件操作:

     文件重命名: os.Rename(原文件名,文件名)复制文件: file, err := ioutil.ReadFile(原文件)ioutil.WriteFile(文件名, file, 0644)创建目录:os.Mkdir(目录名, 0666)删除目录和文件:os.Remove(文件名)os.RemoveAll(目录名)
    

其他

  • 查看环境变量

     go env
    
  • 设置GOPROXY代理

     go env -w GOPROXY=https://goproxy.io,direct
    
  • 更新go.sum

     go mod tidy
    
  • 下载第三方包

    1. go get 包名(全局,不建议)
    2. go mod download(全局,建议)
    3. go mod vendor(下载到项目中)
    
  • 定时器

     time.NewTicker()time.Slwwp()
    
  • 初始化项目

     go mod init 项目名()
    
  • 大小写:

     首字母小写:私有变量、私有方法首字母大写:公有变量、公有方法
    
  • 导入

     import 别名 包名import _ 包名:匿名引入
    
  • init

     最先执行最后导入包的init
    
  • 第三方包网站

     https://pkg.go.dev/
    

小问题

  • main.go 导包找不到

      如下图片添加:https://goproxy.io
    

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/439957.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1.3)深度学习笔记------浅层神经网络

目录 1&#xff09;Neural Network Overview 2&#xff09;Neural Network Representation 3&#xff09;Computing a Neural Network’s Output&#xff08;重点&#xff09; 4&#xff09;Vectorizing across multiple examples 5&#xff09;Activation functions 6&a…

SpringMVC 的执行流程

SpringMVC 的执行流程 1&#xff09;用户向服务器发送请求&#xff0c;请求被 Spring 前端控制 Servelt DispatcherServlet捕获&#xff1b; 2&#xff09;DispatcherServlet 对请求 URL 进行解析&#xff0c;得到请求资源标识符&#xff08;URI&#xff09;。然后根据该 URI&…

kafka初识

kafka中文文档 本文环境&#xff1a;ubuntu:18.04 kafka安装、配置与基本使用(单节点) 安装kafka 下载 0.10.0.1版本并解压缩 > tar -xzf kafka_2.11-0.10.0.1.tgz > cd kafka_2.11-0.10.0.1.tgzkafka简单配置 > vi config/server.properties主要注意三个地方&a…

1.4)深度学习笔记------深层神经网络

目录 1&#xff09;Deep L-layer neural network 2&#xff09;Forward Propagation in a Deep Network(重点) 3&#xff09;Getting your matrix dimensions right 4&#xff09;Building blocks of deep neural networks 5&#xff09;Forward and Backward Propagation…

Struts1工作原理

Struts1工作原理图 1、初始化&#xff1a;struts框架的总控制器ActionServlet是一个Servlet&#xff0c;它在web.xml中配置成自动启动的Servlet&#xff0c;在启动时总控制器会读取配置文件(struts-config.xml)的配置信息&#xff0c;为struts中不同的模块初始化相应的对象。(面…

【洛谷 - P1772 】[ZJOI2006]物流运输(dp)

题干&#xff1a; 题目描述 物流公司要把一批货物从码头A运到码头B。由于货物量比较大&#xff0c;需要n天才能运完。货物运输过程中一般要转停好几个码头。物流公司通常会设计一条固定的运输路线&#xff0c;以便对整个运输过程实施严格的管理和跟踪。由于各种因素的存在&am…

RabbitMQ初识

官方介绍 - 中文 本文环境&#xff1a;ubuntu:20.04 RabbitMQ安装、配置与基本使用 安装RabbitMQ # 简易脚本安装 curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.deb.sh | sudo bash sudo apt-get install rabbitmq-server -y --f…

Apollo进阶课程 ⑦ | 高精地图的采集与生产

目录 1.高精地图采集过程中需要用到的传感器 1.1&#xff09;GPS 1.2&#xff09;IMU 1.3&#xff09;轮速计 2.高精地图采集过程中的制图方案 2.1&#xff09;方案一 激光雷达 2.2&#xff09;Camera融合激光雷达 原文链接&#xff1a;Apollo进阶课程 ⑦ | 高精地图的采…

你看不懂的spring原理是因为不知道这几个概念

背景 问题从一杯咖啡开始。 今天我去楼下咖啡机买了一杯「粉黛拿铁」。制作过程中显示&#xff1a; 我取了做好的粉黛拿铁&#xff0c;喝了一口&#xff0c;果然就是一杯热巧克力。咦咦咦&#xff0c;说好的拿铁呢&#xff1f;虽然我对「零点吧」的咖啡评价很高&#xff0c;觉…

EasyOcr 安装(linux、docker)、使用(gin、python)

EasyOcr git地址 EasyOCR是一款用python语言编写的OCR第三方库&#xff0c;同时支持GPU和CPU&#xff0c;目前已经支持超过70种语言. 安装(CPU) 注意&#xff1a; 本文是在仅在cpu下使用。如要使用CUDA版本&#xff0c;请在pytorch网站上选择正确的&#xff0c;并关闭此文章。…

Python之Numpy入门实战教程(2):进阶篇之线性代数

Numpy、Pandas、Matplotlib是Python的三个重要科学计算库&#xff0c;今天整理了Numpy的入门实战教程。NumPy是使用Python进行科学计算的基础库。 NumPy以强大的N维数组对象为中心&#xff0c;它还包含有用的线性代数&#xff0c;傅里叶变换和随机数函数。 本文主要介绍Numpy库…

【牛客 - 369F】小D的剑阵(最小割建图,二元关系建图,网络流最小割)

题干&#xff1a; 链接&#xff1a;https://ac.nowcoder.com/acm/contest/369/F 来源&#xff1a;牛客网 题目描述 现在你有 n 把灵剑&#xff0c;其中选择第i把灵剑会得到的 wiw_iwi​ 攻击力。 于此同时&#xff0c;还有q个约束&#xff0c;每个约束形如&#xff1a; …

【HDU - 3870】Catch the Theves(平面图转对偶图最短路,网络流最小割)

题干&#xff1a; A group of thieves is approaching a museum in the country of zjsxzy,now they are in city A,and the museum is in city B,where keeps many broken legs of zjsxzy.Luckily,GW learned the conspiracy when he is watching stars and told it to zjsxz…

Apollo进阶课程 ⑧ | 高精地图的格式规范

目录 高精地图规范格式分类 NDS格式规范 Open DRIVE格式规范 原文链接&#xff1a;Apollo进阶课程 ⑧ | 高精地图的格式规范 上周阿波君为大家详细介绍了「Apollo进阶课程⑦高精地图的采集与生产」。 高精地图采集过程中需要用到的传感器有GPS、IMU和轮速计。 无论是哪种传感…

Apollo进阶课程 ⑨ | 业界的高精地图产品

目录 高精地图的格式规范-OpenDRIVE HERE HD LIve Map HERE HD LIVE MAP-MAP COLLECTION HERE HD Live Map-Crowdsourced Update HERE HD Live Map-Learning HERE HD Live Map-Product MobileEye MobileEye-Pillars of Autonomous Driving MobileEye-Map as back-up s…

Apollo进阶课程⑩ | Apollo地图采集方案

目录 TomTom的高精地图和RoadDNA APOLLO地图采集流程 基站搭建 Apollo地图采集硬件方案 地图数据服务平台 原文链接&#xff1a;进阶课程⑩ | Apollo地图采集方案 上周阿波君为大家详细介绍了「Apollo进阶课程⑨业界的高精地图产品」。 出现在课程中的业界制作高精地图的厂…

用Python写Shell

环境 ubuntu: 18.04python: 3.6.9xnosh: 0.11.0 下载 pip3 install xonsh 简单使用 # 开启xonsh xonsh # 下载小工具&#xff08;也可不下&#xff09;:高亮提示、智能补全 xpip install -U xonsh[full]# 随便下载一个包 pip3 install moneyimport money m1 money.Money(…

Apollo进阶课程⑪ | Apollo地图生产技术

目录 高精地图生产流程 数据采集 数据处理 元素识别 人工验证 全自动数据融合加工 基于深度学习的地图要素识别 人工验证生产 地图成果 原文链接&#xff1a;进阶课程⑪ | Apollo地图生产技术 高精地图是自动驾驶汽车的「千里眼」和「透视镜」。 摄像头、激光雷达、传…

Jenkins初识

Jenkins是啥 官方文档 Jenkins是一款开源 CI&CD 软件&#xff0c;用于自动化各种任务&#xff0c;包括构建、测试和部署软件。 Jenkins 支持各种运行方式&#xff0c;可通过系统包、Docker 或者通过一个独立的 Java 程序。CI(Continuous integration&#xff0c;持续集成…

Apollo进阶课程 ⑫ | Apollo高精地图

目录 Apollo高精地图表征元素 Apollo车道模型 UTM坐标系 84坐标系 Track坐标系 Apollo opDRIVE规范 HDMAP引擎 高精地图在政策方面的挑战 原文链接&#xff1a;进阶课程 ⑫ | Apollo高精地图 高精地图与普通地图不同&#xff0c;高精地图主要服务于自动驾驶车辆&#…