【Go基础】快速入门

Go基础入门

用20%的时间学习常用80%的语法

官方网址(下载安装/官方文档/官方类库)

  • Download Go binaries from https://go.dev/dl/
  • Reference the official Go documentation https://go.dev/doc/
  • See all the the Go packages https://pkg.go.dev/
  • Access the Go Playground https://go.dev/play/

编译运行与打包

package main
import "fmt"
func main() {fmt.Println("Hello, World!")
}
  • go run hello.go

  • <GOOS=[darwin|linux|windows] GOARCH=[386|amd64|arm]> go build hello.go

  • GOPATH, the path to store models/libraries,default:$HOME/go

语言特性

  • 空白格没有特殊意义,不像python,用缩进表示代码块
  • 分号可以省略,像javascript
fmt.Println("Hello, World!")
  • 注释
// 这是单行注释/*
这是多行注释
*/
  • 变量 大小写区分,由字母数字下划线组成,作用域:包级别/函数级别,变量声明后未使用会报错
  • 常量使用 const
// 三种变量的声明与初始化
var a = 10; //自动检测类型
var b int; b = 11;// 手动声明类型
c:=10 // 简化声明
// 多变量声明
var a,b=10,"Jim"; 
a,b:=10,"Jim"
  • 基本数据类型

    • 整型 int, int8, int16, int32, rune, int64, uint, uintptr, uint8, uint16, uint64
    • 浮点 float32 float64
    • 复数 complex32 complex64
    • 字节 byte,in ASCCI
    • 字符串 string,a set of byte vaules
    • 布尔 bool,true/false
  • 字符串

var str = "test"; //必须双引号
len(str) //4 求长度,使用内置len函数
str[0] //读取某个位置字符
str[:2] str[2:] str[:]//te st  test 读取部分子串
str[:2] + str[2:] //test 使用 + 拼接字符串
// 使用内置strings提供的函数库 https://pkg.go.dev/strings
strings.ToUpper() //转大写
strings.ToLower() //转小写
strings.HasPrefix(a, b) //判断a是否以b开始
strings.HasSuffix(a,b) //判断a是否以b结尾
strings.Contains(a,b) //判断a是否包含b子串
strings.Count(a,b) //计算b在a中出现多少次
strings.Join(a string[],sep) //将字符串数组a使用sep拼接起来
strings.Split(a,sep) //将字符串a按sep分隔成字符串数组
strings.ReplaceAll(a,old,new) //将a中所有old字符串替换成new字符串
  • 数组
var arr [3]string //声明字符串数组
var arr = [3]string{"a","b","c"} //声明并且赋值
var arr = [...]string{"a","b","c"} 
arr[0] arr[1] //访问
arr[2] = "e" //更新 
len(arr)// 3 求元素数
//复制
a := [...]string{"first","second","third"}
b := a;
a[2]="another"
b[2] // third,保持不变
a[2] // another
  • 分片(不同于数组,大小可调整)
//忽悠定义大小
var arr []string  // 声明不带大小
arr := []string{"first","second","third"} // 声明并赋值
arr0 := make([]string,0,10) // 通过make函数创建容量为10的空分片
arr1 := make([]string,3) // 通过make函数创建大小为3的分片
arr2 := append(arr,"forth","fifth")//通过append追加字符串,注意不能直接复制给原来分片
copy(arr1,arr)//将arr赋值给arr1
//来自同一个数组的所有分片共享一份数据,改动其中一个,其他分片受影响
myArray := [3]string{"First", "Second", "Third"} //定义数组
mySlice := myArray[:] //通过数组得到分片1,分片2
mySlice2 := myArray[:]
mySlice[0] = "test" // 改动分片1
mySlice2[0] // test 分片2受影响
  • Maps
// 声明map,下面两行等价
myMap := make(map[string]int);myMap["a"]=1;// 声明,添加
myMap := map[string]int{"a":1}//声明初始化
myMap["a"]//访问
delete(myMap,"a")//删除
  • 循环
for i:=0;i<10;i++ {fmt.Println(i)
}
// go 只有for,可以模拟while
i:=0
for i < 10 {fmt.Println(i)i++
}
// 省略条件的for,通过break跳出循环
for {fmt.Println(i)if(i >= 10){break}i++
}
// for 迭代数组使用range
numbers := []int{1,2,3,4,5}
for index,number := range numbers { //使用_替换index,如果不需要indexfmt.Printf("%d: %d\n", index, number)
}
  • 条件
// if条件
if age < 12 {//child
} else if age < 18  {//teen
} else {//adult
}
// switch , 不需要break
switch age{case 0: fmt.Println("Zero years old")case 1: fmt.Println("One year old")case 2: fmt.Println("Two years old")case 3: fmt.Println("Three years old")default: fmt.Println(i + " years old")
}
  • 操作符
//比较操作符
== != > < >= <=
//算术运算符
+ - * / %
// 逻辑运算符
&& || !
// 字符串拼接
+
//自增自减
++ --
  • 结构体(变量集合)
