go语言开发环境搭建

安装go开发包

Go官方镜像站(推荐):https://golang.google.cn/dl/

mac下载对应的go安装文件

默认安装在/usr/local/go目录下

检测版本

go version

配置goproxy

# Go1.14版本之后,都推荐使用go mod模式来管理依赖环境了,也不再强制我们把代码必须写在GOPATH下面的src目录了,你可以在你电脑的任意位置编写go代码。(网上有些教程适用于1.11版本之前。)
默认GoPROXY配置是:GOPROXY=https://proxy.golang.org,direct,由于国内访问不到https://proxy.golang.org,所以我们需要换一个PROXY,这里推荐使用https://goproxy.io或https://goproxy.cn。
可以执行下面的命令修改GOPROXY:
go env -w GOPROXY=https://goproxy.cn,direct

编译

  • 使用go build
    1.在项目目录上执行go build,点击目录然后集成到终端,输入go build,会在当前目录下生产一个.exe结尾的可执行文件,直接执行这个文件即可


    2.在其它位置如果想编译的话,那么需要加路径,路径从src下一级开始
    go build github.com/edsionxuanxuan/day01/helloworld,生成的执行文件就在你执行的路径下面
    3.指定生成后的可执行文件名
    go build -o hello.exe
  • 使用go run
  1. 终端命令:go run main.go,直接打印
  • 使用go install
    一共做了两件事
    1.先会执行go build执行编译,生成可执行文件
    2.然后把可执行文件拷贝到bin目录下面

交叉编译

go支持跨平台编译
例如:在windows平台编译一共能在linux平台执行的可执行文件

SET CGO_ENABLED=0   //禁用CGO
SET GOOS=Linux   //目标平台是linux
SET GOARCH=amd64 //处理器架构

在执行go build就可以生成一个可在linux服务器上执行的可执行文件

代码解析

#package:所有的go文件都需要有一个package的声明
#main:包名,如果是main包说明代码最终会编译成一个可执行文件
package main  

import "fmt"  # 导入包,要用双引号
# 函数外只能放一些变量常量函数类型的声明

func main()  {  # main函数 整个程序的入口
	fmt.Println("Hello World!")
}

变量和常量

变量

package main

import "fmt"

// go语言推荐使用驼峰式命名
var studentName string

// 声明变量
// var name string
// var age int
// var isOk bool

// 批量声明
var (
	name string // ""
	age  int    // 0
	isOk bool   //false
)

func main() {
	name = "理想"
	age = 16
	isOk = true
	// go语言中非全局变量声明了必须使用,不使用编译不过去
	fmt.Print(isOk)             //在终端中输出要打印的内容
	fmt.Printf("name:%s", name) // %s占位符 使用name这个变量的值取替换
	fmt.Println(age)            //打印完后会在最后面加一个换行符

	// 声明变量并同时赋值
	var s1 string = "王小小"
	fmt.Println(s1)
	// 类型推导(根据值判断该变量是什么类型)
	var s2 = "20"
	fmt.Println(s2)
	// 简短变量声明,只能在函数中使用下面声明方式
	s3 := "哈哈哈"
	fmt.Println(s3)
	// 匿名变量,不占用命名空间,不会分配内存,当返回多个值时,有些值不想使用,就可以用`_`来接收
	// s1 := 10  同一个作用域({这里面就是作用域})不能重复声明同一个变量
}

常量

package main

import "fmt"

const pi = 3.1415926

// 批量声明变量
const (
	statusOk = 200
	notFound = 404
)

// 批量声明常量时,如果某一行声明后没有赋值,说明它的值是跟上一行的值一样
const (
	n1 = 100
	n2
	n3
)
// iota
const (
	a1 = iota  //0
	a2   // 1
	a3   //2
)

const (
	b1 = iota //0
	b2   // 1
	_    // 2
	b3  // 3
)

// 插队 const中iota从0开始,每新增一行常量声明 iota+1
const (
	c1 = iota  //0
	c2 = 100 //100
	c3 = iota   //2
	c4  // 3
)
// 多个常量声明在一行
const (
	d1,d2 = iota+1,iota+2  // 1,2
	d3,d4 = iota+1,iota+2 // 2,3
)

// 定义数量级
const (
	_ = iota
	KB = 1 << (10*iota)  // 向左偏移10*iota位 1024
	MB = 1 << (10*iota)
	GB = 1 << (10*iota)
	TB = 1 << (10*iota)
	PB = 1 << (10*iota)

)

