zoukankan      html  css  js  c++  java
  • 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, "+"))
    
    }
    

    字符串修改

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

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

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

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

  • 相关阅读:
    27 Spring Cloud Feign整合Hystrix实现容错处理
    26 Spring Cloud使用Hystrix实现容错处理
    25 Spring Cloud Hystrix缓存与合并请求
    24 Spring Cloud Hystrix资源隔离策略(线程、信号量)
    23 Spring Cloud Hystrix(熔断器)介绍及使用
    22 Spring Cloud Feign的自定义配置及使用
    21 Spring Cloud使用Feign调用服务接口
    20 Spring Cloud Ribbon配置详解
    19 Spring Cloud Ribbon自定义负载均衡策略
    18 Spring Cloud Ribbon负载均衡策略介绍
  • 原文地址:https://www.cnblogs.com/weiweivip666/p/13945536.html
Copyright © 2011-2022 走看看