//定义结构体
type Person struct{Name string //大写表示public access,小写表示privateAge int
}
//实例1
jim := Person{}
jim.Age = 20;
jim.Name = "Jim"
//实例2
jim := Person{"Jim",20} 
//实例3
jim := Person{Age:20,Name:"Jim"} 
jim := Person{Name:"Jim"} //访问
jim.Name // Jim
jim.Age //20// 结构体嵌套结构体
type Class struct{Teacher Person // 这里 嵌套Person结构体NumberOfStudents int
}
  • 函数(将代码组成块,并起了名字)
//声明函数(无返回值),调用
func doSomething(a int ,b int){}
doSomething(1,2)
// 多返回值
func doSomething(a int ,b int) (int,int) {return b,a
}
a,b := doSomething(1,3);
// 接收可变参数
func sum(numbers ...int) int {total := 0for _,number := range numbers {total += number}return total
}
total := sum(1,2,3,4,5)
  • 方法(绑定到结构体的函数)
type Person struct{Name stringAge int
}
func (p Person) Speak(){fm.Println("Hello, I'm " + p.Name + "," + p.Age)
}
func (p *Person) Speak(){fm.Println("Hello, I'm " + p.Name + "," + p.Age)
}
  • 指针
age := 20;
ageAddr := &age // 获取内存地址
age2 := *ageAddr // 获取地址对应值func doSomething( i int){// 值传递i = 21;
}
doSomething(age) //没改变agefunc doSomething(i *int){ // 指针传递*i = 21;
}
doSomething(age) // age 变成 21
  • 接口(声明一个或多个方法签名)
//声明接口
type Speaker interface{Speak()
}
// 定义接收接口的函数
func doSomething(Speaker s){s.Speak()
}
//定义实现Speak方法的结构体
type Person strut{Name string
}
func (p Person) Speak(){fm.Println("Hello, I'm " + p.Name)
}
//实例结构体,并传入已经定义的函数
p := Person{Name:"jim"}
doSomething(p) 

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

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

相关文章

Linux基础指令及其作用之网络操作

网络操作pingifconfigeth0 接口 ip常用选项和命令 netstat示例输出解释 curl示例输出及解释 wget示例输出解释 网络操作 ping ping 命令用于测试网络连接的连通性和响应时间。它通过向目标主机发送 ICMP 回显请求&#xff08;echo request&#xff09;数据包&#xff0c;并等…

wpf 依赖属性的含义理解

依赖属性允许没有自己的字段&#xff0c;可以通过Binding绑定到其它对象的属性或者说数据源上&#xff0c;从而获得值。 缘由 由于控件有很多的属性&#xff0c;有属性就有字段的内存开销&#xff0c;但实际上对于一个控件&#xff0c;我们大多数只会使用其部分常用属性&#…

ConvNeXt(CVPR 2022)论文解读

paper&#xff1a;A ConvNet for the 2020s official implementation&#xff1a;https://github.com/facebookresearch/ConvNeXt third-party implementation&#xff1a;https://github.com/huggingface/pytorch-image-models/blob/main/timm/models/convnext.py 背景 在…

代码随想录-算法训练营day55【动态规划16:两个字符串的删除操作、编辑距离、编辑距离总结篇】

代码随想录-035期-算法训练营【博客笔记汇总表】-CSDN博客 第九章 动态规划part16● 583. 两个字符串的删除操作 ● 72. 编辑距离 ● 编辑距离总结篇 详细布置 583. 两个字符串的删除操作 本题和动态规划&#xff1a;115.不同的子序列 相比&#xff0c;其实就是两个字符串都…

流量回放平台与传统测试工具的对比分析

文章目录 一、流量回放平台的优势与挑战二、传统测试工具的优势与挑战三、实际案例演示四、解决方案五、答疑解惑5.1、传统工具不是也可以做到流量会放平台的无侵入性测试和性能瓶颈分析吗&#xff1f;5.2、开发流量回放平台的成本和使用传统测试工具的成本哪个更大&#xff1f…

基于SSM框架的垃圾分类系统的设计与实现(含源码+sql+开题报告+论文+论文答辩模板)

图1 前台首页截图 首页展示&#xff1a;首页展示法律法规、公示公告、用户交流论坛、分类指南、垃圾站点、以及个人中心&#xff1b; 法律法规&#xff1a;展示我国《城市生活垃圾分类及其评价标准》以及《生活垃圾分类标志》等最新法律法规&#xff1b; 公示公告&#xff1…

另一棵树的子树(oj题)

一、题目链接 https://leetcode.cn/problems/subtree-of-another-tree/submissions/536304222 二、题目思路 1.首先遍历大树&#xff0c;判断大树的根结点的值是否等于小树的根结点的值&#xff0c;如果不相等&#xff0c;就找大树的左孩子或者右孩子&#xff0c;以左孩子为根…

【线性表 - 数组和矩阵】

数组是一种连续存储线性结构&#xff0c;元素类型相同&#xff0c;大小相等&#xff0c;数组是多维的&#xff0c;通过使用整型索引值来访问他们的元素&#xff0c;数组尺寸不能改变。 知识点数组与矩阵相关题目 # 知识点 数组的优点: 存取速度快 数组的缺点: 事先必须知道…

