标签:tab 提高 ring 格式化 workspace count OLE body 配置
学习一门语言首先hello world
1,首先建立一个目录,新建一个hello.go的文件
package main
import (
"fmt"
)
func main() {
fmt.Println("hello world")
}
2,go run hello.go
jack_zhou@zhoulideMacBook-Pro study % go run hello.go
hello world
上面我们就完成了我们的基础使命。下面我们正式开始入门
在正式进入写代码之前,推荐大家使用JB家族的Goland
在设置中需要注意GOPATH和GOROOT不能写同一个地址,否则会报错:
warning: GOPATH set to GOROOT (/usr/local/go) has no effect
go build + 路径
# 第一种package变量
var (
a = 1
b = 2
)
var aa = true
# 第二种非package变量
var a, b int = 1, 2
# 简写
var a,b = 1, "89"
# 精简
a, b := 1, "78" // 全局不可使用
在上一个例子的基础上写一个加法函数,传入两个变量,返回两个参数之和
package main
import (
"fmt"
)
func add(a int, b int) int {
var sum int
sum = a + b
return sum
}
func main() {
var c int
c = add(100, 200)
fmt.Println("hello world!", c)
}
在上述例子中,我们可以看到,他是没有封号的
在定义变量的时候需要指定比变量的类型,定义函数的时候,在()外需要写上返回值的类型
需要注意的是,go不容许定义变量而不使用的情况发生,否则编译的时候就会报错,比如:
c declared and not used
在Goland中配置
需要加上Project GOPATH 路径
go默认所有的项目文件都放在src目录下面
在project目录下执行go build go_test/day1/example即可
go build -o bin/calc go_dev/day1/package_count/main
用 -o 来指定目录bin,文件为calc,编译的是main
[x] 所有源码以.go结尾
[x] 标识符以字母或者下划线开头,大小写敏感(_)
[x] _是特殊标识符,用来忽略结果
[x] 保留关键字
break | default | func | interface | select |
---|---|---|---|---|
case | defer | go | map | struct |
chan | else | goto | package | switch |
const | fallthrough | if | range | type |
continue | for | import | return | var |
任何一个代码文件隶属于一个包
import 关键字,引用其他包
import ("fmt")
import ("os")
// 通常写为
import (
"fmt"
"os"
)
Golang 可执行程序,package main,并且有且只有一个main函数入口
包内函数调用,直接调用
不同包内调用函数,需要通过包名 + 点 + 函数名进行调用(函数名首字母必须大写)
package main
import "fmt"
func list(n int) {
for i := 0; i <= n; i++ {
fmt.Println("%d+%d=%d\n", i, n-i, n)
}
}
func main() {
list(10)
}
// 打印循环
[x] 注意:在包中可以定义一个init函数,默认会在main执行之前执行
package calc
var Name string = "jack"
var Age int = 10
func init() {
Name = "zhou"
Age = 100
}
// 最终结果是Name为zhou,Age为100
// 执行顺序 先执行全局变量,在执行init,最后到main
常量使用const修饰,代表永远是只读的,运行期间不能够修改
const只能修饰boolean,number(int相关类型、浮点类型、cpmplex)和string
语法:const identifier [type] = value,其中type可以省略。
const b string = "hello world"
const b = "hello world"
const Pi = 3.1415926
const a = 9.3
const c = getValue() // 错误,因为常量是不可改变的
单行注释 // 多行注释 /* */(其实和JS的写法一致的)
见上方变量的定义
值类型: 基本数据类型int,float, bool, string以及数组和struct
当值类型需要修改的时候 传入值之前加一个&即可,比如:
modify(a) ---->>> modify(&a)
这样就相当于传入a的内存地址到modify中去
引用类型: 指针,slice,map, chan等都是引用类型
逻辑操作符
== 、!=、<=、>=、>、<、!、&&、 ||
func main() {
a := 10
if (a > 2) {
fmt.Println(a)
}
}
数学操作符
+、-、*、/ 等等
func main() {
var str = "hello world\n"
var str1 = `
窗前明月光,
地上鞋两双。
`
var b byte = 'c'
fmt.Println(str)
fmt.Println(str1)
fmt.Println(b)
fmt.Printf("%c\n", b)
}
go在进行输出的时候是不会改变原有的样式的,对于打印bytes对象,会直接打印对于字符表中的具体位置的
fmt文档:给您放这里啦
例子: 交换两个变量的值
package main
import (
"fmt"
_ "os"
)
func swap(a int, b int) {
tem := a
a = b
b = tem
return
}
func main() {
first := 100
second := 200
swap(first, second)
fmt.Println(first, second)
}
结果如下:
jack_zhou@zhoulideMacBook-Pro ~ % /Users/jack_zhou/workspace/gospace/project/main ; exit;
100 200
为啥没有产生变化呢?
因为这两个变量属于值类型的,值类型是属于复制拷贝,改的是副本的值,如果需要改就必须传入指针地址。那如何修改呢?
package main
import (
"fmt"
_ "os"
)
func swap(a *int, b *int) {
tem := *a
*a = *b
*b = tem
return
}
func main() {
first := 100
second := 200
swap(&first, &second) // 传入变量的地址
fmt.Println(first, second)
}
结果如下:
Last login: Sun Dec 8 22:55:57 on ttys002
jack_zhou@zhoulideMacBook-Pro ~ % /Users/jack_zhou/workspace/gospace/project/main ; exit;
200 100
package main
import (
"fmt"
_ "os"
)
func swap(a int, b int) (int, int) {
tem := a
a = b
b = tem
return a, b
}
func main() {
first := 100
second := 200
first, second = swap(first, second) // 传入变量的地址
fmt.Println(first, second)
}
通过返回值的方式也是可以的
最简单的方式是:
package main
import (
"fmt"
_ "os"
)
func main() {
first := 100
second := 200
first, second = second, first
fmt.Println(first, second)
}
写到这突然发现还是Python大法好啊╮( ̄▽ ̄)╭
直接相加
package main
import "fmt"
func main() {
var str = "hello"
var str2 = " world"
str3 := str+str2
fmt.Println(str3)
}
格式化输出
package main
import "fmt"
func main() {
var str = "hello"
var str2 = " world"
// str3 := str+str2
str3 := fmt.Sprintf("%s %s", str, str2) // 格式化输出
fmt.Println(str3)
}
求字符串长度
package main
import "fmt"
func main() {
var str = "hello"
var str2 = " world"
// str3 := str+str2
str3 := fmt.Sprintf("%s %s", str, str2) // 格式化输出
n := len(str3)
fmt.Printf("len(str)=%d\n", n)
}
字符串的切片
package main
import "fmt"
func main() {
var str = "hello"
var str2 = " world"
// str3 := str+str2
str3 := fmt.Sprintf("%s %s", str, str2) // 格式化输出
substr := str3[0:5] // 和Python操作一致
fmt.Println(substr)
}
字符串反转
package main
import "fmt"
func reverse(str string) string {
var result []byte
tmp := []byte(str) // 强制转换字符数组
length := len(str)
for i := 0; i < length; i++ {
result = append(result, tmp[length-i-1])
}
return string(result)
}
func main() {
var str = "hello"
var str2 = " world"
str3 := str + str2
result := reverse(str3)
fmt.Println(result)
}
标签:tab 提高 ring 格式化 workspace count OLE body 配置
原文地址:https://www.cnblogs.com/zhoulixiansen/p/12014323.html