Go 语言入门指南

Go 语言入门指南

学一门语言先看看helloworld吧,感觉go结合了好多语言的方式,写起来一会像python一会像c++,java差不多。反正语法挺奇特

package mainimport "fmt"func main() {fmt.Println("HelloWorld")
}

go语言特点:

高性能、高并发

语法简单,学习曲线平缓

丰富的标准库

完善的工具链

静态链接

快速编译

跨平台

垃圾回收

首先听到老师说 go语言编译贼快,1秒钟左右,我(c++选手)听到简直大吃一惊啊,真神奇

基础语法

首先go是强类型语言,每一个变量都有自己的变量类型,常见的有:字符串,整数,浮点型,布尔类型,另外go中也有指针(只不过用法就是解引用和取地址)

go语言中字符串是内置类型,可通过加号直接拼接,也同时能用等于号比较俩个字符串

下面是变量声明及其定义

var name string // 声明
var name string = "name" //声明并赋初值
var name = "name" //自动推导类型为stringname := "name" //也可以省略var 和类型直接自动推导
/*其他类型同上几乎差不多*/

分支结构

if - else :

go 中的if - else和其他语言差不多,有些细节需要注意

if true{ // 花括号必须加...
}else{ //else必须位于这里}
// if - else if 
if true{...
}else if true{...
}else{...	
}
switch-case

switch 中 可以放 变量,常量 ,字符串, case中也可以放表达式,用起来很是方便

switch v{case 1 , 2 : // 可以并列 , 然后没有breakcase 3:default:
} 
switch {case  retInt() == v: //表达式...case  v == 2:...default:...} 

循环结构

go 语言中只有一个for

for{	//类似 while(true)死循环...
}
for i < 10{ //类似while(i < 10)...
}
for i:=0; i < 10; i++{ //正常for循环,三个表达式也可以省略,但是分号得在昂...
}

数组

数组的话和其他语言类似,具有编号且长度确定的元素序列

var a[5] int //声明一个长度为5的int型数组
b := [5]int{1,2,3,4,5} //声明并定义
c := [...]int{1,2,3,4,5}//不想写括号里的5也可以写...来根据后面初始化的数量赋值
var twoD [2][3]int//二维数组

切片

go语言中一般很少用数组,用切片更方便一些

切片可以任意更改长度

	s := make([]string, 3) //创建一个切片 初始长度为3s[0] = "a"s[1] = "b"s[2] = "c"s = append(s, "d") //数组不能用这个方法fmt.Println(s) // [a b 3 d] 

切片也可以这样声明,一开始总搞混切片和数组,其实就是切片方括号没值而已,数组有值

	var s  []string //切片也可以这样声明s = append(s, "a")s = append(s, "b")fmt.Println(s) // [a b]

现在解释一一下为什么s = append(s, “a”)还需要在重新给s赋值呢,虽然切片可以动态变长,其实切片底层是维护了一个数组的,也就是说他初始上就是个数组,只不过有一定大小,如果你append添加元素没有超过数组,那没事,但是超过数组大小,他就会重新弄一个更大的数组然后把值拷贝进去,最后把地址返回出来,所以你得让他重新等于s。(对于c++同学应该是类似与vector的东东)

对切片可以有cap方法查看其底层数组大小 , len方法是真实元素个数var s []strings = append(s, "a")s = append(s, "b")s = append(s, "c")fmt.Println(s)fmt.Println(cap(s)) // 4 fmt.Println(len(s)) // 3
切片遍历时也可以像python的切片一样s[0:len(s)]  // 这样使用// 数组也可以 只不过数组一这样用返回的类型也就是切片类型了

map

这个map和其他语言的hashmap、字典差不多

	m := make(map[string]int , 3)//key是string value是int  初始大小设置为3								 	//也可以不设置m["name"] = 2fmt.Println(m["name"])delete(m , "name")//在m中删除key为name的

range

下面来介绍range。对于一个 slice(切片) 或者一个 map 的话,我们可以用 range 来快速遍历,这样代码能够更加简洁。 range 遍历的时候,对于数组会返回两个值,第一个是索引,第二个是对应位置的值。如果我们不需要索引的话,我们可以用下划线来忽略。

	nums := []int{2, 3, 4}sum := 0for i, num := range nums { //返回数组的 下标 和值sum += numif num == 2 {fmt.Println("index:", i, "num:", num) // index: 0 num: 2}	}fmt.Println(sum) // 9m := map[string]string{"a": "A", "b": "B"}for k, v := range m {  //返回key和valuefmt.Println(k, v) // a A; b B}for k := range m {//返回keyfmt.Println("key", k) // key a; key b}

函数

这个是 Golang 里面一个简单的实现两个变量相加的函数。 Golang 和其他很多语言不一样的是,变量类型是后置的。Golang 里面的函数原生支持返回多个值。在实际的业务逻辑代码里面几乎所有的函数都返回两个值,第一个是真正的返回结果,第二个值是一个错误信息。

func add(a  int , b int) int ,err {//a int , b int == a , b int俩种方式都一样return a + b		//后面的是返回值
}
func add(a , b int)(int , error){ //可返回多个值return a + b , nil
}func Tmp(a , b int){func() int {//还可以在函数内部定义一个匿名函数,类似别的语言lambda函数return 5}()//加上()表示直接调用
}

结构体

type student struct { //定义方式 type + 名字 + structname string //小写变量名相当于私有,只有自己包的才可以访问,Age  int //大写变量名相当于公有 , 外面包也可以访问
}stus := []student{ {name: "小王子", Age: 18}, //可以指定变量成员赋值{name: "大王八", Age: 9000},{name: "娜扎", Age: 23},}

结构体函数

相比其他语言,结构体成员函数是在外面定义的

type person struct {name, city stringage        int8
}
//	(接收者变量 接收者类型) 方法名(参数列表) (返回参数)
//	不可修改成员的值
// 方法与函数的区别是,函数不属于任何类型,方法属于特定的类型。
func (p person) Dream() { fmt.Printf("%s的梦想是学好Go语言!\n", p.name)
}
// 可修改成员的值
func (p *person) SetAge(newAge int8) {p.age = newAge
}

简单语法结构就介绍这么多了,剩下的太多了慢慢介绍

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

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

相关文章

UE虚幻引擎教程_生成云平台指定路径下的exe文件

市面上大量优秀的游戏都是基于UE制作的&#xff0c;UE虚幻引擎制作的作品可以在windows、mac、linux以及ps4、x-boxone、ios、android甚至是html5等平台上运行。本文介绍了UE虚幻引擎如何生成云平台指定路径下的EXE。 一、云平台会运行打包文件夹下指定路径的EXE文件 但有时候…

几道有关spring boot 的面试题

面试题1:什么是Spring Boot?它有哪些主要特点? 答:Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。使用Spring Boot可以非常快速地开发出生…

13.3 【Linux】主机的细部权限规划:ACL 的使用

13.3.1 什么是 ACL 与如何支持启动 ACL ACL 是 Access Control List 的缩写&#xff0c;主要的目的是在提供传统的 owner,group,others 的read,write,execute 权限之外的细部权限设置。ACL 可以针对单一使用者&#xff0c;单一文件或目录来进行 r,w,x 的权限规范&#xff0c;对…

使用rknn-toolkit2把YOLOV5部署到OK3588上

使用rknn-toolkit2把YOLOV5部署到OK3588上 虚拟环境搭建软件包安装在PC机上运行yolov5目标检测 虚拟环境搭建 首先在PC的ubuntu系统安装虚拟环境&#xff1a; 我的服务器是ubuntu18.04版本&#xff0c;所以安装python3.6 conda create -n ok3588 python3.6 需要键盘输入y&…

蓝桥杯专题-真题版含答案-【垒骰子_动态规划】【抽签】【平方怪圈】【凑算式】

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

上传了ipa但iTunes Connect没有构建版本问题

转载&#xff1a;上传了ipa但iTunes Connect没有构建版本问题 目录 一、首先登录iTunes Connect 后台 查看ipa构建情况 二、错误反馈邮件示例及说明 证书类型不正确 Invalid App Store Icon 三、修改相关错误后重新打包版本号的修改 xcode打包导出ipa 第一步&#xff1…

三层交换基础实验

要求: 1.IP地址基于192.168.1.0/24划分 2.使用OSPF 3.使用DHCP 4.全网可达 1.配置二层交换 SW 3 <Huawei>system-view [Huawei]sysname SW3 [SW3]interface GigabitEthernet 0/0/2 [SW3-GigabitEthernet0/0/2]port link-type access [SW3-GigabitEthernet0/0/2]por…

虚拟机VMware,linux,centos,如何将项目部署到服务器上面

vmware 是安装虚拟机的软件&#xff0c;centos是系统&#xff0c;linux是系统内核 将本地项目上线到服务器上面&#xff0c;如何实现呢&#xff1f; 准备好服务器&#xff0c;可以选择阿里云服务器 首先需要搭建环境&#xff0c;运行的主要环境是jdktomcatmysql; 通过远程连接…

jQueryAPI

文章目录 1.jQuery 选择器1.1 jQuery 基础选择器1.2 jQuery 层级选择器1.3 隐式迭代1.4 jQuery 筛选选择器1.5 jQuery 筛选方法1.6 jQuery 里面的排他思想1.7 链式编程 2.jQuery 样式操作2.1 操作 css 方法2.2 设置类样式方法2.3 类操作与className区别 3.jQuery 效果3.1 显示隐…

【C++ OJ练习】9.最小栈

1.题目链接 力扣 2.解题思路 利用两个栈实现 3.代码 class MinStack { public:MinStack() {//两个栈来实现}void push(int val) {_st.push(val);if (_minst.empty() || _minst.top() > val){_minst.push(val);}}void pop() {if (_st.top() _minst.top())_minst.pop();…

Visual modflow Flex地下水数值模拟及参数优化、抽水实验设计与处理、复杂的饱和/非饱和地下水流分析

主要围绕目前应用较为广泛的Visual Modflow Flex 系列版本开展&#xff0c;结合具体应用场景&#xff0c;实例讲解软件的全流程应用过程&#xff0c;包括数据处理分析、数值模型构建以及模拟结果的输出等。通过建模篇、优化篇、真实案例篇、复杂应用篇为内容主线&#xff0c;全…

登录和注册表单的11个HTML最佳实践

原文&#xff1a;11 HTML best practices for login & sign-up forms 原作者&#xff1a;Andrey Sitnik 翻译已获原文作者许可&#xff0c;禁止转载和商用 大多数网站都有登录或注册表单;它们是业务转换的关键部分。然而&#xff0c;即使是流行的站点也没有实现本文中提到的…

ubuntu 18.04 磁盘太满无法进入系统

安装了一个压缩包&#xff0c;装了一半提示磁盘空间少导致安装失败。我也没在意&#xff0c;退出虚拟机打算扩展硬盘。等我在虚拟机设置中完成扩展操作&#xff0c;准备进入虚拟机内部进行操作时&#xff0c;发现登录不进去了 shift 登入GUN GRUB设置项的问题 网上都是在开机…

Yarn与Zookeeper学习

YARN学习 1.YARN是什么&#xff1f; yarn 分配运行资源 mapReduce的运行平台 2.YARN运行过程&#xff1a; 客户端与ResourceManager交互&#xff0c;生成临时配置文件(Application)ResourceManager根据Application信息生成Task然后生成MapReduceApplicationMaster(简称AM)AM…

如何解决创建vue项目后没有webpack.config.js(vue.config.js)文件

◼️ webpack.config.js文件没有的原因 Vue 项目中 vue.config.js 文件就等同于 webpack 的 webpack.config.js。 vue-cli3 之后创建的时候并不会自动创建 vue.config.js&#xff0c;因为这个是个可选项&#xff0c;所以一般都是需要修改 webpack 的时候才会自己创建一个 vue…

“5G+工业互联网”20个典型应用场景

目录 1、工业研发设计&#xff08;2个应用场景&#xff09; 1&#xff09;协同研发设计 2&#xff09;生产单元模拟 2、生产运行&#xff08;5个应用场景&#xff09; 1&#xff09;远程设备操控 2&#xff09;设备协同作业 3&#xff09;精准动态作业 4&#xff09;柔…

dbus-send和dbus-monitor命令详解

1. 概述 D-Bus 是 Linux 上的一种进程间通信方式&#xff0c;内部使用 socket 技术实现。是 freedesktop.org 专案的一部分&#xff0c;其设计目的是使Linux桌面环境&#xff08;如GNOME与KDE等&#xff09;提供的服务标准化。 应用程序可以在总线上注册 D-Bus 服务&#xff…

信号——进程间最古老的通信方式之一

文章目录 信号信号的5种默认处理动作查看core文件中的错误信息常见函数killraiseabortalarmsetitime 信号 SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAPSIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERMSIGS…

R语言 PCA筛选变量

#PCA-筛选变量 X <- data[,2:415] pca <- prcomp(X, center TRUE, scale. TRUE) # 进行主成分分析 summary(pca) # 查看各个主成分的解释方差比例 library(factoextra) #碎石图依赖-fviz fviz_eig(pca,addlabelsT) #碎石图 X_selected <- pca$x[,1:20] # 选择前n个主…

饮用水、地下水除砷的方法——砷吸附树脂

砷&#xff08;As&#xff09;为非人体必需元素&#xff0c;既不溶解于水又不溶解于酸&#xff0c;在自然界有三价无机态 As(III)、五价无机态 As(V)以及有机砷MMA(甲基胂酸)、DMA(二甲基胂酸)、TMA(三甲基胂酸)等。 砷在水体中主要以三价和五价的无机酸形式存在&#xff0c;三…