func main()  {
	fmt.Println("n1",n1)
	fmt.Println("n2",n2)
	fmt.Println("n3",n3)
	fmt.Println("a1",a1)
	fmt.Println("a2",a2)
	fmt.Println("a3",a3)
}

八进制&十六进制

go语言中无法直接定义二进制

package main

import "fmt"

// 整型
func main(){
	// 十进制
	var i1 = 101
	fmt.Printf("%d
", i1)   // 直接打印
	fmt.Printf("%b
", i1)  // 十进制转2进制
	fmt.Printf("%o
", i1) // 把十进制转换为八进制
	fmt.Printf("%x
", i1) // 把十进制转换为十六进制
	// 八进制
	i2 := 077
	fmt.Printf("%d
", i2)  // 八进制转十进制
	// 十六进制
	i3 := 0x1234567
	fmt.Printf("%d
", i3)  // 十六进制转十进制
	// 查看变量类型 T
	fmt.Printf("%T
", i3)

	// 声明int8类型的变量
	i4 := int8(9)  //明确指定int8类型,否则就是默认为int类型
	fmt.Printf("%T", i4)
}

浮点型

float32和float64

package main

import "fmt"

// 浮点数



func main()  {
	// math.MaxFloat32   //32位浮点数最大数
	f1 := 1.23456
	fmt.Printf("%T
", f1) // 默认go语言中的小数都是float64
	f2 := float32(1.23456)
	fmt.Printf("%T
", f2) // 显示声明float32类型
	
}

复数

complex64和complex128

布尔值

1.只有trueflase两个值,默认声明的bool类型为false
2.不允许将整数转换为布尔型
3.布尔型无法参与数值运算,也无法与其他类型进行转换

fmt

package main

import "fmt"

// fmt占位符
func main(){
	var n = 100
	// %T 查看类型
	fmt.Printf("%T
", n)
	// %v  查看值
	fmt.Printf("%v
", n)
	// %b  查看二进制
	fmt.Printf("%b
", n)
	// %d  查看十进制
	fmt.Printf("%d
", n)
	// %o  查看八进制
	fmt.Printf("%o
", n)
	// %x  查看十六进制
	fmt.Printf("%x
", n)

	var s = "Hello World"
	// %s 查看字符串的值
	fmt.Printf("%s
", s)
	// %v 查看值
	fmt.Printf("%v
", s)
	// %#v 原型化输出,引号也会打印出来
	fmt.Printf("%#v
", s)
}

字符串

go语言中字符串必须用双引号包裹
go语言中单引号包裹的是字符

s := "hello world"  // 字符串 
c1 := 'h'  //字符

字符串常用操作

package main

import (
	"fmt"
	"strings"
)

func main(){
	// 本来是具有特殊含义的,我应该告诉程序我写的就是一个单纯的
	path := "'D:\Go\src\day01'"
	fmt.Println(path) // 打印结果为带单引号的路径

	s := "I'm ok"
	fmt.Println(s)
	// 多行的字符串
	s2 := `第一行
	第二行
	第三行
	`
	fmt.Println(s2)
	s3 := `D:Gosrcday01`
	fmt.Println(s3)   // 打印结果为D:Gosrcday01

	// 字符串相关操作
	fmt.Println(len(s3))  // 计算长度

	// 字符串拼接
	name := "理想"
	world := "dsb"
	// 方式1 + 拼接
	ss := name + world
	fmt.Println(ss)
	// 方式2 Sprintf 拼接
	ss1 := fmt.Sprintf("%s%s", name, world) //
	fmt.Println(ss1)

	// 分割
	ret := strings.Split(s3, "\")
	fmt.Println(ret)

	// 包含
	fmt.Println(strings.Contains(ss,"理性")) // 返回false
	fmt.Println(strings.Contains(ss,"理想")) // 返回true

	// 前缀 以什么开头
	fmt.Println(strings.HasPrefix(ss, "理想")) // 返回true
	// 后缀 以什么结尾
	fmt.Println(strings.HasSuffix(ss, "理想")) // 返回false

	// 取索引下标 以0开始
	s4 := "abcdeb"
	fmt.Println(strings.Index(s4, "c"))  // 2
	// 判断最后出现的位置
	fmt.Println(strings.LastIndex(s4, "b"))  // 5

	// join拼接
	fmt.Println(strings.Join(ret, "+"))

}

字符串修改

默认字符串是不能修改的,如果要修改需要转换为另外一种类型的变量

-------------------------------------------

个性签名:代码过万,键盘敲烂!!!

如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!

原文地址:https://www.cnblogs.com/weiweivip666/p/13945536.html