Go的安装
Go安装只需要去go
官网下载msi或者zip
文件进行安装或者解压就行了,无脑next,配置Go的bin目录到path就可以了
需要注意的是,配置GOPATH为项目文件路径,路径下包含三个文件夹,lib,pkg,src,记得配置GOPATH不然运行不起来
IDEA配置
GOROOT就是go的目录了(bin的父级目录)
GOPATH就是src目录了
package main
import (
"fmt"
"math"
"time"
)
const name = "zhangsan"
func main() {
fmt.Printf("hello, world\n")
//values
//go的值类型,有string,boolean,int等
fmt.Println("go" + "lang")
fmt.Println("7.0/3.0=", 7.0/3.0, true)
fmt.Println(7.0, 3.0, 7.0/3, 7/3)
fmt.Println(true && false)
fmt.Println(1^2, 1&2, 1|2)
fmt.Println(!true)
//variables
//使用var关键字来表示变量
//变量定义就要使用,不然会报错
var a = "initial"
fmt.Println(a)
//一次定义多个变量
var b, c int = 1, 2
fmt.Println(b, c)
var d = true
fmt.Println(d)
//没有初始化会被赋值为类型的默认值,例如int会赋值0,string会复制""空串
var e int
fmt.Println(e)
var f string
print(f)
//Constants
//常量,go的常量可以是character,string,boolean和数字类型
//使用const关键字定义常量,
const s string = "constant"
fmt.Println(s)
//const常量也可以定义在main之外
fmt.Println(name)
const n = 5000000
//3e10就是3*10^10
const d1 = 3e10 / n
fmt.Println(d1)
//300
fmt.Println(3e2)
//数值类型只有给定类型之后才有类型,如果之前没有指定类型,可以显示的转化
//这里显式将d1的值类型设置为64位int
fmt.Println(int64(d1))
//一个数值可以通过使用它的上下文来设置类型,例如设置一个变量或者函数调用
fmt.Println(math.Sin(n))
var ff float32 = n
fmt.Println(ff)
//For循环,go的for循环和java十分类似,唯一不同的就是没有了小括号
//:=赋值,只有第一次初始化才能用,第二次会报错
i := 1
//只有条件,循环中控制跳出条件
for i <= 3 {
fmt.Println(i)
i++
}
//没条件,死循环,循环中控制跳出
for {
fmt.Println("look")
if i > 10 {
//break跳出当前循环
break
}
i++
}
//for 三部分
for n := 0; n < 100; n++ {
if n%2 == 0 {
//continue跳出本次循环,进行下一次循环
continue
}
fmt.Println(n)
}
//if-else条件分支
//if-else
if 7%2 == 0 {
fmt.Println("7 is even")
} else {
fmt.Println("7 is odd")
}
//if,没else
if 8%4 == 0 {
fmt.Println("8 is divisible by 4")
}
//if-else if
if num := 9; num < 0 {
fmt.Println(num, " is negative")
} else if num < 10 {
fmt.Println(num, " has 1 digit")
} else {
fmt.Println(num, " has multiple digit")
}
//Switch
i = 2
fmt.Println("write", i, "as")
switch i {
case 1:
fmt.Println("one")
case 2:
fmt.Println("two")
case 3:
fmt.Println("three")
}
switch time.Now().Weekday() {
case time.Saturday, time.Sunday:
fmt.Println("It is a weekend")
default:
fmt.Println("It is a work day")
}
t := time.Now()
//switch的case可以是表达式,这个有点骚气
switch {
case t.Hour() < 12:
fmt.Println("0", t.Hour())
default:
fmt.Println(t.Hour())
}
//switch可以比较类型
//这个不是很懂,whatAmI定义为一个函数,接收一个接口??什么鬼
//i.(type)获得传进去的东西的类型??.....以后再看吧
whatAmI := func(i interface{}) {
switch t1 := i.(type) {
case bool:
fmt.Println("I am a bool")
case int64:
fmt.Println("I am an int64")
default:
fmt.Printf("Don't know the type %T\n", t1)
}
}
whatAmI(true)
whatAmI(t)
whatAmI("hey")
//Array
//数组时一指定长度带编号的元素集
var arr [5] int
//没赋值,全是0
fmt.Println("emp", arr)
arr[4] = 100
fmt.Println("set:", arr)
fmt.Println("get:", a[4])
//指定长度和初始值,最后一个没有赋值,还是0
bArr := [5]int{1, 2, 3, 4}
fmt.Println("bArr", bArr)
//二维数组
var twoD [2][3]int
for i = 0; i < 2; i++ {
for j := 0; j < 3; j++ {
twoD[i][j] = i + j
}
}
fmt.Println(twoD)
}
参考:
go by example