mac安装Golang开发环境及快速入门

news2024/12/24 20:26:49

目录

一、Mac brew 安装go环境

1.1 安装步骤

1.2 设置GOPATH 及环境变量

1.3 编写第一个go程序

二、快速入门

1.1 快速入门需求

1.2 go学习(自用)


一、Mac brew 安装go环境

1.1 安装步骤

1)终端输入,也可以指定下载go版本

brew install go

2)查看golang当前版本

go version

3)查看当前golang环境 执行

go env

1.2 设置GOPATH 及环境变量

1)GOPATH 是工作目录,工作空间目录 go_project 就是一个目录,其中包含三个子目录:

  • src 目录包含Go的源文件,它们被组织成包(每个目录都对应一个包),
  • pkg 目录包含包对象,
  • bin 目录包含可执行命令。

如下图:

​2) 终端输入 vim .zshrc 添加:

GOPATH 后面加你自己的工作空间,这里是我自己建立的go_project

export GOPATH="/Users/mima6ge0/Documents/yanhan_practice/go_project"

export PATH = $PATH:$GOPATH/bin

执行 source ~/.zshrc 生效,使用go env查看是否修改成功

1.3 编写第一个go程序

1)新建hellow.go文件

package main

import "fmt"

func main() {
    fmt.Println("hello, world")
}

2)进入文件所在目录,执行go run hellow.go,成功,如下图

二、快速入门

1.1 快速入门需求

  • 具备1种后端编程语言开发经验(C/C++/Java/Python/PHP)
  • 等具备基本的网络编程能力和并发思想
  • 了解计算机基本体系结构
  • 了解Linux基础知识

1.2 go学习(自用)

1.2.1 go基础程序

package main //程序的包名
// main函数
//多个文件导入
import (
	"fmt"
	"time"
)

func main() { //函数的"{"必须和函数名在一行,换到下一行就是语法错误,强制代码风格
	fmt.Println("hellow Go!")
	//go语言不需要";",可有可无
	time.Sleep(10 * time.Second)
}

1.2.2 变量声明

package main
/*
变量的声明方法
 */
import "fmt"
//全局变量,冒等方法不支持全局,其他的都可以
var A int = 100
func main() {
	//声明变量默认值是0
	var a int
	fmt.Println("a = ", a)
	fmt.Printf("type of a = %T\n", a)
	//声明变量,初始化
	var b int = 100
	fmt.Println("b = ", b)
	fmt.Printf("type of v = %T\n", b)
	//初始化可以省去变量类型,通过值去匹配变量的树枝类型
	var c = 100
	fmt.Println("c = ", c)
	fmt.Printf("type of c = %T\n", c)
	//字符串
	var d string = "dasda"
	fmt.Println("d = ", d)
	fmt.Printf("type of d = %T\n", d)
	//最常用方法:冒等,省略var,直接自动匹配,":="初始化加赋值,函数内部使用
	e := 3213.432
	fmt.Println("e = ", e)
	fmt.Printf("type of e = %T\n", e)

	fmt.Println("A = ", A)
	fmt.Printf("type of A = %T\n", A)

	//声明多个变量
	var x, y int = 100, 100
	fmt.Println("x = ", x, ", y = ", y)
	var m, n = 100, "88090"
	n = "kjuhku"
	fmt.Println("m = ", m, ", n = ", n)
	//多行多变量声明
	var (
		xx int = 121
		zz bool = true
	)
	fmt.Println("xx = ", xx, ", zz = ", zz)
}

1.2.3 常量和枚举

package main

import "fmt"

//const 可以定义枚举类型
const (
	//可以在const里面添加一个关键字 iota,每行的iota都会累加1,第一行的iota的默认值是0
	BEIJING = 10 * iota // iota = 0
	SHANGHAI		//iota = 10
	SHENZHEN		//iota = 20
)

const (
	a, b = iota + 1, iota + 2 //iota = 0, a = 1, b = 2
	c, d					  //iota = 1, c = 2, d = 3
	e, f					  //iota = 2, e = 3, f = 4
	g, h = iota * 2, iota * 3 //iota = 3, g = 6, h = 9
	i, k					  //iota = 4, i = 8, k = 12
)

func main() {
	//常量,只读,不允许修改
	const a int = 100
	fmt.Println("a = ", a)
	fmt.Println("BEIJING = ", BEIJING)
	fmt.Println("SHANGHAI = ", SHANGHAI)
	fmt.Println("SHENZHEN = ", SHENZHEN)

	fmt.Println("a = ", a, "b = ", b)
	fmt.Println("c = ", c, "d = ", d)
	fmt.Println("e = ", e, "f = ", f)
	fmt.Println("g = ", g, "h = ", h)
	fmt.Println("i = ", i, "k = ", k)
	//iota只能在const里面使用,var里面不可以
	

}

1.2.4 函数与多种返回值

package main

