go语言编程入门
查看文档
首先先分享一个可以在本地就能查看文档的骚操作(linux系统)
1.打开命令行终端,输入godoc -http=:8000,如果想后台运行在后面加个&
2.然后打开浏览器,输入网址:localhost:8000 就可以愉快地看文档了
go语言是个什么东西我想不用我介绍了~~~大家百度吧
接下来我会一步一步地敲一个hello who?代码
下载
如果你使用的是linux系统:
sudo apt-get install golang
如果没成功:
sudo add-apt-repository ppa:gophers/go
sudo apt-get update
sudo apt-get install golang
如果你使用的是windows,mac系统:
查百度~~~
在终端执行go version
如果失败,看下面配置环境变量
为GOPATH做准备
GOPATH对Go来说是一个很重要的环境变量,在设置环境变量前,先要做一些准备工作
在你喜欢的地方建立一个文件夹,你可以随便起名,我呢是建在/home/username目录中的,文件夹的名字就叫go。在该文件夹下再建3个文件夹,名字分别为/bin,/pkg,/src。/src放源码,使用go get命令时,源码就下载在这个文件夹。/bin存放使用go install命令编译的可执行文件。/pkg存放编译后生成文件(这个目录的作用是我百度的……我也不知道该咋用,毕竟初学者0.0)至此,准备工作完成。
设置环境变量
在/etc/profile或者~/.profile中加入这几行命令
export GOROOT=/usr/lib/go
export GOPATH=/home/username/go(这里视情况而定,看自己的文件夹建在哪里啦)
export PATH=$PATH:$GOPATH/bin(添加了这个环境变量后,go install生成的可执行文件在任何位置都能执行了0.0)
然后,在终端中敲入这样的代码,让配置生效
source .profile(看你改了哪个文件,这个文件只是为特定单个用户服务的,也就是说只对一个用户起作用)
然后,在终端输入 go env
可以看到所有go相关的环境变量
敲代码!
在$GOPATH/src目录下,新建名为hello的文件夹,在该文件夹下新建hello.go的源代码文件
开始敲代码辣!!!
package main
func main() {
who := "world!"
if len(os.Args[1:]) > 0 {
who = ""
for _, arg := range os.Args[1:] {
who += " " + arg
}
}
fmt.Println("hello", who)
}
看了代码是不是觉得很难受?是不是觉得博主代码格式有毒?别着急,接着往下看。
go语言的工具链可以说是十分厉害了,其中就有一个叫goimports的工具(科普一个工具:gorun,可以把go语言当作脚本语言运行)
如果你没有安装下面贴出安装命令:
sudo apt-get install golang-golang-x-tools
然后执行以下命令:
goimports -w hello.go
-w参数作用为将结果写入文件,而不是输出在终端,来看看现在的代码
package main
import (
"fmt"
"os"
)
func main() {
who := "world!"
if len(os.Args[1:]) > 0 {
who = ""
for _, arg := range os.Args[1:] {
who += " " + arg
}
}
fmt.Println("hello", who)
}
hohoho,我发誓我没动过源文件~~~
gofmt也有将代码规范化的功能,只是goimports工具更加强大,可以自动导入需要的包(Go语言很娇气,如果包导入了没有使用或者使用到的包没导入都会导致编译失败)
运行
进入hello目录,在终端中输入go install(或者go install hello在任何目录下都生效)
进入/bin目录,你会发现多了一个名为hello的文件,在终端中输入hello
~$ hello
hello world!
输入hello Go language
~$ hello Go language
hello Go language
解析
接下来我们来解析这个程序。
首先看package main
在Go语言中,所有的代码必须从属于包,每一个Go语言程序都必须包含一个main包以及一个main()函数,main()函数是整个程序的入口,最先被执行。其实,Go语言还可能包含init()函数,先于main()执行,用于初始化包。需要注意的是,包名和函数名不会发生命名冲突。
Go语言针对的处理单元是包而非文件,在Go语言编译器看来,只要开头的包声明一样,那么它就属于同一个包,就相当于都放在一个文件里,很难理解对吧~~~就好像糖葫芦,虽然插着好多个山楂,但是每个山楂都属于这个糖葫芦中的一部分。由于有这样的特性,我们可以将包拆成任意数量的源代码文件。
import语句就不用我介绍了
Go语言不需要;(除非在同一行中输入多个语句),if和for语句也不需要(),分号由编译器自动添加。
Go语言的函数和方法由func关键字定义。
大家可能会看到:=这样怪异的表达,这个表达式完成了两个操作,声明和赋值,不需要声明变量类型不代表Go语言是弱类型语言,Go语言是强类型语言,不需要声明类型是因为Go会从初始化值中推导出类型。:=只能用在函数中,如果声明包一级变量,可以使用var关键字,var name = ???或者 var name type。而后面的who变量为什么不用:=,因为一旦使用了who:=""这样的表达,就相当于在if语句作用域内部重新声明了一个名为who的变量,生命周期为if语句内部,就是局部变量。
在for循环中,使用了range关键字,每次循环会返回键和值,值存储在arg中,_则是键。_,arg 这样的表达看起很奇怪,这是因为Go语言不允许声明变量后不使用,而我们确实用不到range返回的键,所以使用 _ 这个东西,相当于垃圾堆。
os.Args是一个string类型的切片(slice)和python差不多
---------------------
作者:葱蒜盐
来源:CSDN
原文:https://blog.csdn.net/qq_36474134/article/details/78107685
版权声明:本文为博主原创文章,转载请附上博文链接!
go语言编程入门的更多相关文章
- linux 操作系统下c语言编程入门
2)Linux程序设计入门--进程介绍 3)Linux程序设计入门--文件操作 4)Linux程序设计入门--时间概念 5)Linux程序设计入门--信号处理 6)Linux程序设计入门--消息管理 ...
- C语言编程入门之--第四章C语言基本数据类型
导读:C语言程序中经常涉及一些数学计算,所以要熟悉其基本的数据类型.数据类型学习起来比较枯燥,不过结合之前的内存概念,以及本节的字节概念,相信数据类型也就不难理解了.本章从二进制的基本概念开始,然 ...
- [转] linux操作系统下c语言编程入门--基础知识
点击阅读原文 这篇文章介绍在LINUX下进行C语言编程所需要的基础知识.在这篇文章当中,我们将会学到以下内容: 1. 源程序编译 2. Makefile的编写 3. 程序库 ...
- C语言编程入门之--第一章初识程序
第一章 初识程序 导读:计算机程序无时不刻的影响着人类的生活,现代社会已经离不开程序,程序的作用如此巨大,那么程序到底是什么呢?本章主要讨论程序的概念,唤起读者对程序的兴趣,同时对C语言程序与其它语言 ...
- C语言编程入门之--第三章编写第一个C语言程序
第三章 编写第一个C语言程序 导读:一般学一门计算机语言的第一堂上机课(“上机”顾名思义,上了计算机),就是往屏幕输出“hello world”,本章也不例外. 1.1 Hello,World! 这一 ...
- 【C语言编程入门笔记】排序算法之快速排序,一文轻松掌握快排!
排序算法一直是c语言重点,各个算法适应不用的环境,同时,在面试时,排序算法也是经常被问到的.今天我们介绍下快速排序,简称就是快排. 1.快速排序思想: 快排使用 分治法 (Divide and con ...
- 【C语言编程入门笔记】C语言果然博大精深!函数还分内部和外部?
۞ 外部函数与内部函数 前面我们讲解了关于函数的调用都是针对同一个源文件中其他函数进行调用的,而在有些情况下,函数也可以对另外一个源文件中的函数进行调用.当一个程序由多个源文件组成时,根据函数是否能被 ...
- 【C语言编程入门】Do you know 函数?不知道了吧,我来告诉你!
☆ 函数 在前面我们已经讲过了一些简单的函数,如程序的主函数main().标准输出函数printf().在C语言中,大多数功能都是依靠函数来实现的.But,你知道什么是函数吗?我猜你肯定不知道. 那么 ...
- java语言编程入门
1 概述 1.1 计算机 计算机包括硬件和软件两部分.硬件包括计算机中可以看得见的物理部分.软件提供看不见的指令.这些指令控制硬件并且使得硬件完成特定的任务. 1.2 程序设计 定义:创建(或开发软件 ...
随机推荐
- SpringBoot application.properties (application.yml)优先级从高到低
SpringBoot application.properties(application.yml) 优先级从高到低 SpringBoot配置文件优先级从高到低 =================== ...
- python cookie
http://www.jayconrod.com/posts/17/how-to-use-http-cookies-in-python
- Unity Shader 设置纹理采样tex2D过滤方式
双击红色框区域
- 带有ZLIB_LIBRARY_DEBUG的FindZLIB.cmake文件
CMake自带的FindZLIB.cmake只有ZLIB_LIBRARY,而没有ZLIB_LIBRARY_DEBUG 将下面的代码保存成FindZLIB.cmake,替换掉D:\Program Fil ...
- creat-react-app 如何在组件中img的src引入图片路径??
把图片文件夹放到public中,然后以这种方式来动态写路径: process.env.PUBLIC_URL + '/img/' + url + '.jpg'
- Jdk1.8在CentOS7中的安装与配置
自从2014年3月19日甲骨文公司发布Java 8.0的正式版以来,面向对象的Java语言不仅朝着一个更好的方向发展,而且吸取了当前比较流行的函数式编程的特性——Java 8.0加入了函数式编程的特点 ...
- Unicode编码转换汉字
Uri.UnescapeDataString(string) #region Unicode转换汉字 Console.WriteLine(Uri.UnescapeDataString("\u ...
- .net 取得类的属性、方法、成员及通过属性名取得属性值
//自定义的类 model m = new model(); //取得类的Type实例 //Type t = typeof(model); //取得m的Type实例 Type t = m.GetTyp ...
- Delphi 中DataSnap技术网摘
Delphi2010中DataSnap技术网摘 一.为DataSnap系统服务程序添加描述 这几天一直在研究Delphi 2010的DataSnap,感觉功能真是很强大,现在足有理由证明Delphi7 ...
- javascript 闭包学习
闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域 ...