php 实现:给图片加文字水印,图片水印,压缩图片

演示环境&#xff1a; 1、windows10 2、phpstudy 3、php7.4 一、案例演示&#xff1a; 二、素材准备 1、准备一张原始图片 2、准备一张水印图片&#xff08;透明底图的最好&#xff09; 3、字体库&#xff08;windows系统自带的字体库&#xff0c;路径在&#xff1a;C:\Window…

Navicat连接Oracle

目标&#xff1a; 1.Navicat连接Oracle数据库&#xff0c;报错 无监听程序。 一、下载安装Navicat15 https://zhuanlan.zhihu.com/p/675991635 下载安装资源 链接&#xff1a;百度网盘 请输入提取码 提取码&#xff1a;1u1q 二、测试SQL PLUS连接数据库 在全部程序--》Ora…

Python | Leetcode Python题解之第123题买卖股票的最佳时机III

题目&#xff1a; 题解&#xff1a; class Solution:def maxProfit(self, prices: List[int]) -> int:n len(prices)buy1 buy2 -prices[0]sell1 sell2 0for i in range(1, n):buy1 max(buy1, -prices[i])sell1 max(sell1, buy1 prices[i])buy2 max(buy2, sell1 - …

Hadoop+Spark大数据技术 第七次作业

第七次作业 1. 简述Spark SQL使用的数据抽象DataFrame与Dataset的区别。 DataFrame: 基于 Row 对象的二维表格结构&#xff0c;类似于关系型数据库中的表。 行和列都有明确的 Schema&#xff08;模式&#xff09;&#xff0c;可以进行类型推断。 提供了丰富的操作接口&#xff…

行列视(RCV)数据安全如何保障?

行列视&#xff08;RCV&#xff09;的数据安全保障是一项至关重要的任务&#xff0c;涉及多个层面的技术和策略来确保数据的完整性、保密性和可用性。以下是关于RCV数据安全保障的几个方面&#xff1a; 首先&#xff0c;RCV采用了先进的加密技术来保护数据的传输和存储。通过使…

英伟达(NVIDIA)A800性能及应用场景

英伟达&#xff08;NVIDIA&#xff09;A800是一款高性能的人工智能&#xff08;AI&#xff09;加速卡&#xff0c;设计用于满足大规模深度学习、数据分析以及其他高性能计算需求。以下是其主要性能参数及应用概述&#xff1a; 性能参数&#xff1a; 数据传输速率&#xff1a;…

docker私有镜像仓库的搭建及认证

简介&#xff1a; docker私有镜像仓库的搭建及认证 前言 在生产上使用的 Docker 镜像可能包含我们的代码、配置信息等&#xff0c;不想被外部人员获取&#xff0c;只允许内 网的开发人员下载。 Docker 官方提供了一个叫做 registry 的镜像用于搭建本地私有仓库使用。在内部网…

苍穹外卖数据可视化

文章目录 1、用户统计2、订单统计3、销量排名Top10 1、用户统计 所谓用户统计&#xff0c;实际上统计的是用户的数量。通过折线图来展示&#xff0c;上面这根蓝色线代表的是用户总量&#xff0c;下边这根绿色线代表的是新增用户数量&#xff0c;是具体到每一天。所以说用户统计…

CS4344国产替代音频DAC数模转换芯片DP7344采样率192kHz

目录 DAC应用简介DP7344简介结构框图DP7344主要特性微信号&#xff1a;dnsj5343参考原理图 应用领域 DAC应用简介 DAC&#xff08;中文&#xff1a;数字模拟转换器&#xff09;是一种将数字信号转换为模拟信号&#xff08;以电流、电压或电荷的形式&#xff09;的设备。电脑对…

BSD盲区检测系统性能要求及试验方法

相关术语 盲区检测(bsd,blind spot detection)试验车辆(subject vehicle)目标车辆(target vehicle)横向距离(lateral distance):试验车车身最外缘(不包含外后视镜)与目标车辆车身最外缘(不包含外后视镜)之间的横向距离。 纵向距离(longitudinal distance):试验…

SpringBoot的第二大核心AOP系统梳理

目录 1 事务管理 1.1 事务 1.2 Transactional注解 1.2.1 rollbackFor 1.2.2 propagation 2 AOP 基础 2.1 AOP入门 2.2 AOP核心概念 3. AOP进阶 3.1 通知类型 3.2 通知顺序 3.3 切入点表达式 execution切入点表达式 annotion注解 3.4 连接点 1 事务管理 1.1 事务…

云计算与 openstack

文章目录 一、 虚拟化二、云计算2.1 IT系统架构的发展2.2 云计算2.3 云计算的服务类型 三、Openstack3.1 OpenStack核心组件 一、 虚拟化 虚拟化使得在一台物理的服务器上可以跑多台虚拟机&#xff0c;虚拟机共享物理机的 CPU、内存、IO 硬件资源&#xff0c;但逻辑上虚拟机之…