import "fmt"

//返回一个值,匿名
func foo1(a string, b int) int {
	fmt.Println("a = ", a)
	fmt.Println("b = ", b)
	c := 100
	return c
}

//返回多个值,匿名
func foo2(a string, b int) (int, int) {
	fmt.Println("--------foo2----------")
	fmt.Println("a = ", a)
	fmt.Println("b = ", b)
	return 888, 9999
}

//返回多个返回值,有形参名称
func foo3(a string, b int) (r1 int, r2 int) {
	fmt.Println("--------foo3----------")
	fmt.Println("a = ", a)
	fmt.Println("b = ", b)

	r1 = 1000
	r2 = 100000
	return 
}

func foo4(a string, b int) (r1, r2 int) {
	fmt.Println("--------foo4----------")
	fmt.Println("a = ", a)
	fmt.Println("b = ", b)

	//r1, r2属于foo3的形参,初始化默认的值是0,作用域空间是整个foo4函数{}的整体
	fmt.Println("未赋值:r1 = ", r1)
	fmt.Println("未赋值:r2 = ", r2)
	r1 = 1000
	r2 = 100000
	return 
}

func main() {
	c := foo1("func1", 1)
	fmt.Println("c = ", c)
	ret1, ret2 := foo2("func2", 2)
	fmt.Println("ret1 = ", ret1)
	fmt.Println("ret2 = ", ret2)

	r1, r2 := foo3("func3", 3)
	fmt.Println("r1 = ", r1)
	fmt.Println("r2 = ", r2)

	r1, r2 = foo4("func4", 4)
	fmt.Println("r1 = ", r1)
	fmt.Println("r2 = ", r2)

}

1.2.5 init函数与import导包

文件目录树状图

lib1.go 代码:

package lib1

import "fmt"

//当前lib1包提供的API
//首字母大写的话代表当前接口对外开放,首字母小写只能在该文件下使用
func Lib1Test () {
	fmt.Println("Lib1Test() ...")
}

func init () {
	fmt.Println("lib1 init ...")
}

lib2.go 代码: 

package lib2

import "fmt"

//当前lib2包提供的API
func Lib2Test () {
	fmt.Println("Lib2Test() ...")
}

func init () {
	fmt.Println("lib2 init ...")
}

main.go代码:

package main

//需要在GOPATH下
import (
	"GolangStudy/5_init/lib1"
	"GolangStudy/5_init/lib2"
)


func main () {
	lib1.Lib1Test()
	lib2.Lib2Test()
}

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

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

相关文章

黑客(信息安全网络安全)自学手册

一、自学网络安全学习的误区和陷阱 1.不要试图先成为一名程序员(以编程为基础的学习)再开始学习 行为:从编程开始掌握,前端后端、通信协议、什么都学。 缺点:花费时间太长、实际向安全过渡后可用到的关键知识并不多。…

uniapp自定义头部,计算状态栏和导航栏高度超简单三步

效果图 1.pages.json 页面给要自定义头部的页面加入一行代码 "navigationStyle":"custom" {"path": "pages/index/index","style": {"navigationBarTitleText": "","navigationStyle":"…

代码随香录day16

104. 二叉树的最大深度 思路:这道题推荐用层序遍历递归的方式 递归三要素: 终止条件:当当前node为空时候 单层递归逻辑:分别向node的左子树和右子树进行递归,定义left和right接受返回值 递归参数:root 代…

wincc与300以太网通讯教程在建材行业矿粉磨生产自动化控制系统中应用

内容摘要 上位机与S7-300PLC通信采用以太网通信,通讯模块采用捷米特ETH-S7300-JM01以太网通讯模块,捷米特ETH-S7300-JM01通讯模块直接插到CPU315-2DP的DP口上。 项目介绍 立磨PLC控制系统: 立磨是一种理想的大型粉磨设备,广泛应…

最详细的下载安装PicGo图床配合Typora使用

1.node.js下载安装1.2 检验安装成功 2. PicGo下载安装3. 配置Gitee【配合PicGo使用】3.1 获取PicGo的token 4. 配置PicGo4.1 下载插件4.2 配置图床[Gitee]4.3 配置Typora 5. 上传图片到Gitee【重要】6.解决配置错误 1.node.js下载安装 【node.js下载链接】点击跳转页面&#x…

安卓JNI从0到1入门教程(三)

前面两篇博客介绍了jni相关内容,以及怎么在Android中简单使用,demo比较简单。这次来讲讲复杂一点的java和C/C的互相调用。 下面我们将要实现的功能是将Java对象传递给C,然后用C的对象接收值,最后把C对象的值回传给Java层。 一、…

HP Laser 136nw打印机与win10实现Wifi直连

HP Laser 136nw打印机与win10实现Wifi直连 HP Laser 136nw打印机设置HP Smart HP Laser 136nw打印机设置 打开打印机WIFI开关,使其他设备可以搜索到 查看打印机设备名称,用于设备搜索 查看打印机WIFI密钥,用于windows与打印机直连 根据…

深度学习开源框架

文章目录 1. 深度学习框架1.1 概述1.2 深度学习框架—关于组件1.2.1 组件—张量1.2.2 基于张量的各种操作1.2.3 计算图1.2.4 自动微分工具1.2.5 拓展包 2. 主流深度学习框架2.1 市面上主流框架2.2 本土深度学习框架2.3 深度学习框架的标准化--ONNX 3. Tensorflow3.1 Tensorflow…

【读书笔记】《认知驱动》- 周岭 - 2021年出版

不停的阅读,然后形成自己的知识体系。 2023.07. 读 读完毛姆的《月亮与六便士》,本来打算阅读《人类群星闪耀时》。尝试阅读了一下,有点太累了,于是换周岭老师的另一本《认知驱动》来读吧,这本书稍显轻快好理解一些&a…

JavaScript的数据类型和数据类型的检测

目录 数据类型 数据类型的检测 🎁更多干货 完整版文档下载方式: 数据类型 JavaScript的基础数据类型有,NaN string undefined Null Boolen Symbol   Bigint 这些都是基础数据类型,还有一个引用数据类型&…

2. CSS3的新特性

2.1CSS3的现状 ●新增的CSS3特性有兼容性问题, ie9才支持 ●移动端支持优于PC端 ●不断改进中 ●应用相对广泛 ●现阶段主要学习: 新增选择器和盒子模型以及其他特性 CSS3给我们新增了选择器,可以更加便捷,更加自由的选择目标元素: 1.属性选择器 2.结构伪类选择器…

中介者(Mediator)模式

目录 动机使用场景参与者协作效果实现相关模式应用和思考 中介者(Mediator)是对象行为模式,用一个中介对象来封装一系列对象的交互。中介者使各对象不需要显式的相互应用,从而使其耦合松散,而且可以独立的改变他们之间的交互 动机 面向对象设…

光学卷积处理芯片---自动驾驶高性能运算平台的福音?

摘要: 本文提到的在低损耗氮化硅平台上制造的紧凑片上光学卷积处理单元,可以展示出其大规模集成的能力。 深度学习的处理模式是我们在在自动驾驶环境目标分类、识别、跟踪等场合下不可或缺的重要一环。随着自动驾驶技术的不断演进,要求处理的…

怎么学习核心Java相关的技术和知识? - 易智编译EaseEditing

学习核心Java相关的技术和知识可以按照以下步骤进行: 学习Java基础: 从Java语言的基础知识开始学习,了解语法、数据类型、运算符、控制流程等基本概念。 可以通过在线教程、书籍或学习资源进行自学,如Oracle官方的Java教程、Ja…

funbox2靶场笔记

信息收集开放21,22,80端口 21端口存在ftp匿名访问,下载压缩包,有密码,直接破解 ftp简单命令 ftp ip anonymous#匿名用户 ls cd pwd lpwd get pwd mget 使用工具fcrackzip fcrackzip -D -u -p rockyou.txt tom.zip -D 使用字典 rockyou字…

反射的基础部分知识

反射的基础——Class Java当中的类用来表示具有相同属性和方法的对象的集合,是抽象的概念。对象是类创建的,同一个类的不同对象具有不同的属性值。 Java当中定义的所有类都属于同一类事物,可以Class来表示。 类型 访问方法 返回值类型 说…

MySQL数据库管理(二)

文章目录 一.表结构(增加字段)1.创建表结构2.复制数据表2.1 复制格式2.2 克隆表 3.清空表,删除表内的所有数据4.创建临时表 二.MySQL中6种常见的约束1.外键的定义2.创建外键约束作用3.创建主表blue4.创建从表Icecream5.为主表blue添加一个主键约束。主键名建议以&qu…

JAVA - 内存管理

目录 内存管理是什么 JVM内存区域组成 程序计数器PC java虚拟机栈 本地方法栈 JAVA堆 方法区 常量池 运行时常量池 内存管理是什么 Java的内存管理就是对象的分配和释放问题 分配 :内存的分配由程序完成的,程序员通过关键字new 为每个对象申请…

mysql视图的简单应用

1、创建一视图 stu_info,查询全体学生的姓名,性别,课程名,成绩。 create view stu_info(姓名,性别,课程名,成绩) as select Sname,Ssex,Cname,Score from Course,SC,Student where Student.Sno SC.Sno and SC.Cno Course.Cno;去查看视图 …

混合云监控

混合云基础架构的增长是由增强的灵活性、成本优化机会以及对敏捷 DevOps 文化的支持等优势推动的。另一方面,在混合云环境中很难实现可见性、问责制和控制,这被证明是混合云成功的障碍。尽管公共云提供商提供了用于监控服务可用性的控制台,但…